xref: /llvm-project/llvm/test/DebugInfo/X86/DW_AT_const_value.ll (revision 5ee088134fb87f7d716c58fa65beb11fb6afcb22)
1772847afSOCHyams; RUN: llc %s -o - | FileCheck %s
2*5ee08813SOrlando Cazalet-Hyams; RUN: llc --try-experimental-debuginfo-iterators %s -o - | FileCheck %s
3772847afSOCHyams
4772847afSOCHyams;; Check single location variables of various types with a constant value are
5772847afSOCHyams;; emitted with a DW_AT_const_value attribute.
6772847afSOCHyams
7772847afSOCHyams;; DW_ATE_complex_float
8772847afSOCHyams;; Modified from C source input:
9772847afSOCHyams;; #include <complex.h>
10772847afSOCHyams;; void f() { double complex r1; }
11772847afSOCHyams; CHECK: .Ldebug_info_start0:
12772847afSOCHyams; CHECK:      .byte [[#]]                  # Abbrev {{.*}} DW_TAG_variable
13772847afSOCHyams; CHECK-NEXT: .byte 0                      # DW_AT_const_value
14772847afSOCHyams; CHECK-NEXT: .byte [[r1_str_idx:[0-9]+]]  # DW_AT_name
15772847afSOCHyams
16772847afSOCHyams;; DW_ATE_float
17772847afSOCHyams;; from (at -Os):
18772847afSOCHyams;; void foo() {
19772847afSOCHyams;;   float a = 3.14;
20772847afSOCHyams;;   *(int *)&a = 0;
21772847afSOCHyams;; }
22772847afSOCHyams; CHECK:      .byte [[#]]                  # Abbrev {{.*}} DW_TAG_variable
23772847afSOCHyams; CHECK-NEXT: .byte 0                      # DW_AT_const_value
24772847afSOCHyams; CHECK-NEXT: .byte [[a_str_idx:[0-9]+]]   # DW_AT_name
25772847afSOCHyams
26772847afSOCHyams;; DW_ATE_signed (i128)
27772847afSOCHyams; CHECK:      .byte [[#]]                  # Abbrev {{.*}} DW_TAG_variable
28772847afSOCHyams; CHECK-NEXT: .byte 16                     # DW_AT_const_value
29772847afSOCHyams; CHECK-NEXT: .byte 42
30772847afSOCHyams; CHECK-COUNT-15: .byte 0
31772847afSOCHyams; CHECK-NEXT: .byte [[MAX_str_idx:[0-9]+]] # DW_AT_name
32772847afSOCHyams
33772847afSOCHyams;; DW_ATE_signed (i32)
34772847afSOCHyams; CHECK:      .byte [[#]]                  # Abbrev {{.*}} DW_TAG_variable
35772847afSOCHyams; CHECK-NEXT: .byte 42                     # DW_AT_const_value
36772847afSOCHyams; CHECK-NEXT: .byte [[i_str_idx:[0-9]+]]   # DW_AT_name
37772847afSOCHyams
38772847afSOCHyams; CHECK: .Linfo_string[[r1_str_idx]]:
39772847afSOCHyams; CHECK-NEXT: .asciz "r1"
40772847afSOCHyams; CHECK: .Linfo_string[[a_str_idx]]:
41772847afSOCHyams; CHECK-NEXT: .asciz "a"
42772847afSOCHyams; CHECK: .Linfo_string[[MAX_str_idx]]:
43772847afSOCHyams; CHECK-NEXT: .asciz "MAX"
44772847afSOCHyams; CHECK: .Linfo_string[[i_str_idx]]:
45772847afSOCHyams; CHECK-NEXT: .asciz "i"
46772847afSOCHyams
47772847afSOCHyamstarget triple = "x86_64-unknown-linux-gnu"
48772847afSOCHyams
49772847afSOCHyamsdefine dso_local void @f() local_unnamed_addr !dbg !10 {
50772847afSOCHyamsentry:
51772847afSOCHyams  ;; DW_ATE_complex_float
52772847afSOCHyams  call void @llvm.dbg.value(metadata i8 0, metadata !14, metadata !DIExpression()), !dbg !17
53772847afSOCHyams  ;; DW_ATE_float
54772847afSOCHyams  call void @llvm.dbg.declare(metadata ptr undef, metadata !20, metadata !DIExpression()), !dbg !17
55772847afSOCHyams  call void @llvm.dbg.value(metadata i32 1078523331, metadata !20, metadata !DIExpression()), !dbg !17
56772847afSOCHyams  call void @llvm.dbg.value(metadata i32 0, metadata !20, metadata !DIExpression()), !dbg !17
57772847afSOCHyams  ;; DW_ATE_signed
58772847afSOCHyams  call void @llvm.dbg.value(metadata i128 42 , metadata !22, metadata !DIExpression()), !dbg !17
59772847afSOCHyams  ;; DW_ATE_signed
60772847afSOCHyams  call void @llvm.dbg.value(metadata i32 42, metadata !25, metadata !DIExpression()), !dbg !17
61772847afSOCHyams  ret void, !dbg !17
62772847afSOCHyams}
63772847afSOCHyams
64772847afSOCHyamsdeclare void @llvm.dbg.value(metadata, metadata, metadata)
65772847afSOCHyamsdeclare void @llvm.dbg.declare(metadata, metadata, metadata)
66772847afSOCHyams
67772847afSOCHyams!llvm.dbg.cu = !{!0}
68772847afSOCHyams!llvm.module.flags = !{!2, !3}
69772847afSOCHyams!llvm.ident = !{!9}
70772847afSOCHyams
71772847afSOCHyams!0 = distinct !DICompileUnit(language: DW_LANG_C11, file: !1, producer: "clang version 17.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
72772847afSOCHyams!1 = !DIFile(filename: "test.c", directory: "/")
73772847afSOCHyams!2 = !{i32 7, !"Dwarf Version", i32 5}
74772847afSOCHyams!3 = !{i32 2, !"Debug Info Version", i32 3}
75772847afSOCHyams!9 = !{!"clang version 17.0.0"}
76772847afSOCHyams!10 = distinct !DISubprogram(name: "f", scope: !1, file: !1, line: 2, type: !11, scopeLine: 2, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !13)
77772847afSOCHyams!11 = !DISubroutineType(types: !12)
78772847afSOCHyams!12 = !{null}
79772847afSOCHyams!13 = !{!14}
80772847afSOCHyams!14 = !DILocalVariable(name: "r1", scope: !10, file: !1, line: 3, type: !15)
81772847afSOCHyams!15 = !DIBasicType(name: "complex", size: 128, encoding: DW_ATE_complex_float)
82772847afSOCHyams!17 = !DILocation(line: 0, scope: !10)
83772847afSOCHyams!20 = !DILocalVariable(name: "a", scope: !10, file: !1, line: 3, type: !21)
84772847afSOCHyams!21 = !DIBasicType(tag: DW_TAG_base_type, name: "float", size: 32, align: 32, encoding: DW_ATE_float)
85772847afSOCHyams!22 = !DILocalVariable(name: "MAX", line: 29, scope: !10, file: !1, type: !23)
86772847afSOCHyams!23 = !DIDerivedType(tag: DW_TAG_typedef, name: "ti_int", line: 78, file: !1, scope: !1, baseType: !24)
87772847afSOCHyams!24 = !DIBasicType(tag: DW_TAG_base_type, size: 128, align: 128, encoding: DW_ATE_signed)
88772847afSOCHyams!25 = !DILocalVariable(name: "i", line: 2, scope: !10, file: !1, type: !26)
89772847afSOCHyams!26 = !DIBasicType(tag: DW_TAG_base_type, name: "int", size: 32, align: 32, encoding: DW_ATE_signed)
90