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' 27target 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" 28target 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 35define double @_Z15test_parametersPfPA2_dR11char_structPPitm(float* %pf, [2 x double]* %ppd, %struct.char_struct* %s, i32** %ppn, i16 zeroext %us, i64 %l) uwtable { 36entry: 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 87declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone 88 89define linkonce_odr i32 @_Z3foov() nounwind uwtable inlinehint { 90entry: 91 ret i32 0, !dbg !57 92} 93 94define i32 @main(i32 %argc, i8** %argv) uwtable { 95entry: 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 132declare 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, metadata !77, i32 4, 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, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !43, null, metadata !""} ; [ DW_TAG_compile_unit ] [/home/akaylor/dev/test-inline.cpp] [DW_LANG_C_plus_plus] 137!1 = metadata !{i32 0} 138!3 = metadata !{metadata !5, metadata !35, metadata !40} 139!5 = metadata !{i32 786478, metadata !77, metadata !6, metadata !"test_parameters", metadata !"test_parameters", metadata !"_Z15test_parametersPfPA2_dR11char_structPPitm", 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] 140!6 = metadata !{i32 786473, metadata !77} ; [ DW_TAG_file_type ] 141!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 ] 142!8 = metadata !{metadata !9, metadata !10, metadata !12, metadata !16, metadata !29, metadata !32, metadata !33} 143!9 = metadata !{i32 786468, null, null, metadata !"double", 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] 144!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] 145!11 = metadata !{i32 786468, null, null, metadata !"float", 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] 146!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 ] 147!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] 148!14 = metadata !{metadata !15} 149!15 = metadata !{i32 786465, i64 0, i64 2} ; [ DW_TAG_subrange_type ] [0, 1] 150!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] 151!17 = metadata !{i32 786451, metadata !77, null, metadata !"char_struct", 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 ] 152!18 = metadata !{metadata !19, metadata !21, metadata !23} 153!19 = metadata !{i32 786445, metadata !77, metadata !17, metadata !"c", 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] 154!20 = metadata !{i32 786468, null, null, metadata !"char", 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] 155!21 = metadata !{i32 786445, metadata !77, metadata !17, metadata !"c2", 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 ] 156!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] 157!23 = metadata !{i32 786478, metadata !77, metadata !17, metadata !"char_struct", metadata !"char_struct", metadata !"", 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] 158!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 ] 159!25 = metadata !{null, metadata !26} 160!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] 161!27 = metadata !{metadata !28} 162!28 = metadata !{i32 786468} ; [ DW_TAG_base_type ] [line 0, size 0, align 0, offset 0] 163!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 ] 164!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] 165!31 = metadata !{i32 786468, null, null, metadata !"int", 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] 166!32 = metadata !{i32 786468, null, null, metadata !"unsigned short", 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] 167!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] 168!34 = metadata !{i32 786468, null, null, metadata !"long unsigned int", 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] 169!35 = metadata !{i32 786478, metadata !77, metadata !6, metadata !"main", metadata !"main", metadata !"", 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] 170!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 ] 171!37 = metadata !{metadata !31, metadata !31, metadata !38} 172!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 ] 173!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] 174!40 = metadata !{i32 786478, metadata !77, metadata !6, metadata !"foo", metadata !"foo", metadata !"_Z3foov", 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] 175!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 ] 176!42 = metadata !{metadata !31} 177!43 = metadata !{metadata !45} 178!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, null} ; [ DW_TAG_variable ] [compound_char] [line 25] [def] 179!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] 180!47 = metadata !{i32 32, i32 0, metadata !5, null} 181!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] 182!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] 183!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] 184!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] 185!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] 186!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] 187!54 = metadata !{i32 786443, metadata !77, metadata !5, i32 33, i32 0, i32 0} ; [ DW_TAG_lexical_block ] [/home/akaylor/dev/test-inline.cpp] 188!55 = metadata !{i32 34, i32 0, metadata !54, null} 189!56 = metadata !{i32 35, i32 0, metadata !54, null} 190!57 = metadata !{i32 29, i32 0, metadata !58, null} 191!58 = metadata !{i32 786443, metadata !77, metadata !40, i32 28, i32 0, i32 2} ; [ DW_TAG_lexical_block ] [/home/akaylor/dev/test-inline.cpp] 192!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] 193!60 = metadata !{i32 38, i32 0, metadata !35, null} 194!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] 195!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] 196!63 = metadata !{i32 786443, metadata !77, metadata !35, i32 39, i32 0, i32 1} ; [ DW_TAG_lexical_block ] [/home/akaylor/dev/test-inline.cpp] 197!64 = metadata !{i32 40, i32 0, metadata !63, null} 198!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] 199!66 = metadata !{i32 41, i32 0, metadata !63, null} 200!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] 201!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] 202!69 = metadata !{metadata !15, metadata !15} 203!70 = metadata !{i32 42, i32 0, metadata !63, null} 204!71 = metadata !{i32 44, i32 0, metadata !63, null} 205!72 = metadata !{i32 45, i32 0, metadata !63, null} 206!73 = metadata !{i32 46, i32 0, metadata !63, null} 207!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] 208!75 = metadata !{i32 48, i32 0, metadata !63, null} 209!76 = metadata !{i32 49, i32 0, metadata !63, null} 210!77 = metadata !{metadata !"test-inline.cpp", metadata !"/home/akaylor/dev"} 211