Skip to content

Instantly share code, notes, and snippets.

@filipnavara
Created August 27, 2019 20:03
Show Gist options
  • Save filipnavara/96f5e4b39b8f55eafbefa9fa587af39e to your computer and use it in GitHub Desktop.
Save filipnavara/96f5e4b39b8f55eafbefa9fa587af39e to your computer and use it in GitHub Desktop.
*** Unoptimized LLVM IR for (wrapper runtime-invoke) <Module>:runtime_invoke_void__this___object ***
; Function Attrs: noinline uwtable
define monocc i64* @"(wrapper runtime-invoke) <Module>:runtime_invoke_void__this___object (object,intptr,intptr,intptr)"(i64* %arg_this, i64 %arg_params, i64 %arg_exc, i64 %arg_method) #0 personality i32 (...)* @mono_personality {
BB0:
%0 = alloca i64, align 8
%1 = alloca i64, align 8
%2 = alloca i64*, align 1
%3 = alloca i64*, align 1
%4 = alloca i64*, align 1
%5 = alloca i64, align 8
%6 = alloca i64*, align 1
store i64 %arg_exc, i64* %5
%exvar = alloca i64*
%7 = load volatile i64, i64* inttoptr (i64 4481434488 to i64*)
%8 = icmp eq i64 %7, 0
%9 = call i1 @llvm.expect.i1(i1 %8, i1 true)
br i1 %9, label %CONT_BB2, label %POLL_BB1
BB3_CALL_HANDLER_TARGET: ; preds = %EH_CLAUSE0_BB3
%10 = load i64*, i64** %exvar
store i64* %10, i64** %2
%11 = load volatile i64, i64* inttoptr (i64 4481434488 to i64*)
%12 = icmp eq i64 %11, 0
%13 = call i1 @llvm.expect.i1(i1 %12, i1 true)
br i1 %13, label %CONT_BB7, label %POLL_BB6
POLL_BB1: ; preds = %BB0
%14 = load void ()*, void ()** @mono_threads_state_poll
call coldcc void %14()
br label %CONT_BB2
CONT_BB2: ; preds = %POLL_BB1, %BB0
br label %BB5
BB5: ; preds = %CONT_BB2
store i64* null, i64** %4
store i64* null, i64** %3
br label %BB4
BB4: ; preds = %BB5
%15 = load volatile i64, i64* %5
%16 = icmp eq i64 %15, 0
br i1 %16, label %BB6, label %BB2
BB6: ; preds = %BB4
%t54 = load i32, i32* inttoptr (i64 4481216016 to i32*)
%17 = icmp eq i32 %t54, 0
%18 = call i1 @llvm.expect.i1(i1 %17, i1 true)
br i1 %18, label %BB12, label %BB13
BB2: ; preds = %BB4
%t26 = load i32, i32* inttoptr (i64 4481216016 to i32*)
%19 = icmp eq i32 %t26, 0
%20 = call i1 @llvm.expect.i1(i1 %19, i1 true)
br i1 %20, label %BB7, label %BB8
BB12: ; preds = %BB14, %BB6
%21 = inttoptr i64 %arg_params to i64*
%t70 = load i64, i64* %21
%22 = inttoptr i64 %arg_method to void (i64*, i64*)*
%23 = inttoptr i64 %t70 to i64*
notail call monocc void %22(i64* %arg_this, i64* %23)
%24 = load volatile i64*, i64** %4
store i64* %24, i64** %6
br label %BB1
BB13: ; preds = %BB6
%25 = load i64* ()*, i64* ()** @0
%26 = notail call i64* %25()
%27 = ptrtoint i64* %26 to i64
%28 = icmp eq i64 %27, 0
%29 = call i1 @llvm.expect.i1(i1 %28, i1 true)
br i1 %29, label %BB14, label %BB15
BB1: ; preds = %BB11, %BB12
%30 = load volatile i64*, i64** %6
ret i64* %30
BB14: ; preds = %BB13
br label %BB12
BB15: ; preds = %BB13
%31 = ptrtoint i64* %26 to i64
%t65 = add i64 %31, 136
%32 = inttoptr i64 %t65 to i32*
%33 = getelementptr i32, i32* %32, i32 0
store i32 1, i32* %33
%34 = load void (i64*)*, void (i64*)** @mono_arch_rethrow_exception
call void %34(i64* %26)
unreachable
BB7: ; preds = %BB9, %BB2
%35 = inttoptr i64 %arg_params to i64*
%t43 = load i64, i64* %35
%36 = inttoptr i64 %arg_method to void (i64*, i64*)*
%37 = inttoptr i64 %t43 to i64*
invoke monocc void %36(i64* %arg_this, i64* %37)
to label %NOEX_BB3 unwind label %EH_CLAUSE0_BB3
BB8: ; preds = %BB2
%38 = load i64* ()*, i64* ()** @1
%39 = invoke i64* %38()
to label %NOEX_BB4 unwind label %EH_CLAUSE0_BB3
BB11: ; preds = %CONT_BB7, %NOEX_BB3
%40 = load volatile i64*, i64** %4
store i64* %40, i64** %6
br label %BB1
EH_CLAUSE0_BB3: ; preds = %BB10, %BB8, %BB7
%41 = landingpad { i8*, i32 }
catch i32* @type_info_0
%ex_obj = extractvalue { i8*, i32 } %41, 0
%42 = bitcast i8* %ex_obj to i64*
store i64* %42, i64** %exvar
%ex_selector = extractvalue { i8*, i32 } %41, 1
switch i32 %ex_selector, label %BB3_CALL_HANDLER_TARGET [
]
NOEX_BB3: ; preds = %BB7
br label %BB11
NOEX_BB4: ; preds = %BB8
%43 = ptrtoint i64* %39 to i64
%44 = icmp eq i64 %43, 0
%45 = call i1 @llvm.expect.i1(i1 %44, i1 true)
br i1 %45, label %BB9, label %BB10
BB9: ; preds = %NOEX_BB4
br label %BB7
BB10: ; preds = %NOEX_BB4
%46 = ptrtoint i64* %39 to i64
%t38 = add i64 %46, 136
%47 = inttoptr i64 %t38 to i32*
%48 = getelementptr i32, i32* %47, i32 0
store i32 1, i32* %48
%49 = load void (i64*)*, void (i64*)** @mono_arch_rethrow_exception.1
invoke void %49(i64* %39)
to label %NOEX_BB5 unwind label %EH_CLAUSE0_BB3
NOEX_BB5: ; preds = %BB10
unreachable
POLL_BB6: ; preds = %BB3_CALL_HANDLER_TARGET
%50 = load void ()*, void ()** @mono_threads_state_poll.2
call coldcc void %50()
br label %CONT_BB7
CONT_BB7: ; preds = %POLL_BB6, %BB3_CALL_HANDLER_TARGET
%51 = load volatile i64*, i64** %2
store i64* %51, i64** %3
%52 = load volatile i64, i64* %5
%53 = load volatile i64*, i64** %3
%54 = inttoptr i64 %52 to i64*
%55 = getelementptr i64, i64* %54, i32 0
%56 = ptrtoint i64* %53 to i64
store i64 %56, i64* %55
%t50 = lshr i64 %52, 9
%t79 = and i64 %t50, 8388607
%t80 = add i64 %t79, 4433379328
%57 = inttoptr i64 %t80 to i8*
%58 = getelementptr i8, i8* %57, i32 0
store i8 1, i8* %58
br label %BB11
}
***
Referencing function in another module!
%9 = call i1 @llvm.expect.i1(i1 %8, i1 true)
; ModuleID = 'jit-module-runtime_invoke_void__this___object'
i1 (i1, i1)* @llvm.expect.i1
; ModuleID = 'jit-module-llvm_func_wrapper_0'
Referencing function in another module!
%13 = call i1 @llvm.expect.i1(i1 %12, i1 true)
; ModuleID = 'jit-module-runtime_invoke_void__this___object'
i1 (i1, i1)* @llvm.expect.i1
; ModuleID = 'jit-module-llvm_func_wrapper_0'
Referencing function in another module!
%18 = call i1 @llvm.expect.i1(i1 %17, i1 true)
; ModuleID = 'jit-module-runtime_invoke_void__this___object'
i1 (i1, i1)* @llvm.expect.i1
; ModuleID = 'jit-module-llvm_func_wrapper_0'
Referencing function in another module!
%20 = call i1 @llvm.expect.i1(i1 %19, i1 true)
; ModuleID = 'jit-module-runtime_invoke_void__this___object'
i1 (i1, i1)* @llvm.expect.i1
; ModuleID = 'jit-module-llvm_func_wrapper_0'
Referencing function in another module!
%29 = call i1 @llvm.expect.i1(i1 %28, i1 true)
; ModuleID = 'jit-module-runtime_invoke_void__this___object'
i1 (i1, i1)* @llvm.expect.i1
; ModuleID = 'jit-module-llvm_func_wrapper_0'
Referencing function in another module!
%45 = call i1 @llvm.expect.i1(i1 %44, i1 true)
; ModuleID = 'jit-module-runtime_invoke_void__this___object'
i1 (i1, i1)* @llvm.expect.i1
; ModuleID = 'jit-module-llvm_func_wrapper_0'
LLVM ERROR: Broken function found, compilation aborted!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment