static void emit_cond_system_exception (EmitContext *ctx, MonoBasicBlock *bb, const char *exc_type, LLVMValueRef cmp);
static LLVMValueRef get_intrins_by_name (EmitContext *ctx, const char *name);
static LLVMValueRef get_intrins (EmitContext *ctx, int id);
-static LLVMValueRef get_intrins_from_module (MonoLLVMModule *module, int id);
+static LLVMValueRef get_intrins_from_module (LLVMModuleRef lmodule, int id);
static void llvm_jit_finalize_method (EmitContext *ctx);
static void mono_llvm_nonnull_state_update (EmitContext *ctx, LLVMValueRef lcall, MonoMethod *call_method, LLVMValueRef *args, int num_params);
static void mono_llvm_propagate_nonnull_final (GHashTable *all_specializable, MonoLLVMModule *module);
cmp = LLVMBuildICmp (builder, LLVMIntEQ, val, LLVMConstNull (LLVMTypeOf (val)), "");
args [0] = cmp;
args [1] = LLVMConstInt (LLVMInt1Type (), 1, FALSE);
- cmp = LLVMBuildCall (builder, get_intrins_from_module (module, INTRINS_EXPECT_I1), args, 2, "");
+ cmp = LLVMBuildCall (builder, get_intrins_from_module (module->lmodule, INTRINS_EXPECT_I1), args, 2, "");
LLVMBuildCondBr (builder, cmp, exit_bb, poll_bb);
/* poll: */
ctx->lmodule = ctx->module->lmodule;
} else {
ctx->lmodule = LLVMModuleCreateWithName (g_strdup_printf ("jit-module-%s", cfg->method->name));
- ctx->module->lmodule = ctx->lmodule;
+ /* Reset this as it contains values from lmodule */
+ memset (ctx->module->intrins_by_id, 0, sizeof (LLVMValueRef) * INTRINS_NUM);
}
ctx->llvm_only = ctx->module->llvm_only;
#ifdef TARGET_WASM
}
static LLVMValueRef
-get_intrins_from_module (MonoLLVMModule *module, int id)
+get_intrins_from_module (LLVMModuleRef lmodule, int id)
{
+ LLVMValueRef res;
+
const char *name = (const char*)g_hash_table_lookup (intrins_id_to_name, GINT_TO_POINTER (id));
g_assert (name);
+ res = LLVMGetNamedFunction (lmodule, name);
+ if (!res) {
+ add_intrinsic (lmodule, id);
+ res = LLVMGetNamedFunction (lmodule, name);
+ g_assert (res);
+ }
+ return res;
+}
+
+static LLVMValueRef
+get_intrins (EmitContext *ctx, int id)
+{
+ MonoLLVMModule *module = ctx->module;
LLVMValueRef res;
/*
*/
res = module->intrins_by_id [id];
if (!res) {
- res = LLVMGetNamedFunction (module->lmodule, name);
- if (!res) {
- add_intrinsic (module->lmodule, id);
- res = LLVMGetNamedFunction (module->lmodule, name);
- g_assert (res);
- }
+ res = get_intrins_from_module (ctx->lmodule, id);
module->intrins_by_id [id] = res;
}
return res;
}
static LLVMValueRef
-get_intrins (EmitContext *ctx, int id)
-{
- return get_intrins_from_module (ctx->module, id);
-}
-
-static LLVMValueRef
get_intrins_by_name (EmitContext *ctx, const char *name)
{
LLVMValueRef res;