[llvm-commits] [llvm] r168459 - in /llvm/trunk: test/CMakeLists.txt test/JitListener/ test/JitListener/lit.local.cfg test/JitListener/test-common-symbols.ll test/JitListener/test-inline.ll test/JitListener/test-parameters.ll test/lit.cfg test/lit.s...

Kaylor, Andrew andrew.kaylor at intel.com
Mon Nov 26 11:35:40 PST 2012


Hi Takumi,

I wanted to exclude llvm-jitlistener from building without inteljitevents in both cases, but I couldn't figure out how to do that with autoconf, so as a compromise I was trying to get it to build cleanly.

Can you tell me how to exclude it conditionally based on the configuration option?

Thanks,
Andy


-----Original Message-----
From: NAKAMURA Takumi [mailto:geek4civic at gmail.com] 
Sent: Thursday, November 22, 2012 6:06 AM
To: Kaylor, Andrew
Cc: llvm-commits; Craig Topper
Subject: Re: [llvm-commits] [llvm] r168459 - in /llvm/trunk: test/CMakeLists.txt test/JitListener/ test/JitListener/lit.local.cfg test/JitListener/test-common-symbols.ll test/JitListener/test-inline.ll test/JitListener/test-parameters.ll test/lit.cfg test/lit.s...

Andy,

Could you keep consistency between autoconf and cmake on llvm-jitlistener?
With autoconf, it is built without inteljitevents.
With cmake, it is not built.

Craig, I pruned two members in r168495.
Andy, please resurrect them when you are ready.

...Takumi

2012/11/22 Craig Topper <craig.topper at gmail.com>:
> I'm seeing this error after this commit.
>
> In file included from llvm/tools/llvm-jitlistener/llvm-jitlistener.cpp:18:
> llvm/tools/llvm-jitlistener/../../lib/ExecutionEngine/IntelJITEvents/IntelJITEventsWrapper.h:38:21:
> error: private field 'FinalizeThreadFunc' is not used
> [-Werror,-Wunused-private-field]
>   FinalizeThreadPtr FinalizeThreadFunc;
>                     ^
> llvm/tools/llvm-jitlistener/../../lib/ExecutionEngine/IntelJITEvents/IntelJITEventsWrapper.h:39:22:
> error: private field 'FinalizeProcessFunc' is not used
> [-Werror,-Wunused-private-field]
>   FinalizeProcessPtr FinalizeProcessFunc;
>                      ^
> 2 errors generated.
>
>
> On Wed, Nov 21, 2012 at 12:38 PM, Andrew Kaylor <andrew.kaylor at intel.com>
> wrote:
>>
>> Author: akaylor
>> Date: Wed Nov 21 14:38:26 2012
>> New Revision: 168459
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=168459&view=rev
>> Log:
>> Adding tests for the Intel JIT event listener's MCJIT support.
>>
>> Added:
>>     llvm/trunk/test/JitListener/   (with props)
>>     llvm/trunk/test/JitListener/lit.local.cfg
>>     llvm/trunk/test/JitListener/test-common-symbols.ll
>>     llvm/trunk/test/JitListener/test-inline.ll
>>     llvm/trunk/test/JitListener/test-parameters.ll
>>     llvm/trunk/tools/llvm-jitlistener/   (with props)
>>     llvm/trunk/tools/llvm-jitlistener/CMakeLists.txt
>>     llvm/trunk/tools/llvm-jitlistener/LLVMBuild.txt
>>     llvm/trunk/tools/llvm-jitlistener/Makefile
>>     llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp
>> Modified:
>>     llvm/trunk/test/CMakeLists.txt
>>     llvm/trunk/test/lit.cfg
>>     llvm/trunk/test/lit.site.cfg.in
>>     llvm/trunk/tools/CMakeLists.txt
>>     llvm/trunk/tools/LLVMBuild.txt
>>     llvm/trunk/tools/Makefile
>>
>> Modified: llvm/trunk/test/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CMakeLists.txt?rev=168459&r1=168458&r2=168459&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/CMakeLists.txt (original)
>> +++ llvm/trunk/test/CMakeLists.txt Wed Nov 21 14:38:26 2012
>> @@ -12,11 +12,8 @@
>>    set(EXCLUDE_FROM_ALL ON)
>>  endif()
>>
>> -add_lit_testsuite(check-llvm "Running the LLVM regression tests"
>> -  ${CMAKE_CURRENT_BINARY_DIR}
>> -  PARAMS llvm_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
>> -
>> llvm_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
>> -  DEPENDS UnitTests
>> +# Set the depends list as a variable so that it can grow conditionally.
>> +set(LLVM_TEST_DEPENDS UnitTests
>>            BugpointPasses LLVMHello
>>            llc lli llvm-ar llvm-as
>>            llvm-bcanalyzer llvm-diff
>> @@ -30,7 +27,18 @@
>>            macho-dump opt
>>            profile_rt-shared
>>            FileCheck count not
>> -          yaml2obj
>> +          yaml2obj)
>> +
>> +# If Intel JIT events are supported, depend on a tool that tests the
>> listener.
>> +if( LLVM_USE_INTEL_JITEVENTS )
>> +  set(LLVM_TEST_DEPENDS ${LLVM_TEST_DEPENDS} llvm-jitlistener)
>> +endif( LLVM_USE_INTEL_JITEVENTS )
>> +
>> +add_lit_testsuite(check-llvm "Running the LLVM regression tests"
>> +  ${CMAKE_CURRENT_BINARY_DIR}
>> +  PARAMS llvm_site_config=${CMAKE_CURRENT_BINARY_DIR}/lit.site.cfg
>> +
>> llvm_unit_site_config=${CMAKE_CURRENT_BINARY_DIR}/Unit/lit.site.cfg
>> +  DEPENDS ${LLVM_TEST_DEPENDS}
>>    )
>>  set_target_properties(check-llvm PROPERTIES FOLDER "Tests")
>>
>>
>> Propchange: llvm/trunk/test/JitListener/
>>
>> ------------------------------------------------------------------------------
>>     bugtraq:number = true
>>
>> Added: llvm/trunk/test/JitListener/lit.local.cfg
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/JitListener/lit.local.cfg?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/JitListener/lit.local.cfg (added)
>> +++ llvm/trunk/test/JitListener/lit.local.cfg Wed Nov 21 14:38:26 2012
>> @@ -0,0 +1,11 @@
>> +config.suffixes = ['.ll']
>> +
>> +def getRoot(config):
>> +    if not config.parent:
>> +        return config
>> +    return getRoot(config.parent)
>> +
>> +root = getRoot(config)
>> +if not root.llvm_use_intel_jitevents == "ON":
>> +    config.unsupported = True
>> +
>>
>> Added: llvm/trunk/test/JitListener/test-common-symbols.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/JitListener/test-common-symbols.ll?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/JitListener/test-common-symbols.ll (added)
>> +++ llvm/trunk/test/JitListener/test-common-symbols.ll Wed Nov 21 14:38:26
>> 2012
>> @@ -0,0 +1,113 @@
>> +; RUN: llvm-jitlistener %s | FileCheck %s
>> +
>> +; CHECK: Method load [1]: main, Size = 164
>> +; CHECK: Method unload [1]
>> +
>> +; ModuleID = '<stdin>'
>> +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"
>> +target triple = "x86_64-unknown-linux-gnu"
>> +
>> + at zero_int = common global i32 0, align 4
>> + at zero_arr = common global [10 x i32] zeroinitializer, align 16
>> + at zero_double = common global double 0.000000e+00, align 8
>> +
>> +define i32 @main() nounwind uwtable {
>> +entry:
>> +  %retval = alloca i32, align 4
>> +  %i = alloca i32, align 4
>> +  store i32 0, i32* %retval
>> +  %0 = load i32* @zero_int, align 4, !dbg !21
>> +  %add = add nsw i32 %0, 5, !dbg !21
>> +  %idxprom = sext i32 %add to i64, !dbg !21
>> +  %arrayidx = getelementptr inbounds [10 x i32]* @zero_arr, i32 0, i64
>> %idxprom, !dbg !21
>> +  store i32 40, i32* %arrayidx, align 4, !dbg !21
>> +  %1 = load double* @zero_double, align 8, !dbg !23
>> +  %cmp = fcmp olt double %1, 1.000000e+00, !dbg !23
>> +  br i1 %cmp, label %if.then, label %if.end, !dbg !23
>> +
>> +if.then:                                          ; preds = %entry
>> +  %2 = load i32* @zero_int, align 4, !dbg !24
>> +  %add1 = add nsw i32 %2, 2, !dbg !24
>> +  %idxprom2 = sext i32 %add1 to i64, !dbg !24
>> +  %arrayidx3 = getelementptr inbounds [10 x i32]* @zero_arr, i32 0, i64
>> %idxprom2, !dbg !24
>> +  store i32 70, i32* %arrayidx3, align 4, !dbg !24
>> +  br label %if.end, !dbg !24
>> +
>> +if.end:                                           ; preds = %if.then,
>> %entry
>> +  call void @llvm.dbg.declare(metadata !{i32* %i}, metadata !25), !dbg
>> !27
>> +  store i32 1, i32* %i, align 4, !dbg !28
>> +  br label %for.cond, !dbg !28
>> +
>> +for.cond:                                         ; preds = %for.inc,
>> %if.end
>> +  %3 = load i32* %i, align 4, !dbg !28
>> +  %cmp4 = icmp slt i32 %3, 10, !dbg !28
>> +  br i1 %cmp4, label %for.body, label %for.end, !dbg !28
>> +
>> +for.body:                                         ; preds = %for.cond
>> +  %4 = load i32* %i, align 4, !dbg !29
>> +  %sub = sub nsw i32 %4, 1, !dbg !29
>> +  %idxprom5 = sext i32 %sub to i64, !dbg !29
>> +  %arrayidx6 = getelementptr inbounds [10 x i32]* @zero_arr, i32 0, i64
>> %idxprom5, !dbg !29
>> +  %5 = load i32* %arrayidx6, align 4, !dbg !29
>> +  %6 = load i32* %i, align 4, !dbg !29
>> +  %idxprom7 = sext i32 %6 to i64, !dbg !29
>> +  %arrayidx8 = getelementptr inbounds [10 x i32]* @zero_arr, i32 0, i64
>> %idxprom7, !dbg !29
>> +  %7 = load i32* %arrayidx8, align 4, !dbg !29
>> +  %add9 = add nsw i32 %5, %7, !dbg !29
>> +  %8 = load i32* %i, align 4, !dbg !29
>> +  %idxprom10 = sext i32 %8 to i64, !dbg !29
>> +  %arrayidx11 = getelementptr inbounds [10 x i32]* @zero_arr, i32 0, i64
>> %idxprom10, !dbg !29
>> +  store i32 %add9, i32* %arrayidx11, align 4, !dbg !29
>> +  br label %for.inc, !dbg !31
>> +
>> +for.inc:                                          ; preds = %for.body
>> +  %9 = load i32* %i, align 4, !dbg !32
>> +  %inc = add nsw i32 %9, 1, !dbg !32
>> +  store i32 %inc, i32* %i, align 4, !dbg !32
>> +  br label %for.cond, !dbg !32
>> +
>> +for.end:                                          ; preds = %for.cond
>> +  %10 = load i32* getelementptr inbounds ([10 x i32]* @zero_arr, i32 0,
>> i64 9), align 4, !dbg !33
>> +  %cmp12 = icmp eq i32 %10, 110, !dbg !33
>> +  %cond = select i1 %cmp12, i32 0, i32 -1, !dbg !33
>> +  ret i32 %cond, !dbg !33
>> +}
>> +
>> +declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
>> +
>> +!llvm.dbg.cu = !{!0}
>> +
>> +!0 = metadata !{i32 720913, i32 0, i32 12, metadata
>> !"test-common-symbols.c", metadata !"/store/store/llvm/build", metadata
>> !"clang version 3.1 ()", i1 true, i1 false, metadata !"", i32 0, metadata
>> !1, metadata !1, metadata !3, metadata !12} ; [ DW_TAG_compile_unit ]
>> +!1 = metadata !{metadata !2}
>> +!2 = metadata !{i32 0}
>> +!3 = metadata !{metadata !4}
>> +!4 = metadata !{metadata !5}
>> +!5 = metadata !{i32 720942, i32 0, metadata !6, metadata !"main",
>> metadata !"main", metadata !"", metadata !6, i32 6, metadata !7, i1 false,
>> i1 true, i32 0, i32 0, null, i32 0, i1 false, i32 ()* @main, null, null,
>> metadata !10} ; [ DW_TAG_subprogram ]
>> +!6 = metadata !{i32 720937, metadata !"test-common-symbols.c", metadata
>> !"/store/store/llvm/build", null} ; [ DW_TAG_file_type ]
>> +!7 = metadata !{i32 720917, 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
>> ]
>> +!8 = metadata !{metadata !9}
>> +!9 = metadata !{i32 720932, null, metadata !"int", null, i32 0, i64 32,
>> i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
>> +!10 = metadata !{metadata !11}
>> +!11 = metadata !{i32 720932}                      ; [ DW_TAG_base_type ]
>> +!12 = metadata !{metadata !13}
>> +!13 = metadata !{metadata !14, metadata !15, metadata !17}
>> +!14 = metadata !{i32 720948, i32 0, null, metadata !"zero_int", metadata
>> !"zero_int", metadata !"", metadata !6, i32 1, metadata !9, i32 0, i32 1,
>> i32* @zero_int} ; [ DW_TAG_variable ]
>> +!15 = metadata !{i32 720948, i32 0, null, metadata !"zero_double",
>> metadata !"zero_double", metadata !"", metadata !6, i32 2, metadata !16, i32
>> 0, i32 1, double* @zero_double} ; [ DW_TAG_variable ]
>> +!16 = metadata !{i32 720932, null, metadata !"double", null, i32 0, i64
>> 64, i64 64, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ]
>> +!17 = metadata !{i32 720948, i32 0, null, metadata !"zero_arr", metadata
>> !"zero_arr", metadata !"", metadata !6, i32 3, metadata !18, i32 0, i32 1,
>> [10 x i32]* @zero_arr} ; [ DW_TAG_variable ]
>> +!18 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 320,
>> i64 32, i32 0, i32 0, metadata !9, metadata !19, i32 0, i32 0} ; [
>> DW_TAG_array_type ]
>> +!19 = metadata !{metadata !20}
>> +!20 = metadata !{i32 720929, i64 0, i64 9}        ; [
>> DW_TAG_subrange_type ]
>> +!21 = metadata !{i32 7, i32 5, metadata !22, null}
>> +!22 = metadata !{i32 720907, metadata !5, i32 6, i32 1, metadata !6, i32
>> 0} ; [ DW_TAG_lexical_block ]
>> +!23 = metadata !{i32 9, i32 5, metadata !22, null}
>> +!24 = metadata !{i32 10, i32 9, metadata !22, null}
>> +!25 = metadata !{i32 721152, metadata !26, metadata !"i", metadata !6,
>> i32 12, metadata !9, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!26 = metadata !{i32 720907, metadata !22, i32 12, i32 5, metadata !6,
>> i32 1} ; [ DW_TAG_lexical_block ]
>> +!27 = metadata !{i32 12, i32 14, metadata !26, null}
>> +!28 = metadata !{i32 12, i32 19, metadata !26, null}
>> +!29 = metadata !{i32 13, i32 9, metadata !30, null}
>> +!30 = metadata !{i32 720907, metadata !26, i32 12, i32 34, metadata !6,
>> i32 2} ; [ DW_TAG_lexical_block ]
>> +!31 = metadata !{i32 14, i32 5, metadata !30, null}
>> +!32 = metadata !{i32 12, i32 29, metadata !26, null}
>> +!33 = metadata !{i32 15, i32 5, metadata !22, null}
>>
>> Added: llvm/trunk/test/JitListener/test-inline.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/JitListener/test-inline.ll?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/JitListener/test-inline.ll (added)
>> +++ llvm/trunk/test/JitListener/test-inline.ll Wed Nov 21 14:38:26 2012
>> @@ -0,0 +1,219 @@
>> +; RUN: llvm-jitlistener %s | FileCheck %s
>> +
>> +; CHECK: Method load [1]: _Z15test_parametersPfPA2_dR11char_structPPitm,
>> Size = 165
>> +; CHECK: Method load [2]: _Z3food, Size = 39
>> +; CHECK: Method load [3]: main, Size = 146
>> +; CHECK: Method unload [1]
>> +; CHECK: Method unload [2]
>> +; CHECK: Method unload [3]
>> +
>> +; ModuleID = 'test-inline.bc'
>> +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"
>> +target triple = "x86_64-unknown-linux-gnu"
>> +
>> +%struct.char_struct = type { i8, [2 x i8] }
>> +
>> + at compound_char = global %struct.char_struct zeroinitializer, align 1
>> + at _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
>> +
>> +define double @_Z15test_parametersPfPA2_dR11char_structPPitm(float* %pf,
>> [2 x double]* %ppd, %struct.char_struct* %s, i32** %ppn, i16 zeroext %us,
>> i64 %l) uwtable {
>> +entry:
>> +  %pf.addr = alloca float*, align 8
>> +  %ppd.addr = alloca [2 x double]*, align 8
>> +  %s.addr = alloca %struct.char_struct*, align 8
>> +  %ppn.addr = alloca i32**, align 8
>> +  %us.addr = alloca i16, align 2
>> +  %l.addr = alloca i64, align 8
>> +  %result = alloca double, align 8
>> +  %result2 = alloca i32, align 4
>> +  store float* %pf, float** %pf.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{float** %pf.addr}, metadata
>> !32), !dbg !35
>> +  store [2 x double]* %ppd, [2 x double]** %ppd.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{[2 x double]** %ppd.addr},
>> metadata !36), !dbg !39
>> +  store %struct.char_struct* %s, %struct.char_struct** %s.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{%struct.char_struct** %s.addr},
>> metadata !40), !dbg !42
>> +  store i32** %ppn, i32*** %ppn.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{i32*** %ppn.addr}, metadata
>> !43), !dbg !46
>> +  store i16 %us, i16* %us.addr, align 2
>> +  call void @llvm.dbg.declare(metadata !{i16* %us.addr}, metadata !47),
>> !dbg !49
>> +  store i64 %l, i64* %l.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{i64* %l.addr}, metadata !50),
>> !dbg !53
>> +  call void @llvm.dbg.declare(metadata !{double* %result}, metadata !54),
>> !dbg !56
>> +  %0 = load float** %pf.addr, align 8, !dbg !57
>> +  %arrayidx = getelementptr inbounds float* %0, i64 0, !dbg !57
>> +  %1 = load float* %arrayidx, !dbg !57
>> +  %conv = fpext float %1 to double, !dbg !57
>> +  %2 = load [2 x double]** %ppd.addr, align 8, !dbg !57
>> +  %arrayidx1 = getelementptr inbounds [2 x double]* %2, i64 1, !dbg !57
>> +  %arrayidx2 = getelementptr inbounds [2 x double]* %arrayidx1, i32 0,
>> i64 1, !dbg !57
>> +  %3 = load double* %arrayidx2, !dbg !57
>> +  %mul = fmul double %conv, %3, !dbg !57
>> +  %4 = load %struct.char_struct** %s.addr, !dbg !57
>> +  %c = getelementptr inbounds %struct.char_struct* %4, i32 0, i32 0, !dbg
>> !57
>> +  %5 = load i8* %c, align 1, !dbg !57
>> +  %conv3 = sext i8 %5 to i32, !dbg !57
>> +  %conv4 = sitofp i32 %conv3 to double, !dbg !57
>> +  %mul5 = fmul double %mul, %conv4, !dbg !57
>> +  %6 = load i16* %us.addr, align 2, !dbg !57
>> +  %conv6 = zext i16 %6 to i32, !dbg !57
>> +  %conv7 = sitofp i32 %conv6 to double, !dbg !57
>> +  %mul8 = fmul double %mul5, %conv7, !dbg !57
>> +  %7 = load i64* %l.addr, align 8, !dbg !57
>> +  %conv9 = uitofp i64 %7 to double, !dbg !57
>> +  %mul10 = fmul double %mul8, %conv9, !dbg !57
>> +  store double %mul10, double* %result, align 8, !dbg !57
>> +  call void @llvm.dbg.declare(metadata !{i32* %result2}, metadata !58),
>> !dbg !59
>> +  %8 = load double* %result, align 8, !dbg !60
>> +  %call = call i32 @_Z3food(double %8), !dbg !60
>> +  store i32 %call, i32* %result2, align 4, !dbg !60
>> +  %9 = load i32* %result2, align 4, !dbg !61
>> +  %conv11 = sitofp i32 %9 to double, !dbg !61
>> +  ret double %conv11, !dbg !61
>> +}
>> +
>> +declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
>> +
>> +define linkonce_odr i32 @_Z3food(double %input) nounwind uwtable
>> inlinehint {
>> +entry:
>> +  %input.addr = alloca double, align 8
>> +  store double %input, double* %input.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{double* %input.addr}, metadata
>> !62), !dbg !63
>> +  %0 = load double* %input.addr, align 8, !dbg !64
>> +  %div = fdiv double %0, 3.000000e+00, !dbg !64
>> +  %add = fadd double %div, 1.000000e+00, !dbg !64
>> +  %conv = fptosi double %add to i32, !dbg !64
>> +  ret i32 %conv, !dbg !64
>> +}
>> +
>> +define i32 @main(i32 %argc, i8** %argv) uwtable {
>> +entry:
>> +  %retval = alloca i32, align 4
>> +  %argc.addr = alloca i32, align 4
>> +  %argv.addr = alloca i8**, align 8
>> +  %s = alloca %struct.char_struct, align 1
>> +  %f = alloca float, align 4
>> +  %d = alloca [2 x [2 x double]], align 16
>> +  %result = alloca double, align 8
>> +  store i32 0, i32* %retval
>> +  store i32 %argc, i32* %argc.addr, align 4
>> +  call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !66),
>> !dbg !67
>> +  store i8** %argv, i8*** %argv.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata
>> !68), !dbg !71
>> +  call void @llvm.dbg.declare(metadata !{%struct.char_struct* %s},
>> metadata !72), !dbg !74
>> +  call void @llvm.dbg.declare(metadata !{float* %f}, metadata !75), !dbg
>> !76
>> +  store float 0.000000e+00, float* %f, align 4, !dbg !77
>> +  call void @llvm.dbg.declare(metadata !{[2 x [2 x double]]* %d},
>> metadata !78), !dbg !81
>> +  %0 = bitcast [2 x [2 x double]]* %d to i8*, !dbg !82
>> +  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 !82
>> +  %c = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 0, !dbg
>> !83
>> +  store i8 97, i8* %c, align 1, !dbg !83
>> +  %c2 = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 1,
>> !dbg !84
>> +  %arrayidx = getelementptr inbounds [2 x i8]* %c2, i32 0, i64 0, !dbg
>> !84
>> +  store i8 48, i8* %arrayidx, align 1, !dbg !84
>> +  %c21 = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 1,
>> !dbg !85
>> +  %arrayidx2 = getelementptr inbounds [2 x i8]* %c21, i32 0, i64 1, !dbg
>> !85
>> +  store i8 49, i8* %arrayidx2, align 1, !dbg !85
>> +  call void @llvm.dbg.declare(metadata !{double* %result}, metadata !86),
>> !dbg !87
>> +  %arraydecay = getelementptr inbounds [2 x [2 x double]]* %d, i32 0, i32
>> 0, !dbg !88
>> +  %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 !88
>> +  store double %call, double* %result, align 8, !dbg !88
>> +  %1 = load double* %result, align 8, !dbg !89
>> +  %cmp = fcmp oeq double %1, 0.000000e+00, !dbg !89
>> +  %cond = select i1 %cmp, i32 0, i32 -1, !dbg !89
>> +  ret i32 %cond, !dbg !89
>> +}
>> +
>> +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture,
>> i64, i32, i1) nounwind
>> +
>> +!llvm.dbg.cu = !{!0}
>> +
>> +!0 = metadata !{i32 720913, i32 0, i32 4, metadata !"test-inline.cpp",
>> metadata !"/home/athirumurthi/dev/opencl-mc/build/RH64/Debug/backend/llvm",
>> metadata !"clang version 3.0 (branches/release_30 36797)", i1 true, i1
>> false, metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata
>> !17} ; [ DW_TAG_compile_unit ]
>> +!1 = metadata !{metadata !2}
>> +!2 = metadata !{i32 0}
>> +!3 = metadata !{metadata !4}
>> +!4 = metadata !{metadata !5, metadata !12, metadata !16}
>> +!5 = metadata !{i32 720942, i32 0, metadata !6, metadata
>> !"test_parameters", metadata !"test_parameters", metadata
>> !"_Z15test_parametersPfPA2_dR11char_structPPitm", metadata !6, i32 33,
>> metadata !7, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false,
>> double (float*, [2 x double]*, %struct.char_struct*, i32**, i16, i64)*
>> @_Z15test_parametersPfPA2_dR11char_structPPitm, null, null, metadata !10} ;
>> [ DW_TAG_subprogram ]
>> +!6 = metadata !{i32 720937, metadata !"test-inline.cpp", metadata
>> !"/home/athirumurthi/dev/opencl-mc/build/RH64/Debug/backend/llvm", null} ; [
>> DW_TAG_file_type ]
>> +!7 = metadata !{i32 720917, i32 0, metadata !"", i32 0, i32 0, i64 0, i64
>> 0, i32 0, i32 0, i32 0, metadata !8, i32 0, i32 0} ; [
>> DW_TAG_subroutine_type ]
>> +!8 = metadata !{metadata !9}
>> +!9 = metadata !{i32 720932, null, metadata !"double", null, i32 0, i64
>> 64, i64 64, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ]
>> +!10 = metadata !{metadata !11}
>> +!11 = metadata !{i32 720932}                      ; [ DW_TAG_base_type ]
>> +!12 = metadata !{i32 720942, i32 0, metadata !6, metadata !"main",
>> metadata !"main", metadata !"", metadata !6, i32 40, metadata !13, i1 false,
>> i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, i32 (i32, i8**)* @main,
>> null, null, metadata !10} ; [ DW_TAG_subprogram ]
>> +!13 = metadata !{i32 720917, i32 0, metadata !"", i32 0, i32 0, i64 0,
>> i64 0, i32 0, i32 0, i32 0, metadata !14, i32 0, i32 0} ; [
>> DW_TAG_subroutine_type ]
>> +!14 = metadata !{metadata !15}
>> +!15 = metadata !{i32 720932, null, metadata !"int", null, i32 0, i64 32,
>> i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
>> +!16 = metadata !{i32 720942, i32 0, metadata !6, metadata !"foo",
>> metadata !"foo", metadata !"_Z3food", metadata !6, i32 28, metadata !13, i1
>> false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, i32 (double)*
>> @_Z3food, null, null, metadata !10} ; [ DW_TAG_subprogram ]
>> +!17 = metadata !{metadata !18}
>> +!18 = metadata !{metadata !19}
>> +!19 = metadata !{i32 720948, i32 0, null, metadata !"compound_char",
>> metadata !"compound_char", metadata !"", metadata !6, i32 25, metadata !20,
>> i32 0, i32 1, %struct.char_struct* @compound_char} ; [ DW_TAG_variable ]
>> +!20 = metadata !{i32 720898, null, metadata !"char_struct", metadata !6,
>> i32 22, i64 24, i64 8, i32 0, i32 0, null, metadata !21, i32 0, null, null}
>> ; [ DW_TAG_class_type ]
>> +!21 = metadata !{metadata !22, metadata !24, metadata !28}
>> +!22 = metadata !{i32 720909, metadata !20, metadata !"c", metadata !6,
>> i32 23, i64 8, i64 8, i64 0, i32 0, metadata !23} ; [ DW_TAG_member ]
>> +!23 = metadata !{i32 720932, null, metadata !"char", null, i32 0, i64 8,
>> i64 8, i64 0, i32 0, i32 6} ; [ DW_TAG_base_type ]
>> +!24 = metadata !{i32 720909, metadata !20, metadata !"c2", metadata !6,
>> i32 24, i64 16, i64 8, i64 8, i32 0, metadata !25} ; [ DW_TAG_member ]
>> +!25 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 16, i64
>> 8, i32 0, i32 0, metadata !23, metadata !26, i32 0, i32 0} ; [
>> DW_TAG_array_type ]
>> +!26 = metadata !{metadata !27}
>> +!27 = metadata !{i32 720929, i64 0, i64 1}        ; [
>> DW_TAG_subrange_type ]
>> +!28 = metadata !{i32 720942, i32 0, metadata !20, metadata
>> !"char_struct", metadata !"char_struct", metadata !"", metadata !6, i32 22,
>> metadata !29, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false,
>> null, null, i32 0, metadata !10} ; [ DW_TAG_subprogram ]
>> +!29 = metadata !{i32 720917, i32 0, metadata !"", i32 0, i32 0, i64 0,
>> i64 0, i32 0, i32 0, i32 0, metadata !30, i32 0, i32 0} ; [
>> DW_TAG_subroutine_type ]
>> +!30 = metadata !{null, metadata !31}
>> +!31 = metadata !{i32 720911, i32 0, metadata !"", i32 0, i32 0, i64 64,
>> i64 64, i64 0, i32 64, metadata !20} ; [ DW_TAG_pointer_type ]
>> +!32 = metadata !{i32 721153, metadata !5, metadata !"pf", metadata !6,
>> i32 16777248, metadata !33, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!33 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !34} ; [ DW_TAG_pointer_type ]
>> +!34 = metadata !{i32 720932, null, metadata !"float", null, i32 0, i64
>> 32, i64 32, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ]
>> +!35 = metadata !{i32 32, i32 31, metadata !5, null}
>> +!36 = metadata !{i32 721153, metadata !5, metadata !"ppd", metadata !6,
>> i32 33554464, metadata !37, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!37 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !38} ; [ DW_TAG_pointer_type ]
>> +!38 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 128,
>> i64 64, i32 0, i32 0, metadata !9, metadata !26, i32 0, i32 0} ; [
>> DW_TAG_array_type ]
>> +!39 = metadata !{i32 32, i32 42, metadata !5, null}
>> +!40 = metadata !{i32 721153, metadata !5, metadata !"s", metadata !6, i32
>> 50331680, metadata !41, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!41 = metadata !{i32 720912, null, null, null, i32 0, i64 0, i64 0, i64
>> 0, i32 0, metadata !20} ; [ DW_TAG_reference_type ]
>> +!42 = metadata !{i32 32, i32 72, metadata !5, null}
>> +!43 = metadata !{i32 721153, metadata !5, metadata !"ppn", metadata !6,
>> i32 67108896, metadata !44, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!44 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !45} ; [ DW_TAG_pointer_type ]
>> +!45 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !15} ; [ DW_TAG_pointer_type ]
>> +!46 = metadata !{i32 32, i32 81, metadata !5, null}
>> +!47 = metadata !{i32 721153, metadata !5, metadata !"us", metadata !6,
>> i32 83886112, metadata !48, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!48 = metadata !{i32 720932, null, metadata !"unsigned short", null, i32
>> 0, i64 16, i64 16, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ]
>> +!49 = metadata !{i32 32, i32 105, metadata !5, null}
>> +!50 = metadata !{i32 721153, metadata !5, metadata !"l", metadata !6, i32
>> 100663328, metadata !51, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!51 = metadata !{i32 720934, null, metadata !"", null, i32 0, i64 0, i64
>> 0, i64 0, i32 0, metadata !52} ; [ DW_TAG_const_type ]
>> +!52 = metadata !{i32 720932, null, metadata !"long unsigned int", null,
>> i32 0, i64 64, i64 64, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ]
>> +!53 = metadata !{i32 32, i32 135, metadata !5, null}
>> +!54 = metadata !{i32 721152, metadata !55, metadata !"result", metadata
>> !6, i32 34, metadata !9, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!55 = metadata !{i32 720907, metadata !5, i32 33, i32 1, metadata !6, i32
>> 0} ; [ DW_TAG_lexical_block ]
>> +!56 = metadata !{i32 34, i32 10, metadata !55, null}
>> +!57 = metadata !{i32 34, i32 51, metadata !55, null}
>> +!58 = metadata !{i32 721152, metadata !55, metadata !"result2", metadata
>> !6, i32 35, metadata !15, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!59 = metadata !{i32 35, i32 7, metadata !55, null}
>> +!60 = metadata !{i32 35, i32 17, metadata !55, null}
>> +!61 = metadata !{i32 36, i32 3, metadata !55, null}
>> +!62 = metadata !{i32 721153, metadata !16, metadata !"input", metadata
>> !6, i32 16777243, metadata !9, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!63 = metadata !{i32 27, i32 23, metadata !16, null}
>> +!64 = metadata !{i32 29, i32 3, metadata !65, null}
>> +!65 = metadata !{i32 720907, metadata !16, i32 28, i32 1, metadata !6,
>> i32 2} ; [ DW_TAG_lexical_block ]
>> +!66 = metadata !{i32 721153, metadata !12, metadata !"argc", metadata !6,
>> i32 16777255, metadata !15, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!67 = metadata !{i32 39, i32 14, metadata !12, null}
>> +!68 = metadata !{i32 721153, metadata !12, metadata !"argv", metadata !6,
>> i32 33554471, metadata !69, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!69 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !70} ; [ DW_TAG_pointer_type ]
>> +!70 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !23} ; [ DW_TAG_pointer_type ]
>> +!71 = metadata !{i32 39, i32 26, metadata !12, null}
>> +!72 = metadata !{i32 721152, metadata !73, metadata !"s", metadata !6,
>> i32 41, metadata !20, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!73 = metadata !{i32 720907, metadata !12, i32 40, i32 1, metadata !6,
>> i32 1} ; [ DW_TAG_lexical_block ]
>> +!74 = metadata !{i32 41, i32 22, metadata !73, null}
>> +!75 = metadata !{i32 721152, metadata !73, metadata !"f", metadata !6,
>> i32 42, metadata !34, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!76 = metadata !{i32 42, i32 9, metadata !73, null}
>> +!77 = metadata !{i32 42, i32 16, metadata !73, null}
>> +!78 = metadata !{i32 721152, metadata !73, metadata !"d", metadata !6,
>> i32 43, metadata !79, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!79 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 256,
>> i64 64, i32 0, i32 0, metadata !9, metadata !80, i32 0, i32 0} ; [
>> DW_TAG_array_type ]
>> +!80 = metadata !{metadata !27, metadata !27}
>> +!81 = metadata !{i32 43, i32 10, metadata !73, null}
>> +!82 = metadata !{i32 43, i32 38, metadata !73, null}
>> +!83 = metadata !{i32 45, i32 3, metadata !73, null}
>> +!84 = metadata !{i32 46, i32 3, metadata !73, null}
>> +!85 = metadata !{i32 47, i32 3, metadata !73, null}
>> +!86 = metadata !{i32 721152, metadata !73, metadata !"result", metadata
>> !6, i32 49, metadata !9, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!87 = metadata !{i32 49, i32 10, metadata !73, null}
>> +!88 = metadata !{i32 49, i32 19, metadata !73, null}
>> +!89 = metadata !{i32 50, i32 3, metadata !73, null}
>>
>> Added: llvm/trunk/test/JitListener/test-parameters.ll
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/JitListener/test-parameters.ll?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/test/JitListener/test-parameters.ll (added)
>> +++ llvm/trunk/test/JitListener/test-parameters.ll Wed Nov 21 14:38:26
>> 2012
>> @@ -0,0 +1,205 @@
>> +; RUN: llvm-jitlistener %s | FileCheck %s
>> +
>> +; CHECK: Method load [1]: _Z15test_parametersPfPA2_dR11char_structPPitm,
>> Size = 170
>> +; CHECK: Method load [2]: _Z3foov, Size = 3
>> +; CHECK: Method load [3]: main, Size = 146
>> +; CHECK: Method unload [1]
>> +; CHECK: Method unload [2]
>> +; CHECK: Method unload [3]
>> +
>> +; ModuleID = 'test-parameters.bc'
>> +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"
>> +target triple = "x86_64-unknown-linux-gnu"
>> +
>> +%struct.char_struct = type { i8, [2 x i8] }
>> +
>> + at compound_char = global %struct.char_struct zeroinitializer, align 1
>> + at _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
>> +
>> +define i32 @_Z3foov() nounwind uwtable {
>> +entry:
>> +  ret i32 0, !dbg !32
>> +}
>> +
>> +define double @_Z15test_parametersPfPA2_dR11char_structPPitm(float* %pf,
>> [2 x double]* %ppd, %struct.char_struct* %s, i32** %ppn, i16 zeroext %us,
>> i64 %l) nounwind uwtable {
>> +entry:
>> +  %pf.addr = alloca float*, align 8
>> +  %ppd.addr = alloca [2 x double]*, align 8
>> +  %s.addr = alloca %struct.char_struct*, align 8
>> +  %ppn.addr = alloca i32**, align 8
>> +  %us.addr = alloca i16, align 2
>> +  %l.addr = alloca i64, align 8
>> +  %result = alloca double, align 8
>> +  store float* %pf, float** %pf.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{float** %pf.addr}, metadata
>> !34), !dbg !37
>> +  store [2 x double]* %ppd, [2 x double]** %ppd.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{[2 x double]** %ppd.addr},
>> metadata !38), !dbg !41
>> +  store %struct.char_struct* %s, %struct.char_struct** %s.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{%struct.char_struct** %s.addr},
>> metadata !42), !dbg !44
>> +  store i32** %ppn, i32*** %ppn.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{i32*** %ppn.addr}, metadata
>> !45), !dbg !48
>> +  store i16 %us, i16* %us.addr, align 2
>> +  call void @llvm.dbg.declare(metadata !{i16* %us.addr}, metadata !49),
>> !dbg !51
>> +  store i64 %l, i64* %l.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{i64* %l.addr}, metadata !52),
>> !dbg !55
>> +  call void @llvm.dbg.declare(metadata !{double* %result}, metadata !56),
>> !dbg !58
>> +  %0 = load float** %pf.addr, align 8, !dbg !59
>> +  %arrayidx = getelementptr inbounds float* %0, i64 0, !dbg !59
>> +  %1 = load float* %arrayidx, !dbg !59
>> +  %conv = fpext float %1 to double, !dbg !59
>> +  %2 = load [2 x double]** %ppd.addr, align 8, !dbg !59
>> +  %arrayidx1 = getelementptr inbounds [2 x double]* %2, i64 1, !dbg !59
>> +  %arrayidx2 = getelementptr inbounds [2 x double]* %arrayidx1, i32 0,
>> i64 1, !dbg !59
>> +  %3 = load double* %arrayidx2, !dbg !59
>> +  %mul = fmul double %conv, %3, !dbg !59
>> +  %4 = load %struct.char_struct** %s.addr, !dbg !59
>> +  %c = getelementptr inbounds %struct.char_struct* %4, i32 0, i32 0, !dbg
>> !59
>> +  %5 = load i8* %c, align 1, !dbg !59
>> +  %conv3 = sext i8 %5 to i32, !dbg !59
>> +  %conv4 = sitofp i32 %conv3 to double, !dbg !59
>> +  %mul5 = fmul double %mul, %conv4, !dbg !59
>> +  %6 = load i16* %us.addr, align 2, !dbg !59
>> +  %conv6 = zext i16 %6 to i32, !dbg !59
>> +  %conv7 = sitofp i32 %conv6 to double, !dbg !59
>> +  %mul8 = fmul double %mul5, %conv7, !dbg !59
>> +  %7 = load i64* %l.addr, align 8, !dbg !59
>> +  %conv9 = uitofp i64 %7 to double, !dbg !59
>> +  %mul10 = fmul double %mul8, %conv9, !dbg !59
>> +  %call = call i32 @_Z3foov(), !dbg !60
>> +  %conv11 = sitofp i32 %call to double, !dbg !60
>> +  %add = fadd double %mul10, %conv11, !dbg !60
>> +  store double %add, double* %result, align 8, !dbg !60
>> +  %8 = load double* %result, align 8, !dbg !61
>> +  ret double %8, !dbg !61
>> +}
>> +
>> +declare void @llvm.dbg.declare(metadata, metadata) nounwind readnone
>> +
>> +define i32 @main(i32 %argc, i8** %argv) nounwind uwtable {
>> +entry:
>> +  %retval = alloca i32, align 4
>> +  %argc.addr = alloca i32, align 4
>> +  %argv.addr = alloca i8**, align 8
>> +  %s = alloca %struct.char_struct, align 1
>> +  %f = alloca float, align 4
>> +  %d = alloca [2 x [2 x double]], align 16
>> +  %result = alloca double, align 8
>> +  store i32 0, i32* %retval
>> +  store i32 %argc, i32* %argc.addr, align 4
>> +  call void @llvm.dbg.declare(metadata !{i32* %argc.addr}, metadata !62),
>> !dbg !63
>> +  store i8** %argv, i8*** %argv.addr, align 8
>> +  call void @llvm.dbg.declare(metadata !{i8*** %argv.addr}, metadata
>> !64), !dbg !67
>> +  call void @llvm.dbg.declare(metadata !{%struct.char_struct* %s},
>> metadata !68), !dbg !70
>> +  call void @llvm.dbg.declare(metadata !{float* %f}, metadata !71), !dbg
>> !72
>> +  store float 0.000000e+00, float* %f, align 4, !dbg !73
>> +  call void @llvm.dbg.declare(metadata !{[2 x [2 x double]]* %d},
>> metadata !74), !dbg !77
>> +  %0 = bitcast [2 x [2 x double]]* %d to i8*, !dbg !78
>> +  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 !78
>> +  %c = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 0, !dbg
>> !79
>> +  store i8 97, i8* %c, align 1, !dbg !79
>> +  %c2 = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 1,
>> !dbg !80
>> +  %arrayidx = getelementptr inbounds [2 x i8]* %c2, i32 0, i64 0, !dbg
>> !80
>> +  store i8 48, i8* %arrayidx, align 1, !dbg !80
>> +  %c21 = getelementptr inbounds %struct.char_struct* %s, i32 0, i32 1,
>> !dbg !81
>> +  %arrayidx2 = getelementptr inbounds [2 x i8]* %c21, i32 0, i64 1, !dbg
>> !81
>> +  store i8 49, i8* %arrayidx2, align 1, !dbg !81
>> +  call void @llvm.dbg.declare(metadata !{double* %result}, metadata !82),
>> !dbg !83
>> +  %arraydecay = getelementptr inbounds [2 x [2 x double]]* %d, i32 0, i32
>> 0, !dbg !84
>> +  %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 !84
>> +  store double %call, double* %result, align 8, !dbg !84
>> +  %1 = load double* %result, align 8, !dbg !85
>> +  %cmp = fcmp oeq double %1, 0.000000e+00, !dbg !85
>> +  %cond = select i1 %cmp, i32 0, i32 -1, !dbg !85
>> +  ret i32 %cond, !dbg !85
>> +}
>> +
>> +declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture,
>> i64, i32, i1) nounwind
>> +
>> +!llvm.dbg.cu = !{!0}
>> +
>> +!0 = metadata !{i32 720913, i32 0, i32 4, metadata
>> !"test-parameters.cpp", metadata
>> !"/home/athirumurthi/dev/opencl-mc/build/RH64/Debug/backend/llvm", metadata
>> !"clang version 3.0 (branches/release_30 36797)", i1 true, i1 false,
>> metadata !"", i32 0, metadata !1, metadata !1, metadata !3, metadata !17} ;
>> [ DW_TAG_compile_unit ]
>> +!1 = metadata !{metadata !2}
>> +!2 = metadata !{i32 0}
>> +!3 = metadata !{metadata !4}
>> +!4 = metadata !{metadata !5, metadata !12, metadata !16}
>> +!5 = metadata !{i32 720942, i32 0, metadata !6, metadata !"foo", metadata
>> !"foo", metadata !"_Z3foov", metadata !6, i32 28, metadata !7, i1 false, i1
>> true, i32 0, i32 0, i32 0, i32 256, i1 false, i32 ()* @_Z3foov, null, null,
>> metadata !10} ; [ DW_TAG_subprogram ]
>> +!6 = metadata !{i32 720937, metadata !"test-parameters.cpp", metadata
>> !"/home/athirumurthi/dev/opencl-mc/build/RH64/Debug/backend/llvm", null} ; [
>> DW_TAG_file_type ]
>> +!7 = metadata !{i32 720917, i32 0, metadata !"", i32 0, i32 0, i64 0, i64
>> 0, i32 0, i32 0, i32 0, metadata !8, i32 0, i32 0} ; [
>> DW_TAG_subroutine_type ]
>> +!8 = metadata !{metadata !9}
>> +!9 = metadata !{i32 720932, null, metadata !"int", null, i32 0, i64 32,
>> i64 32, i64 0, i32 0, i32 5} ; [ DW_TAG_base_type ]
>> +!10 = metadata !{metadata !11}
>> +!11 = metadata !{i32 720932}                      ; [ DW_TAG_base_type ]
>> +!12 = metadata !{i32 720942, i32 0, metadata !6, metadata
>> !"test_parameters", metadata !"test_parameters", metadata
>> !"_Z15test_parametersPfPA2_dR11char_structPPitm", metadata !6, i32 33,
>> metadata !13, i1 false, i1 true, i32 0, i32 0, i32 0, i32 256, i1 false,
>> double (float*, [2 x double]*, %struct.char_struct*, i32**, i16, i64)*
>> @_Z15test_parametersPfPA2_dR11char_structPPitm, null, null, metadata !10} ;
>> [ DW_TAG_subprogram ]
>> +!13 = metadata !{i32 720917, i32 0, metadata !"", i32 0, i32 0, i64 0,
>> i64 0, i32 0, i32 0, i32 0, metadata !14, i32 0, i32 0} ; [
>> DW_TAG_subroutine_type ]
>> +!14 = metadata !{metadata !15}
>> +!15 = metadata !{i32 720932, null, metadata !"double", null, i32 0, i64
>> 64, i64 64, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ]
>> +!16 = metadata !{i32 720942, i32 0, metadata !6, metadata !"main",
>> metadata !"main", metadata !"", metadata !6, i32 39, metadata !7, i1 false,
>> i1 true, i32 0, i32 0, i32 0, i32 256, i1 false, i32 (i32, i8**)* @main,
>> null, null, metadata !10} ; [ DW_TAG_subprogram ]
>> +!17 = metadata !{metadata !18}
>> +!18 = metadata !{metadata !19}
>> +!19 = metadata !{i32 720948, i32 0, null, metadata !"compound_char",
>> metadata !"compound_char", metadata !"", metadata !6, i32 25, metadata !20,
>> i32 0, i32 1, %struct.char_struct* @compound_char} ; [ DW_TAG_variable ]
>> +!20 = metadata !{i32 720898, null, metadata !"char_struct", metadata !6,
>> i32 22, i64 24, i64 8, i32 0, i32 0, null, metadata !21, i32 0, null, null}
>> ; [ DW_TAG_class_type ]
>> +!21 = metadata !{metadata !22, metadata !24, metadata !28}
>> +!22 = metadata !{i32 720909, metadata !20, metadata !"c", metadata !6,
>> i32 23, i64 8, i64 8, i64 0, i32 0, metadata !23} ; [ DW_TAG_member ]
>> +!23 = metadata !{i32 720932, null, metadata !"char", null, i32 0, i64 8,
>> i64 8, i64 0, i32 0, i32 6} ; [ DW_TAG_base_type ]
>> +!24 = metadata !{i32 720909, metadata !20, metadata !"c2", metadata !6,
>> i32 24, i64 16, i64 8, i64 8, i32 0, metadata !25} ; [ DW_TAG_member ]
>> +!25 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 16, i64
>> 8, i32 0, i32 0, metadata !23, metadata !26, i32 0, i32 0} ; [
>> DW_TAG_array_type ]
>> +!26 = metadata !{metadata !27}
>> +!27 = metadata !{i32 720929, i64 0, i64 1}        ; [
>> DW_TAG_subrange_type ]
>> +!28 = metadata !{i32 720942, i32 0, metadata !20, metadata
>> !"char_struct", metadata !"char_struct", metadata !"", metadata !6, i32 22,
>> metadata !29, i1 false, i1 false, i32 0, i32 0, null, i32 320, i1 false,
>> null, null, i32 0, metadata !10} ; [ DW_TAG_subprogram ]
>> +!29 = metadata !{i32 720917, i32 0, metadata !"", i32 0, i32 0, i64 0,
>> i64 0, i32 0, i32 0, i32 0, metadata !30, i32 0, i32 0} ; [
>> DW_TAG_subroutine_type ]
>> +!30 = metadata !{null, metadata !31}
>> +!31 = metadata !{i32 720911, i32 0, metadata !"", i32 0, i32 0, i64 64,
>> i64 64, i64 0, i32 64, metadata !20} ; [ DW_TAG_pointer_type ]
>> +!32 = metadata !{i32 29, i32 3, metadata !33, null}
>> +!33 = metadata !{i32 720907, metadata !5, i32 28, i32 1, metadata !6, i32
>> 0} ; [ DW_TAG_lexical_block ]
>> +!34 = metadata !{i32 721153, metadata !12, metadata !"pf", metadata !6,
>> i32 16777248, metadata !35, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!35 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !36} ; [ DW_TAG_pointer_type ]
>> +!36 = metadata !{i32 720932, null, metadata !"float", null, i32 0, i64
>> 32, i64 32, i64 0, i32 0, i32 4} ; [ DW_TAG_base_type ]
>> +!37 = metadata !{i32 32, i32 31, metadata !12, null}
>> +!38 = metadata !{i32 721153, metadata !12, metadata !"ppd", metadata !6,
>> i32 33554464, metadata !39, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!39 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !40} ; [ DW_TAG_pointer_type ]
>> +!40 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 128,
>> i64 64, i32 0, i32 0, metadata !15, metadata !26, i32 0, i32 0} ; [
>> DW_TAG_array_type ]
>> +!41 = metadata !{i32 32, i32 42, metadata !12, null}
>> +!42 = metadata !{i32 721153, metadata !12, metadata !"s", metadata !6,
>> i32 50331680, metadata !43, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!43 = metadata !{i32 720912, null, null, null, i32 0, i64 0, i64 0, i64
>> 0, i32 0, metadata !20} ; [ DW_TAG_reference_type ]
>> +!44 = metadata !{i32 32, i32 72, metadata !12, null}
>> +!45 = metadata !{i32 721153, metadata !12, metadata !"ppn", metadata !6,
>> i32 67108896, metadata !46, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!46 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !47} ; [ DW_TAG_pointer_type ]
>> +!47 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !9} ; [ DW_TAG_pointer_type ]
>> +!48 = metadata !{i32 32, i32 81, metadata !12, null}
>> +!49 = metadata !{i32 721153, metadata !12, metadata !"us", metadata !6,
>> i32 83886112, metadata !50, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!50 = metadata !{i32 720932, null, metadata !"unsigned short", null, i32
>> 0, i64 16, i64 16, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ]
>> +!51 = metadata !{i32 32, i32 105, metadata !12, null}
>> +!52 = metadata !{i32 721153, metadata !12, metadata !"l", metadata !6,
>> i32 100663328, metadata !53, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!53 = metadata !{i32 720934, null, metadata !"", null, i32 0, i64 0, i64
>> 0, i64 0, i32 0, metadata !54} ; [ DW_TAG_const_type ]
>> +!54 = metadata !{i32 720932, null, metadata !"long unsigned int", null,
>> i32 0, i64 64, i64 64, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ]
>> +!55 = metadata !{i32 32, i32 135, metadata !12, null}
>> +!56 = metadata !{i32 721152, metadata !57, metadata !"result", metadata
>> !6, i32 34, metadata !15, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!57 = metadata !{i32 720907, metadata !12, i32 33, i32 1, metadata !6,
>> i32 1} ; [ DW_TAG_lexical_block ]
>> +!58 = metadata !{i32 34, i32 10, metadata !57, null}
>> +!59 = metadata !{i32 34, i32 59, metadata !57, null}
>> +!60 = metadata !{i32 34, i32 54, metadata !57, null}
>> +!61 = metadata !{i32 35, i32 3, metadata !57, null}
>> +!62 = metadata !{i32 721153, metadata !16, metadata !"argc", metadata !6,
>> i32 16777254, metadata !9, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!63 = metadata !{i32 38, i32 14, metadata !16, null}
>> +!64 = metadata !{i32 721153, metadata !16, metadata !"argv", metadata !6,
>> i32 33554470, metadata !65, i32 0, i32 0} ; [ DW_TAG_arg_variable ]
>> +!65 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !66} ; [ DW_TAG_pointer_type ]
>> +!66 = metadata !{i32 720911, null, metadata !"", null, i32 0, i64 64, i64
>> 64, i64 0, i32 0, metadata !23} ; [ DW_TAG_pointer_type ]
>> +!67 = metadata !{i32 38, i32 26, metadata !16, null}
>> +!68 = metadata !{i32 721152, metadata !69, metadata !"s", metadata !6,
>> i32 40, metadata !20, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!69 = metadata !{i32 720907, metadata !16, i32 39, i32 1, metadata !6,
>> i32 2} ; [ DW_TAG_lexical_block ]
>> +!70 = metadata !{i32 40, i32 22, metadata !69, null}
>> +!71 = metadata !{i32 721152, metadata !69, metadata !"f", metadata !6,
>> i32 41, metadata !36, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!72 = metadata !{i32 41, i32 9, metadata !69, null}
>> +!73 = metadata !{i32 41, i32 16, metadata !69, null}
>> +!74 = metadata !{i32 721152, metadata !69, metadata !"d", metadata !6,
>> i32 42, metadata !75, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!75 = metadata !{i32 720897, null, metadata !"", null, i32 0, i64 256,
>> i64 64, i32 0, i32 0, metadata !15, metadata !76, i32 0, i32 0} ; [
>> DW_TAG_array_type ]
>> +!76 = metadata !{metadata !27, metadata !27}
>> +!77 = metadata !{i32 42, i32 10, metadata !69, null}
>> +!78 = metadata !{i32 42, i32 38, metadata !69, null}
>> +!79 = metadata !{i32 44, i32 3, metadata !69, null}
>> +!80 = metadata !{i32 45, i32 3, metadata !69, null}
>> +!81 = metadata !{i32 46, i32 3, metadata !69, null}
>> +!82 = metadata !{i32 721152, metadata !69, metadata !"result", metadata
>> !6, i32 48, metadata !15, i32 0, i32 0} ; [ DW_TAG_auto_variable ]
>> +!83 = metadata !{i32 48, i32 10, metadata !69, null}
>> +!84 = metadata !{i32 48, i32 19, metadata !69, null}
>> +!85 = metadata !{i32 49, i32 3, metadata !69, null}
>>
>> Modified: llvm/trunk/test/lit.cfg
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lit.cfg?rev=168459&r1=168458&r2=168459&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/lit.cfg (original)
>> +++ llvm/trunk/test/lit.cfg Wed Nov 21 14:38:26 2012
>> @@ -197,7 +197,7 @@
>>                  r"\bllvm-bcanalyzer\b", r"\bllvm-config\b",
>>                  r"\bllvm-cov\b",        r"\bllvm-diff\b",
>>                  r"\bllvm-dis\b",        r"\bllvm-dwarfdump\b",
>> -                r"\bllvm-extract\b",
>> +                r"\bllvm-extract\b",    r"\bllvm-jistlistener\b",
>>                  r"\bllvm-link\b",       r"\bllvm-mc\b",
>>                  r"\bllvm-nm\b",         r"\bllvm-objdump\b",
>>                  r"\bllvm-prof\b",       r"\bllvm-ranlib\b",
>>
>> Modified: llvm/trunk/test/lit.site.cfg.in
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/lit.site.cfg.in?rev=168459&r1=168458&r2=168459&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/test/lit.site.cfg.in (original)
>> +++ llvm/trunk/test/lit.site.cfg.in Wed Nov 21 14:38:26 2012
>> @@ -16,6 +16,7 @@
>>  config.llvm_bindings = "@LLVM_BINDINGS@"
>>  config.host_os = "@HOST_OS@"
>>  config.host_arch = "@HOST_ARCH@"
>> +config.llvm_use_intel_jitevents = "@LLVM_USE_INTEL_JITEVENTS@"
>>
>>  # Support substitution of the tools_dir with user parameters. This is
>>  # used when we can't determine the tool dir at configuration time.
>>
>> Modified: llvm/trunk/tools/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/CMakeLists.txt?rev=168459&r1=168458&r2=168459&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/CMakeLists.txt (original)
>> +++ llvm/trunk/tools/CMakeLists.txt Wed Nov 21 14:38:26 2012
>> @@ -31,6 +31,9 @@
>>  add_subdirectory(llvm-readobj)
>>  add_subdirectory(llvm-rtdyld)
>>  add_subdirectory(llvm-dwarfdump)
>> +if( LLVM_USE_INTEL_JITEVENTS )
>> +  add_subdirectory(llvm-jitlistener)
>> +endif( LLVM_USE_INTEL_JITEVENTS )
>>
>>  add_subdirectory(bugpoint)
>>  add_subdirectory(bugpoint-passes)
>>
>> Modified: llvm/trunk/tools/LLVMBuild.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/LLVMBuild.txt?rev=168459&r1=168458&r2=168459&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/LLVMBuild.txt (original)
>> +++ llvm/trunk/tools/LLVMBuild.txt Wed Nov 21 14:38:26 2012
>> @@ -16,7 +16,7 @@
>>
>> ;===------------------------------------------------------------------------===;
>>
>>  [common]
>> -subdirectories = bugpoint llc lli llvm-ar llvm-as llvm-bcanalyzer
>> llvm-cov llvm-diff llvm-dis llvm-dwarfdump llvm-extract llvm-link llvm-mc
>> llvm-nm llvm-objdump llvm-prof llvm-ranlib llvm-rtdyld llvm-size macho-dump
>> opt llvm-mcmarkup
>> +subdirectories = bugpoint llc lli llvm-ar llvm-as llvm-bcanalyzer
>> llvm-cov llvm-diff llvm-dis llvm-dwarfdump llvm-extract llvm-jitlistener
>> llvm-link llvm-mc llvm-nm llvm-objdump llvm-prof llvm-ranlib llvm-rtdyld
>> llvm-size macho-dump opt llvm-mcmarkup
>>
>>  [component_0]
>>  type = Group
>>
>> Modified: llvm/trunk/tools/Makefile
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/Makefile?rev=168459&r1=168458&r2=168459&view=diff
>>
>> ==============================================================================
>> --- llvm/trunk/tools/Makefile (original)
>> +++ llvm/trunk/tools/Makefile Wed Nov 21 14:38:26 2012
>> @@ -33,7 +33,7 @@
>>                   lli llvm-extract llvm-mc \
>>                   bugpoint llvm-bcanalyzer \
>>                   llvm-diff macho-dump llvm-objdump llvm-readobj \
>> -                llvm-rtdyld llvm-dwarfdump llvm-cov \
>> +                llvm-rtdyld llvm-dwarfdump llvm-cov llvm-jitlistener \
>>                  llvm-size llvm-stress llvm-mcmarkup \
>>                  llvm-symbolizer
>>
>>
>> Propchange: llvm/trunk/tools/llvm-jitlistener/
>>
>> ------------------------------------------------------------------------------
>>     bugtraq:number = true
>>
>> Added: llvm/trunk/tools/llvm-jitlistener/CMakeLists.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-jitlistener/CMakeLists.txt?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-jitlistener/CMakeLists.txt (added)
>> +++ llvm/trunk/tools/llvm-jitlistener/CMakeLists.txt Wed Nov 21 14:38:26
>> 2012
>> @@ -0,0 +1,20 @@
>> +# This tool is excluded from the CMake build if Intel JIT events are
>> disabled.
>> +
>> +link_directories( ${LLVM_INTEL_JITEVENTS_LIBDIR} )
>> +include_directories( ${LLVM_INTEL_JITEVENTS_INCDIR} )
>> +
>> +set(LLVM_LINK_COMPONENTS
>> +  asmparser
>> +  bitreader
>> +  inteljitevents
>> +  interpreter
>> +  jit
>> +  mcjit
>> +  nativecodegen
>> +  object
>> +  selectiondag
>> +  )
>> +
>> +add_llvm_tool(llvm-jitlistener
>> +  llvm-jitlistener.cpp
>> +  )
>>
>> Added: llvm/trunk/tools/llvm-jitlistener/LLVMBuild.txt
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-jitlistener/LLVMBuild.txt?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-jitlistener/LLVMBuild.txt (added)
>> +++ llvm/trunk/tools/llvm-jitlistener/LLVMBuild.txt Wed Nov 21 14:38:26
>> 2012
>> @@ -0,0 +1,22 @@
>> +;===- ./tools/llvm-jitlistener/LLVMBuild.txt -------------------*- Conf
>> -*--===;
>> +;
>> +;                     The LLVM Compiler Infrastructure
>> +;
>> +; This file is distributed under the University of Illinois Open Source
>> +; License. See LICENSE.TXT for details.
>> +;
>>
>> +;===------------------------------------------------------------------------===;
>> +;
>> +; This is an LLVMBuild description file for the components in this
>> subdirectory.
>> +;
>> +; For more information on the LLVMBuild system, please see:
>> +;
>> +;   http://llvm.org/docs/LLVMBuild.html
>> +;
>>
>> +;===------------------------------------------------------------------------===;
>> +
>> +[component_0]
>> +type = Tool
>> +name = llvm-jitlistener
>> +parent = Tools
>> +required_libraries = AsmParser BitReader Interpreter JIT MCJIT
>> NativeCodeGen Object SelectionDAG Native
>>
>> Added: llvm/trunk/tools/llvm-jitlistener/Makefile
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-jitlistener/Makefile?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-jitlistener/Makefile (added)
>> +++ llvm/trunk/tools/llvm-jitlistener/Makefile Wed Nov 21 14:38:26 2012
>> @@ -0,0 +1,27 @@
>> +##===- tools/llvm-jitlistener/Makefile ---------------------*- Makefile
>> -*-===##
>> +#
>> +#                     The LLVM Compiler Infrastructure
>> +#
>> +# This file is distributed under the University of Illinois Open Source
>> +# License. See LICENSE.TXT for details.
>> +#
>>
>> +##===----------------------------------------------------------------------===##
>> +
>> +LEVEL := ../..
>> +TOOLNAME := llvm-jitlistener
>> +
>> +include $(LEVEL)/Makefile.config
>> +
>> +LINK_COMPONENTS := mcjit jit interpreter nativecodegen bitreader
>> asmparser selectiondag Object
>> +
>> +# If Intel JIT Events support is configured, link against the LLVM Intel
>> JIT
>> +# Events interface library.  If not, this tool will do nothing useful,
>> but it
>> +# will build correctly.
>> +ifeq ($(USE_INTEL_JITEVENTS), 1)
>> +  LINK_COMPONENTS += inteljitevents
>> +endif
>> +
>> +# This tool has no plugins, optimize startup time.
>> +TOOL_NO_EXPORTS := 1
>> +
>> +include $(LLVM_SRC_ROOT)/Makefile.rules
>>
>> Added: llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp
>> URL:
>> http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp?rev=168459&view=auto
>>
>> ==============================================================================
>> --- llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp (added)
>> +++ llvm/trunk/tools/llvm-jitlistener/llvm-jitlistener.cpp Wed Nov 21
>> 14:38:26 2012
>> @@ -0,0 +1,207 @@
>> +//===-- llvm-jitlistener.cpp - Utility for testing MCJIT event listener
>> ---===//
>> +//
>> +//                     The LLVM Compiler Infrastructure
>> +//
>> +// This file is distributed under the University of Illinois Open Source
>> +// License. See LICENSE.TXT for details.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +//
>> +// This program is a used by lit tests to verify the MCJIT
>> JITEventListener
>> +// interface.  It registers a mock JIT event listener, generates a module
>> from
>> +// an input IR file and dumps the reported event information to stdout.
>> +//
>>
>> +//===----------------------------------------------------------------------===//
>> +
>> +#include "llvm/ADT/OwningPtr.h"
>> +#include "llvm/ADT/Triple.h"
>> +#include
>> "../../lib/ExecutionEngine/IntelJITEvents/IntelJITEventsWrapper.h"
>> +#include "llvm/ExecutionEngine/JITEventListener.h"
>> +#include "llvm/ExecutionEngine/JITMemoryManager.h"
>> +#include "llvm/ExecutionEngine/MCJIT.h"
>> +#include "llvm/ExecutionEngine/ObjectImage.h"
>> +#include "llvm/LLVMContext.h"
>> +#include "llvm/Module.h"
>> +#include "llvm/Support/CommandLine.h"
>> +#include "llvm/Support/Host.h"
>> +#include "llvm/Support/IRReader.h"
>> +#include "llvm/Support/ManagedStatic.h"
>> +#include "llvm/Support/MemoryBuffer.h"
>> +#include "llvm/Support/PrettyStackTrace.h"
>> +#include "llvm/Support/Signals.h"
>> +#include "llvm/Support/SourceMgr.h"
>> +#include "llvm/Support/TargetSelect.h"
>> +#include <string>
>> +
>> +using namespace llvm;
>> +
>> +namespace {
>> +
>> +typedef std::vector<std::pair<std::string, unsigned int> >
>> SourceLocations;
>> +typedef std::map<uint64_t, SourceLocations> NativeCodeMap;
>> +
>> +NativeCodeMap  ReportedDebugFuncs;
>> +
>> +int NotifyEvent(iJIT_JVM_EVENT EventType, void *EventSpecificData) {
>> +  switch (EventType) {
>> +    case iJVM_EVENT_TYPE_METHOD_LOAD_FINISHED: {
>> +      if (!EventSpecificData) {
>> +        errs() <<
>> +          "Error: The JIT event listener did not provide a event data.";
>> +        return -1;
>> +      }
>> +      iJIT_Method_Load* msg =
>> static_cast<iJIT_Method_Load*>(EventSpecificData);
>> +
>> +      ReportedDebugFuncs[msg->method_id];
>> +
>> +      outs() << "Method load [" << msg->method_id << "]: " <<
>> msg->method_name
>> +             << ", Size = " << msg->method_size << "\n";
>> +
>> +      for(unsigned int i = 0; i < msg->line_number_size; ++i) {
>> +        if (!msg->line_number_table) {
>> +          errs() << "A function with a non-zero line count had no line
>> table.";
>> +          return -1;
>> +        }
>> +        std::pair<std::string, unsigned int> loc(
>> +          std::string(msg->source_file_name),
>> +          msg->line_number_table[i].LineNumber);
>> +        ReportedDebugFuncs[msg->method_id].push_back(loc);
>> +        outs() << "  Line info @ " << msg->line_number_table[i].Offset
>> +               << ": " << msg->source_file_name
>> +               << ", line " << msg->line_number_table[i].LineNumber <<
>> "\n";
>> +      }
>> +      outs() << "\n";
>> +    }
>> +    break;
>> +    case iJVM_EVENT_TYPE_METHOD_UNLOAD_START: {
>> +      if (!EventSpecificData) {
>> +        errs() <<
>> +          "Error: The JIT event listener did not provide a event data.";
>> +        return -1;
>> +      }
>> +      unsigned int UnloadId
>> +        = *reinterpret_cast<unsigned int*>(EventSpecificData);
>> +      assert(1 == ReportedDebugFuncs.erase(UnloadId));
>> +      outs() << "Method unload [" << UnloadId << "]\n";
>> +    }
>> +    break;
>> +    default:
>> +      break;
>> +  }
>> +  return 0;
>> +}
>> +
>> +iJIT_IsProfilingActiveFlags IsProfilingActive(void) {
>> +  // for testing, pretend we have an Intel Parallel Amplifier XE 2011
>> +  // instance attached
>> +  return iJIT_SAMPLING_ON;
>> +}
>> +
>> +unsigned int GetNewMethodID(void) {
>> +  static unsigned int id = 0;
>> +  return ++id;
>> +}
>> +
>> +class JitEventListenerTest {
>> +protected:
>> +  void InitEE(const std::string &IRFile) {
>> +    LLVMContext &Context = getGlobalContext();
>> +
>> +    // If we have a native target, initialize it to ensure it is linked
>> in and
>> +    // usable by the JIT.
>> +    InitializeNativeTarget();
>> +    InitializeNativeTargetAsmPrinter();
>> +
>> +    // Parse the bitcode...
>> +    SMDiagnostic Err;
>> +    TheModule = ParseIRFile(IRFile, Err, Context);
>> +    if (!TheModule) {
>> +      errs() << Err.getMessage();
>> +      return;
>> +    }
>> +
>> +    // FIXME: This is using the default legacy JITMemoryManager because
>> it
>> +    // supports poison memory.  At some point, we'll need to update this
>> to
>> +    // use an MCJIT-specific memory manager.  It might be nice to have
>> the
>> +    // poison memory option there too.
>> +    JITMemoryManager *MemMgr =
>> JITMemoryManager::CreateDefaultMemManager();
>> +    if (!MemMgr) {
>> +      errs() << "Unable to create memory manager.";
>> +      return;
>> +    }
>> +
>> +    // Tell the memory manager to poison freed memory so that accessing
>> freed
>> +    // memory is more easily tested.
>> +    MemMgr->setPoisonMemory(true);
>> +
>> +    // Override the triple to generate ELF on Windows since that's
>> supported
>> +    Triple Tuple(TheModule->getTargetTriple());
>> +    if (Tuple.getTriple().empty())
>> +      Tuple.setTriple(LLVM_HOSTTRIPLE);
>> +
>> +    if (Tuple.isOSWindows() && Triple::ELF != Tuple.getEnvironment()) {
>> +      Tuple.setEnvironment(Triple::ELF);
>> +      TheModule->setTargetTriple(Tuple.getTriple());
>> +    }
>> +
>> +    // Compile the IR
>> +    std::string Error;
>> +    TheJIT.reset(EngineBuilder(TheModule)
>> +      .setEngineKind(EngineKind::JIT)
>> +      .setErrorStr(&Error)
>> +      .setJITMemoryManager(MemMgr)
>> +      .setUseMCJIT(true)
>> +      .create());
>> +    if (Error.empty() == false)
>> +      errs() << Error;
>> +  }
>> +
>> +  void DestroyEE() {
>> +    TheJIT.reset();
>> +  }
>> +
>> +  LLVMContext Context; // Global ownership
>> +  Module *TheModule; // Owned by ExecutionEngine.
>> +  JITMemoryManager *JMM; // Owned by ExecutionEngine.
>> +  OwningPtr<ExecutionEngine> TheJIT;
>> +
>> +public:
>> +  void ProcessInput(const std::string &Filename) {
>> +    InitEE(Filename);
>> +
>> +    llvm::OwningPtr<llvm::JITEventListener>
>> Listener(JITEventListener::createIntelJITEventListener(
>> +        new IntelJITEventsWrapper(NotifyEvent, 0,
>> +          IsProfilingActive, 0, 0,
>> +          GetNewMethodID)));
>> +
>> +    TheJIT->RegisterJITEventListener(Listener.get());
>> +
>> +    TheJIT->finalizeObject();
>> +
>> +    // Destroy the JIT engine instead of unregistering to get unload
>> events.
>> +    DestroyEE();
>> +  }
>> +};
>> +
>> +
>> +
>> +} // end anonymous namespace
>> +
>> +static cl::opt<std::string>
>> +InputFilename(cl::Positional, cl::desc("<input IR file>"),
>> +               cl::Required);
>> +
>> +int main(int argc, char **argv) {
>> +  // Print a stack trace if we signal out.
>> +  sys::PrintStackTraceOnErrorSignal();
>> +  PrettyStackTraceProgram X(argc, argv);
>> +  llvm_shutdown_obj Y;  // Call llvm_shutdown() on exit.
>> +
>> +  cl::ParseCommandLineOptions(argc, argv, "llvm jit event listener test
>> utility\n");
>> +
>> +  JitEventListenerTest Test;
>> +
>> +  Test.ProcessInput(InputFilename);
>> +
>> +  return 0;
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
>
>
> --
> ~Craig
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>




More information about the llvm-commits mailing list