[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.site.cfg.in tools/CMakeLists.txt tools/LLVMBuild.txt tools/Makefile tools/llvm-jitlistener/ tools/llvm-jitlistener/CMakeLists.txt tools/llvm-jitlistener/LLVMBuild.txt tools/llvm-jitlistener/Makefile tools/llvm-jitlistener/llvm-jitlistener.cpp

Craig Topper craig.topper at gmail.com
Wed Nov 21 19:52:01 PST 2012


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20121121/fa8781ca/attachment.html>


More information about the llvm-commits mailing list