Add support for source and line information to IntelJITEventListener for object emitt...
[oota-llvm.git] / test / JitListener / test-inline.ll
1 ; RUN: llvm-jitlistener %s | FileCheck %s
2
3 ; CHECK: Method load [1]: _Z15test_parametersPfPA2_dR11char_structPPitm, Size = 170
4 ; CHECK:   Line info @ 0: test-inline.cpp, line 33
5 ; CHECK:   Line info @ 35: test-inline.cpp, line 34
6 ; CHECK:   Line info @ 165: test-inline.cpp, line 35
7 ; CHECK: Method load [2]: _Z3foov, Size = 3
8 ; CHECK:   Line info @ 0: test-inline.cpp, line 28
9 ; CHECK:   Line info @ 2: test-inline.cpp, line 29
10 ; CHECK:   Line info @ 3: test-inline.cpp, line 29
11 ; CHECK: Method load [3]: main, Size = 146
12 ; CHECK:   Line info @ 0: test-inline.cpp, line 39
13 ; CHECK:   Line info @ 21: test-inline.cpp, line 41
14 ; CHECK:   Line info @ 39: test-inline.cpp, line 42
15 ; CHECK:   Line info @ 60: test-inline.cpp, line 44
16 ; CHECK:   Line info @ 80: test-inline.cpp, line 48
17 ; CHECK:   Line info @ 90: test-inline.cpp, line 45
18 ; CHECK:   Line info @ 95: test-inline.cpp, line 46
19 ; CHECK:   Line info @ 114: test-inline.cpp, line 48
20 ; CHECK:   Line info @ 141: test-inline.cpp, line 49
21 ; CHECK:   Line info @ 146: test-inline.cpp, line 49
22 ; CHECK: Method unload [1]
23 ; CHECK: Method unload [2]
24 ; CHECK: Method unload [3]
25
26 ; ModuleID = 'test-inline.cpp'
27 target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
28 target triple = "x86_64-unknown-linux-gnu"
29
30 %struct.char_struct = type { i8, [2 x i8] }
31
32 @compound_char = global %struct.char_struct zeroinitializer, align 1
33 @_ZZ4mainE1d = private unnamed_addr constant [2 x [2 x double]] [[2 x double] [double 0.000000e+00, double 1.000000e+00], [2 x double] [double 2.000000e+00, double 3.000000e+00]], align 16
34
35 define double @_Z15test_parametersPfPA2_dR11char_structPPitm(float* %pf, [2 x double]* %ppd, %struct.char_struct* %s, i32** %ppn, i16 zeroext %us, i64 %l) uwtable {
36 entry:
37   %pf.addr = alloca float*, align 8
38   %ppd.addr = alloca [2 x double]*, align 8
39   %s.addr = alloca %struct.char_struct*, align 8
40   %ppn.addr = alloca i32**, align 8
41   %us.addr = alloca i16, align 2
42   %l.addr = alloca i64, align 8
43   %result = alloca double, align 8
44   store float* %pf, float** %pf.addr, align 8
45   call void @llvm.dbg.declare(metadata !{float** %pf.addr}, metadata !46), !dbg !47
46   store [2 x double]* %ppd, [2 x double]** %ppd.addr, align 8
47   call void @llvm.dbg.declare(metadata !{[2 x double]** %ppd.addr}, metadata !48), !dbg !47
48   store %struct.char_struct* %s, %struct.char_struct** %s.addr, align 8
49   call void @llvm.dbg.declare(metadata !{%struct.char_struct** %s.addr}, metadata !49), !dbg !47
50   store i32** %ppn, i32*** %ppn.addr, align 8
51   call void @llvm.dbg.declare(metadata !{i32*** %ppn.addr}, metadata !50), !dbg !47
52   store i16 %us, i16* %us.addr, align 2
53   call void @llvm.dbg.declare(metadata !{i16* %us.addr}, metadata !51), !dbg !47
54   store i64 %l, i64* %l.addr, align 8
55   call void @llvm.dbg.declare(metadata !{i64* %l.addr}, metadata !52), !dbg !47
56   call void @llvm.dbg.declare(metadata !{double* %result}, metadata !53), !dbg !55
57   %0 = load float** %pf.addr, align 8, !dbg !55
58   %arrayidx = getelementptr inbounds float* %0, i64 0, !dbg !55
59   %1 = load float* %arrayidx, align 4, !dbg !55
60   %conv = fpext float %1 to double, !dbg !55
61   %2 = load [2 x double]** %ppd.addr, align 8, !dbg !55
62   %arrayidx1 = getelementptr inbounds [2 x double]* %2, i64 1, !dbg !55
63   %arrayidx2 = getelementptr inbounds [2 x double]* %arrayidx1, i32 0, i64 1, !dbg !55
64   %3 = load double* %arrayidx2, align 8, !dbg !55
65   %mul = fmul double %conv, %3, !dbg !55
66   %4 = load %struct.char_struct** %s.addr, align 8, !dbg !55
67   %c = getelementptr inbounds %struct.char_struct* %4, i32 0, i32 0, !dbg !55
68   %5 = load i8* %c, align 1, !dbg !55
69   %conv3 = sext i8 %5 to i32, !dbg !55
70   %conv4 = sitofp i32 %conv3 to double, !dbg !55
71   %mul5 = fmul double %mul, %conv4, !dbg !55
72   %6 = load i16* %us.addr, align 2, !dbg !55
73   %conv6 = zext i16 %6 to i32, !dbg !55
74   %conv7 = sitofp i32 %conv6 to double, !dbg !55
75   %mul8 = fmul double %mul5, %conv7, !dbg !55
76   %7 = load i64* %l.addr, align 8, !dbg !55
77   %conv9 = uitofp i64 %7 to double, !dbg !55
78   %mul10 = fmul double %mul8, %conv9, !dbg !55
79   %call = call i32 @_Z3foov(), !dbg !55
80   %conv11 = sitofp i32 %call to double, !dbg !55
81   %add = fadd double %mul10, %conv11, !dbg !55
82   store double %add, double* %result, align 8, !dbg !55
83   %8 = load double* %result, align 8, !dbg !56
84   ret double %8, !dbg !56
85 }
86
87 declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
88
89 define linkonce_odr i32 @_Z3foov() nounwind uwtable inlinehint {
90 entry:
91   ret i32 0, !dbg !57
92 }
93
94 define i32 @main(i32 %argc, i8** %argv) uwtable {
95 entry:
96   %retval = alloca i32, align 4
97   %argc.addr = alloca i32, align 4
98   %argv.addr = alloca i8**, align 8
99   %s = alloca %struct.char_struct, align 1
100   %f = alloca float, align 4
101   %d = alloca [2 x [2 x double]], align 16
102   %result = alloca double, align 8
103   store i32 0, i32* %retval
104   store i32 %argc, i32* %argc.addr, align 4
105   call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !59), !dbg !60
106   store i8** %argv, i8*** %argv.addr, align 8
107   call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata !61), !dbg !60
108   call void @llvm.dbg.declare(metadata !{%struct.char_struct* %s}, metadata !62), !dbg !64
109   call void @llvm.dbg.declare(metadata !{float* %f}, metadata !65), !dbg !66
110   store float 0.000000e+00, float* %f, align 4, !dbg !66
111   call void @llvm.dbg.declare(metadata !{[2 x [2 x double]]* %d}, metadata !67), !dbg !70
112   %0 = bitcast [2 x [2 x double]]* %d to i8*, !dbg !70
113   call void @llvm.memcpy.p0i8.p0i8.i64(i8* %0, i8* bitcast ([2 x [2 x double]]* @_ZZ4mainE1d to i8*), i64 32, i32 16, i1 false), !dbg !70
114   %c = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 0, !dbg !71
115   store i8 97, i8* %c, align 1, !dbg !71
116   %c2 = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 1, !dbg !72
117   %arrayidx = getelementptr inbounds [2 x i8]* %c2, i32 0, i64 0, !dbg !72
118   store i8 48, i8* %arrayidx, align 1, !dbg !72
119   %c21 = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 1, !dbg !73
120   %arrayidx2 = getelementptr inbounds [2 x i8]* %c21, i32 0, i64 1, !dbg !73
121   store i8 49, i8* %arrayidx2, align 1, !dbg !73
122   call void @llvm.dbg.declare(metadata !{double* %result}, metadata !74), !dbg !75
123   %arraydecay = getelementptr inbounds [2 x [2 x double]]* %d, i32 0, i32 0, !dbg !75
124   %call = call double @_Z15test_parametersPfPA2_dR11char_structPPitm(float* %f, [2 x double]* %arraydecay, %struct.char_struct* %s, i32** null, i16 zeroext 10, i64 42), !dbg !75
125   store double %call, double* %result, align 8, !dbg !75
126   %1 = load double* %result, align 8, !dbg !76
127   %cmp = fcmp oeq double %1, 0.000000e+00, !dbg !76
128   %cond = select i1 %cmp, i32 0, i32 -1, !dbg !76
129   ret i32 %cond, !dbg !76
130 }
131
132 declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
133
134 !llvm.dbg.cu = !{!0}
135
136 !0 = metadata !{i32 786449, i32 0, i32 4, metadata !"test-inline.cpp", metadata !"/home/akaylor/dev", metadata !"clang version 3.3 (ssh://akaylor@git-amr-1.devtools.intel.com:29418/ssg_llvm-clang2 gitosis@miro.kw.intel.com:clang.git 39450d0469e0d5589ad39fd0b20b5742750619a0) (ssh://akaylor@git-amr-1.devtools.intel.com:29418/ssg_llvm-llvm gitosis@miro.kw.intel.com:llvm.git 376642ed620ecae05b68c7bc81f79aeb2065abe0)", i1 true, i1 false, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !43} ; [ DW_TAG_compile_unit ] [/home/akaylor/dev/test-inline.cpp] [DW_LANG_C_plus_plus]
137 !1 = metadata !{metadata !2}
138 !2 = metadata !{i32 0}
139 !3 = metadata !{metadata !4}
140 !4 = metadata !{metadata !5, metadata !35, metadata !40}
141 !5 = metadata !{i32 786478, i32 0, metadata !6, metadata !"test_parameters", metadata !"test_parameters", metadata !"_Z15test_parametersPfPA2_dR11char_structPPitm", metadata !6, i32 32, metadata !7, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, double (float*, [2 x double]*, %struct.char_struct*, i32**, i16, i64)* @_Z15test_parametersPfPA2_dR11char_structPPitm, null, null, metadata !1, i32 33} ; [ DW_TAG_subprogram ] [line 32] [def] [scope 33] [test_parameters]
142 !6 = metadata !{i32 786473, metadata !"test-inline.cpp", metadata !"/home/akaylor/dev", null} ; [ DW_TAG_file_type ]
143 !7 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !8, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
144 !8 = metadata !{metadata !9, metadata !10, metadata !12, metadata !16, metadata !29, metadata !32, metadata !33}
145 !9 = metadata !{i32 786468, null, metadata !"double", null, i32 0, i64 64, i64 64, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ] [double] [line 0, size 64, align 64, offset 0, enc DW_ATE_float]
146 !10 = metadata !{i32 786447, null, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !11} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from float]
147 !11 = metadata !{i32 786468, null, metadata !"float", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ] [float] [line 0, size 32, align 32, offset 0, enc DW_ATE_float]
148 !12 = metadata !{i32 786447, null, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !13} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from ]
149 !13 = metadata !{i32 786433, null, metadata !"", null, i32 0, i64 128, i64 64, i32 0, i32 0, metadata !9, metadata !14, i32 0, i32 0} ; [ DW_TAG_array_type ] [line 0, size 128, align 64, offset 0] [from double]
150 !14 = metadata !{metadata !15}
151 !15 = metadata !{i32 786465, i64 0, i64 2}        ; [ DW_TAG_subrange_type ] [0, 1]
152 !16 = metadata !{i32 786448, null, null, null, i32 0, i64 0, i64 0, i64 0, i32 0, metadata !17} ; [ DW_TAG_reference_type ] [line 0, size 0, align 0, offset 0] [from char_struct]
153 !17 = metadata !{i32 786451, null, metadata !"char_struct", metadata !6, i32 22, i64 24, i64 8, i32 0, i32 0, null, metadata !18, i32 0, null, null} ; [ DW_TAG_structure_type ] [char_struct] [line 22, size 24, align 8, offset 0] [from ]
154 !18 = metadata !{metadata !19, metadata !21, metadata !23}
155 !19 = metadata !{i32 786445, metadata !17, metadata !"c", metadata !6, i32 23, i64 8, i64 8, i64 0, i32 0, metadata !20} ; [ DW_TAG_member ] [c] [line 23, size 8, align 8, offset 0] [from char]
156 !20 = metadata !{i32 786468, null, metadata !"char", null, i32 0, i64 8, i64 8, i64 0, i32 0, i32 6} ; [ DW_TAG_base_type ] [char] [line 0, size 8, align 8, offset 0, enc DW_ATE_signed_char]
157 !21 = metadata !{i32 786445, metadata !17, metadata !"c2", metadata !6, i32 24, i64 16, i64 8, i64 8, i32 0, metadata !22} ; [ DW_TAG_member ] [c2] [line 24, size 16, align 8, offset 8] [from ]
158 !22 = metadata !{i32 786433, null, metadata !"", null, i32 0, i64 16, i64 8, i32 0, i32 0, metadata !20, metadata !14, i32 0, i32 0} ; [ DW_TAG_array_type ] [line 0, size 16, align 8, offset 0] [from char]
159 !23 = metadata !{i32 786478, i32 0, metadata !17, metadata !"char_struct", metadata !"char_struct", metadata !"", metadata !6, i32 22, metadata !24, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false, null, null, i32 0, metadata !27, i32 22} ; [ DW_TAG_subprogram ] [line 22] [char_struct]
160 !24 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !25, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
161 !25 = metadata !{null, metadata !26}
162 !26 = metadata !{i32 786447, i32 0, metadata !"", i32 0, i32 0, i64 64, i64 64, i64 0, i32 1088, metadata !17} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from char_struct]
163 !27 = metadata !{metadata !28}
164 !28 = metadata !{i32 786468}                      ; [ DW_TAG_base_type ] [line 0, size 0, align 0, offset 0]
165 !29 = metadata !{i32 786447, null, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !30} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from ]
166 !30 = metadata !{i32 786447, null, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !31} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from int]
167 !31 = metadata !{i32 786468, null, metadata !"int", null, i32 0, i64 32, i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ] [int] [line 0, size 32, align 32, offset 0, enc DW_ATE_signed]
168 !32 = metadata !{i32 786468, null, metadata !"unsigned short", null, i32 0, i64 16, i64 16, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ] [unsigned short] [line 0, size 16, align 16, offset 0, enc DW_ATE_unsigned]
169 !33 = metadata !{i32 786470, null, metadata !"", null, i32 0, i64 0, i64 0, i64 0, i32 0, metadata !34} ; [ DW_TAG_const_type ] [line 0, size 0, align 0, offset 0] [from long unsigned int]
170 !34 = metadata !{i32 786468, null, metadata !"long unsigned int", null, i32 0, i64 64, i64 64, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ] [long unsigned int] [line 0, size 64, align 64, offset 0, enc DW_ATE_unsigned]
171 !35 = metadata !{i32 786478, i32 0, metadata !6, metadata !"main", metadata !"main", metadata !"", metadata !6, i32 38, metadata !36, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 (i32, i8**)* @main, null, null, metadata !1, i32 39} ; [ DW_TAG_subprogram ] [line 38] [def] [scope 39] [main]
172 !36 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !37, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
173 !37 = metadata !{metadata !31, metadata !31, metadata !38}
174 !38 = metadata !{i32 786447, null, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !39} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from ]
175 !39 = metadata !{i32 786447, null, metadata !"", null, i32 0, i64 64, i64 64, i64 0, i32 0, metadata !20} ; [ DW_TAG_pointer_type ] [line 0, size 64, align 64, offset 0] [from char]
176 !40 = metadata !{i32 786478, i32 0, metadata !6, metadata !"foo", metadata !"foo", metadata !"_Z3foov", metadata !6, i32 27, metadata !41, i1 false, i1 true, i32 0, i32 0, null, i32 256, i1 false, i32 ()* @_Z3foov, null, null, metadata !1, i32 28} ; [ DW_TAG_subprogram ] [line 27] [def] [scope 28] [foo]
177 !41 = metadata !{i32 786453, i32 0, metadata !"", i32 0, i32 0, i64 0, i64 0, i64 0, i32 0, null, metadata !42, i32 0, i32 0} ; [ DW_TAG_subroutine_type ] [line 0, size 0, align 0, offset 0] [from ]
178 !42 = metadata !{metadata !31}
179 !43 = metadata !{metadata !44}
180 !44 = metadata !{metadata !45}
181 !45 = metadata !{i32 786484, i32 0, null, metadata !"compound_char", metadata !"compound_char", metadata !"", metadata !6, i32 25, metadata !17, i32 0, i32 1, %struct.char_struct* @compound_char} ; [ DW_TAG_variable ] [compound_char] [line 25] [def]
182 !46 = metadata !{i32 786689, metadata !5, metadata !"pf", metadata !6, i32 16777248, metadata !10, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [pf] [line 32]
183 !47 = metadata !{i32 32, i32 0, metadata !5, null}
184 !48 = metadata !{i32 786689, metadata !5, metadata !"ppd", metadata !6, i32 33554464, metadata !12, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [ppd] [line 32]
185 !49 = metadata !{i32 786689, metadata !5, metadata !"s", metadata !6, i32 50331680, metadata !16, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [s] [line 32]
186 !50 = metadata !{i32 786689, metadata !5, metadata !"ppn", metadata !6, i32 67108896, metadata !29, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [ppn] [line 32]
187 !51 = metadata !{i32 786689, metadata !5, metadata !"us", metadata !6, i32 83886112, metadata !32, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [us] [line 32]
188 !52 = metadata !{i32 786689, metadata !5, metadata !"l", metadata !6, i32 100663328, metadata !33, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [l] [line 32]
189 !53 = metadata !{i32 786688, metadata !54, metadata !"result", metadata !6, i32 34, metadata !9, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [result] [line 34]
190 !54 = metadata !{i32 786443, metadata !5, i32 33, i32 0, metadata !6, i32 0} ; [ DW_TAG_lexical_block ] [/home/akaylor/dev/test-inline.cpp]
191 !55 = metadata !{i32 34, i32 0, metadata !54, null}
192 !56 = metadata !{i32 35, i32 0, metadata !54, null}
193 !57 = metadata !{i32 29, i32 0, metadata !58, null}
194 !58 = metadata !{i32 786443, metadata !40, i32 28, i32 0, metadata !6, i32 2} ; [ DW_TAG_lexical_block ] [/home/akaylor/dev/test-inline.cpp]
195 !59 = metadata !{i32 786689, metadata !35, metadata !"argc", metadata !6, i32 16777254, metadata !31, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [argc] [line 38]
196 !60 = metadata !{i32 38, i32 0, metadata !35, null}
197 !61 = metadata !{i32 786689, metadata !35, metadata !"argv", metadata !6, i32 33554470, metadata !38, i32 0, i32 0} ; [ DW_TAG_arg_variable ] [argv] [line 38]
198 !62 = metadata !{i32 786688, metadata !63, metadata !"s", metadata !6, i32 40, metadata !17, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [s] [line 40]
199 !63 = metadata !{i32 786443, metadata !35, i32 39, i32 0, metadata !6, i32 1} ; [ DW_TAG_lexical_block ] [/home/akaylor/dev/test-inline.cpp]
200 !64 = metadata !{i32 40, i32 0, metadata !63, null}
201 !65 = metadata !{i32 786688, metadata !63, metadata !"f", metadata !6, i32 41, metadata !11, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [f] [line 41]
202 !66 = metadata !{i32 41, i32 0, metadata !63, null}
203 !67 = metadata !{i32 786688, metadata !63, metadata !"d", metadata !6, i32 42, metadata !68, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [d] [line 42]
204 !68 = metadata !{i32 786433, null, metadata !"", null, i32 0, i64 256, i64 64, i32 0, i32 0, metadata !9, metadata !69, i32 0, i32 0} ; [ DW_TAG_array_type ] [line 0, size 256, align 64, offset 0] [from double]
205 !69 = metadata !{metadata !15, metadata !15}
206 !70 = metadata !{i32 42, i32 0, metadata !63, null}
207 !71 = metadata !{i32 44, i32 0, metadata !63, null}
208 !72 = metadata !{i32 45, i32 0, metadata !63, null}
209 !73 = metadata !{i32 46, i32 0, metadata !63, null}
210 !74 = metadata !{i32 786688, metadata !63, metadata !"result", metadata !6, i32 48, metadata !9, i32 0, i32 0} ; [ DW_TAG_auto_variable ] [result] [line 48]
211 !75 = metadata !{i32 48, i32 0, metadata !63, null}
212 !76 = metadata !{i32 49, i32 0, metadata !63, null}