mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-11-25 06:40:18 +00:00
[IR/DIVar] Add the flag for params that have unmodified value
Introduce the debug info flag that indicates that a parameter has unchanged value throughout a function. This info will be used to emit the expressions with DW_OP_entry_value. ([4/13] Introduce the debug entry values.) Co-authored-by: Ananth Sowda <asowda@cisco.com> Co-authored-by: Nikola Prica <nikola.prica@rt-rk.com> Co-authored-by: Ivan Baev <ibaev@cisco.com> Differential Revision: https://reviews.llvm.org/D58034 llvm-svn: 364406
This commit is contained in:
parent
a6319e5f83
commit
e821e79fce
@ -54,6 +54,7 @@ const (
|
||||
FlagVector
|
||||
FlagStaticMember
|
||||
FlagIndirectVariable
|
||||
FlagArgumentNotModified
|
||||
)
|
||||
|
||||
type DwarfLang uint32
|
||||
|
@ -4764,6 +4764,18 @@ valid debug intrinsic.
|
||||
!4 = !DIExpression(DW_OP_constu, 2, DW_OP_swap, DW_OP_xderef)
|
||||
!5 = !DIExpression(DW_OP_constu, 42, DW_OP_stack_value)
|
||||
|
||||
DIFlags
|
||||
"""""""""""""""
|
||||
|
||||
These flags encode various properties of DINodes.
|
||||
|
||||
The `ArgumentNotModified` flag marks a function argument whose value
|
||||
is not modified throughout of a function. This flag is used to decide
|
||||
whether a DW_OP_entry_value can be used in a location description
|
||||
after the function prologue. The language frontend is expected to compute
|
||||
this property for each DILocalVariable. The flag should be used
|
||||
only in optimized code.
|
||||
|
||||
DIObjCProperty
|
||||
""""""""""""""
|
||||
|
||||
|
@ -50,6 +50,7 @@ HANDLE_DI_FLAG((3 << 16), VirtualInheritance)
|
||||
HANDLE_DI_FLAG((1 << 18), IntroducedVirtual)
|
||||
HANDLE_DI_FLAG((1 << 19), BitField)
|
||||
HANDLE_DI_FLAG((1 << 20), NoReturn)
|
||||
HANDLE_DI_FLAG((1 << 21), ArgumentNotModified)
|
||||
HANDLE_DI_FLAG((1 << 22), TypePassByValue)
|
||||
HANDLE_DI_FLAG((1 << 23), TypePassByReference)
|
||||
HANDLE_DI_FLAG((1 << 24), EnumClass)
|
||||
|
@ -2796,6 +2796,11 @@ public:
|
||||
bool isArtificial() const { return getFlags() & FlagArtificial; }
|
||||
bool isObjectPointer() const { return getFlags() & FlagObjectPointer; }
|
||||
|
||||
/// Check that an argument is unmodified.
|
||||
bool isNotModified() const { return getFlags() & FlagArgumentNotModified; }
|
||||
/// Set the flag if an argument is unmodified.
|
||||
void setIsNotModified() { Flags |= FlagArgumentNotModified; }
|
||||
|
||||
/// Check that a location is valid for this variable.
|
||||
///
|
||||
/// Check that \c DL exists, is in the same subprogram, and has the same
|
||||
|
@ -1,8 +1,8 @@
|
||||
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
|
||||
; RUN: verify-uselistorder %s
|
||||
|
||||
; CHECK: !named = !{!0, !0, !1, !2, !3, !4, !5, !6, !7, !8, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38, !39}
|
||||
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38, !39, !40, !41, !42}
|
||||
; CHECK: !named = !{!0, !0, !1, !2, !3, !4, !5, !6, !7, !8, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38, !39, !40, !41}
|
||||
!named = !{!0, !1, !2, !3, !4, !5, !6, !7, !8, !9, !10, !11, !12, !13, !14, !15, !16, !17, !18, !19, !20, !21, !22, !23, !24, !25, !26, !27, !28, !29, !30, !31, !32, !33, !34, !35, !36, !37, !38, !39, !40, !41, !42, !43, !44}
|
||||
|
||||
; CHECK: !0 = !DISubrange(count: 3)
|
||||
; CHECK-NEXT: !1 = !DISubrange(count: 3, lowerBound: 4)
|
||||
@ -99,3 +99,8 @@
|
||||
; CHECK-NEXT: !39 = !DIBasicType(name: "u64.le", size: 64, align: 1, encoding: DW_ATE_unsigned, flags: DIFlagLittleEndian)
|
||||
!41 = !DIBasicType(name: "u64.be", size: 64, align: 1, encoding: DW_ATE_unsigned, flags: DIFlagBigEndian)
|
||||
!42 = !DIBasicType(name: "u64.le", size: 64, align: 1, encoding: DW_ATE_unsigned, flags: DIFlagLittleEndian)
|
||||
|
||||
; CHECK-NEXT: !40 = distinct !DISubprogram(name: "fn", scope: {{.*}}, file: {{.*}}, spFlags: 0)
|
||||
; CHECK-NEXT: !41 = !DILocalVariable(name: "Name", arg: 1, scope: {{.*}}, file: {{.*}}, line: 13, type: {{.*}}, flags: DIFlagArgumentNotModified)
|
||||
!43 = distinct !DISubprogram(name: "fn", scope: !12, file: !12, spFlags: 0)
|
||||
!44 = !DILocalVariable(name: "Name", arg: 1, scope: !43, file: !12, line: 13, type: !7, flags: DIFlagArgumentNotModified)
|
||||
|
Loading…
Reference in New Issue
Block a user