xref: /llvm-project/llvm/test/DebugInfo/X86/DIExpr-const-folding.ll (revision 5a288fa32e0c91b211e39f3e370255916902f898)
1; RUN: llc -mtriple=x86_64 -filetype=obj < %s \
2; RUN:   | llvm-dwarfdump -debug-info - | FileCheck %s
3; RUN: llc -mtriple=x86_64 -filetype=obj -fast-isel < %s \
4; RUN:   | llvm-dwarfdump -debug-info - | FileCheck %s
5
6;; The important thing is the DW_OP_lit2 with no converts.
7;; TODO: Make this work with global isel
8;; Indirectly related FIXME: Should be able to emit DW_AT_const_value instead.
9
10; CHECK: DW_TAG_variable
11; CHECK-NEXT: DW_AT_location (DW_OP_lit2, DW_OP_stack_value)
12; CHECK-NEXT: DW_AT_name ("bIsShowingCollision")
13
14%class.UClient = type { ptr, %struct.FFlags }
15%class.UWorld = type { i16 }
16%struct.FFlags = type { [9 x i8], i32 }
17
18define dso_local void @_ZN7UClient13ToggleVolumesEv(ptr nocapture nonnull align 8 dereferenceable(24) %this) local_unnamed_addr align 2 !dbg !8 {
19entry:
20  call void @llvm.dbg.value(metadata i72 2, metadata !43, metadata !DIExpression(DW_OP_LLVM_convert, 72, DW_ATE_unsigned, DW_OP_LLVM_convert, 8, DW_ATE_unsigned, DW_OP_stack_value)), !dbg !48
21  %0 = load ptr, ptr %this, align 8, !dbg !49, !tbaa !51
22  store i16 2, ptr %0, align 1, !dbg !59
23  ret void, !dbg !60
24}
25
26; Function Attrs: nofree nosync nounwind readnone speculatable willreturn
27declare void @llvm.dbg.value(metadata, metadata, metadata)
28
29!llvm.dbg.cu = !{!0}
30!llvm.module.flags = !{!3, !4, !5, !6}
31!llvm.ident = !{!7}
32
33!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 13.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
34!1 = !DIFile(filename: "min-test-3.cpp", directory: "/home/probinson/projects/scratch/tc8251")
35!2 = !{}
36!3 = !{i32 7, !"Dwarf Version", i32 4}
37!4 = !{i32 2, !"Debug Info Version", i32 3}
38!5 = !{i32 1, !"wchar_size", i32 4}
39!6 = !{i32 7, !"uwtable", i32 1}
40!7 = !{!"clang version 13.0.0"}
41!8 = distinct !DISubprogram(name: "ToggleVolumes", linkageName: "_ZN7UClient13ToggleVolumesEv", scope: !9, file: !1, line: 39, type: !37, scopeLine: 40, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, declaration: !36, retainedNodes: !40)
42!9 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "UClient", file: !1, line: 31, size: 192, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !10, identifier: "_ZTS7UClient")
43!10 = !{!11, !20, !36}
44!11 = !DIDerivedType(tag: DW_TAG_member, name: "World", scope: !9, file: !1, line: 34, baseType: !12, size: 64, flags: DIFlagPublic)
45!12 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64)
46!13 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "UWorld", file: !1, line: 8, size: 16, flags: DIFlagTypePassByValue, elements: !14, identifier: "_ZTS6UWorld")
47!14 = !{!15, !18, !19}
48!15 = !DIDerivedType(tag: DW_TAG_member, name: "bCollision", scope: !13, file: !1, line: 11, baseType: !16, size: 1, flags: DIFlagPublic | DIFlagBitField, extraData: i64 0)
49!16 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint8", file: !1, line: 1, baseType: !17)
50!17 = !DIBasicType(name: "unsigned char", size: 8, encoding: DW_ATE_unsigned_char)
51!18 = !DIDerivedType(tag: DW_TAG_member, name: "dummyA", scope: !13, file: !1, line: 12, baseType: !16, size: 7, offset: 1, flags: DIFlagPublic | DIFlagBitField, extraData: i64 0)
52!19 = !DIDerivedType(tag: DW_TAG_member, name: "dummyB", scope: !13, file: !1, line: 13, baseType: !16, size: 1, offset: 8, flags: DIFlagPublic | DIFlagBitField, extraData: i64 0)
53!20 = !DIDerivedType(tag: DW_TAG_member, name: "EngineShowFlags", scope: !9, file: !1, line: 35, baseType: !21, size: 128, offset: 64, flags: DIFlagPublic)
54!21 = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "FFlags", file: !1, line: 16, size: 128, flags: DIFlagTypePassByValue | DIFlagNonTrivial, elements: !22, identifier: "_ZTS6FFlags")
55!22 = !{!23, !26, !27, !28, !29, !30, !32}
56!23 = !DIDerivedType(tag: DW_TAG_member, name: "Volumes", scope: !21, file: !1, line: 18, baseType: !24, size: 1, flags: DIFlagBitField, extraData: i64 0)
57!24 = !DIDerivedType(tag: DW_TAG_typedef, name: "uint32", file: !1, line: 2, baseType: !25)
58!25 = !DIBasicType(name: "unsigned int", size: 32, encoding: DW_ATE_unsigned)
59!26 = !DIDerivedType(tag: DW_TAG_member, name: "Collision", scope: !21, file: !1, line: 19, baseType: !24, size: 1, offset: 1, flags: DIFlagBitField, extraData: i64 0)
60!27 = !DIDerivedType(tag: DW_TAG_member, name: "dummy1", scope: !21, file: !1, line: 20, baseType: !24, size: 30, offset: 2, flags: DIFlagBitField, extraData: i64 0)
61!28 = !DIDerivedType(tag: DW_TAG_member, name: "dummy2", scope: !21, file: !1, line: 21, baseType: !24, size: 32, offset: 32, flags: DIFlagBitField, extraData: i64 0)
62!29 = !DIDerivedType(tag: DW_TAG_member, name: "dummy3", scope: !21, file: !1, line: 22, baseType: !24, size: 1, offset: 64, flags: DIFlagBitField, extraData: i64 0)
63!30 = !DIDerivedType(tag: DW_TAG_member, name: "CustomShowFlags", scope: !21, file: !1, line: 24, baseType: !31, size: 32, offset: 96)
64!31 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
65!32 = !DISubprogram(name: "FFlags", scope: !21, file: !1, line: 25, type: !33, scopeLine: 25, flags: DIFlagPrototyped, spFlags: DISPFlagOptimized)
66!33 = !DISubroutineType(types: !34)
67!34 = !{null, !35}
68!35 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !21, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
69!36 = !DISubprogram(name: "ToggleVolumes", linkageName: "_ZN7UClient13ToggleVolumesEv", scope: !9, file: !1, line: 36, type: !37, scopeLine: 36, flags: DIFlagPublic | DIFlagPrototyped, spFlags: DISPFlagOptimized)
70!37 = !DISubroutineType(types: !38)
71!38 = !{null, !39}
72!39 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)
73!40 = !{!41, !43}
74!41 = !DILocalVariable(name: "this", arg: 1, scope: !8, type: !42, flags: DIFlagArtificial | DIFlagObjectPointer)
75!42 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !9, size: 64)
76!43 = !DILocalVariable(name: "bIsShowingCollision", scope: !44, file: !1, line: 45, type: !46)
77!44 = distinct !DILexicalBlock(scope: !45, file: !1, line: 42, column: 2)
78!45 = distinct !DILexicalBlock(scope: !8, file: !1, line: 41, column: 6)
79!46 = !DIDerivedType(tag: DW_TAG_const_type, baseType: !47)
80!47 = !DIBasicType(name: "bool", size: 8, encoding: DW_ATE_boolean)
81!48 = !DILocation(line: 0, scope: !44)
82!49 = !DILocation(line: 51, column: 8, scope: !50)
83!50 = distinct !DILexicalBlock(scope: !44, file: !1, line: 51, column: 8)
84!51 = !{!52, !53, i64 0}
85!52 = !{!"_ZTS7UClient", !53, i64 0, !56, i64 8}
86!53 = !{!"any pointer", !54, i64 0}
87!54 = !{!"omnipotent char", !55, i64 0}
88!55 = !{!"Simple C++ TBAA"}
89!56 = !{!"_ZTS6FFlags", !57, i64 0, !57, i64 0, !57, i64 0, !57, i64 4, !57, i64 8, !57, i64 12}
90!57 = !{!"int", !54, i64 0}
91!58 = !DILocation(line: 52, column: 12, scope: !50)
92!59 = !DILocation(line: 52, column: 23, scope: !50)
93!60 = !DILocation(line: 55, column: 1, scope: !8)
94