X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fmini%2Fmini-llvm.c;h=189cdb6b43809a660b6304a8dbf4cac1bfa8b835;hb=64c693851228345fcd6b3df03f7c25845d2820b5;hp=bc7b1765b71905c6bc162749d11c927f4618ff05;hpb=725892b35c29fe919d6e58305ac241f6cbd01018;p=mono.git diff --git a/mono/mini/mini-llvm.c b/mono/mini/mini-llvm.c index bc7b1765b71..189cdb6b438 100644 --- a/mono/mini/mini-llvm.c +++ b/mono/mini/mini-llvm.c @@ -1590,18 +1590,17 @@ get_aotconst_typed (EmitContext *ctx, MonoJumpInfoType type, gconstpointer data, MonoCompile *cfg; guint32 got_offset; LLVMValueRef indexes [2]; - MonoJumpInfo *ji; LLVMValueRef got_entry_addr, load; LLVMBuilderRef builder = ctx->builder; char *name = NULL; cfg = ctx->cfg; - ji = g_new0 (MonoJumpInfo, 1); - ji->type = type; - ji->data.target = data; + MonoJumpInfo tmp_ji; + tmp_ji.type = type; + tmp_ji.data.target = data; - ji = mono_aot_patch_info_dup (ji); + MonoJumpInfo *ji = mono_aot_patch_info_dup (&tmp_ji); ji->next = cfg->patch_info; cfg->patch_info = ji; @@ -2423,7 +2422,7 @@ emit_get_method (MonoLLVMModule *module) LLVMBasicBlockRef entry_bb, fail_bb, bb, code_start_bb, code_end_bb; LLVMBasicBlockRef *bbs; LLVMTypeRef rtype; - LLVMBuilderRef builder; + LLVMBuilderRef builder = LLVMCreateBuilder (); char *name; int i; @@ -2449,14 +2448,12 @@ emit_get_method (MonoLLVMModule *module) name = g_strdup_printf ("BB_CODE_START"); code_start_bb = LLVMAppendBasicBlock (func, name); g_free (name); - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, code_start_bb); LLVMBuildRet (builder, LLVMBuildBitCast (builder, module->code_start, rtype, "")); name = g_strdup_printf ("BB_CODE_END"); code_end_bb = LLVMAppendBasicBlock (func, name); g_free (name); - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, code_end_bb); LLVMBuildRet (builder, LLVMBuildBitCast (builder, module->code_end, rtype, "")); @@ -2467,7 +2464,6 @@ emit_get_method (MonoLLVMModule *module) g_free (name); bbs [i] = bb; - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, bb); m = (LLVMValueRef)g_hash_table_lookup (module->idx_to_lmethod, GINT_TO_POINTER (i)); @@ -2478,11 +2474,9 @@ emit_get_method (MonoLLVMModule *module) } fail_bb = LLVMAppendBasicBlock (func, "FAIL"); - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, fail_bb); LLVMBuildRet (builder, LLVMConstNull (rtype)); - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, entry_bb); switch_ins = LLVMBuildSwitch (builder, LLVMGetParam (func, 0), fail_bb, 0); @@ -2493,6 +2487,8 @@ emit_get_method (MonoLLVMModule *module) } mark_as_used (module, func); + + LLVMDisposeBuilder (builder); } /* @@ -2508,7 +2504,7 @@ emit_get_unbox_tramp (MonoLLVMModule *module) LLVMBasicBlockRef entry_bb, fail_bb, bb; LLVMBasicBlockRef *bbs; LLVMTypeRef rtype; - LLVMBuilderRef builder; + LLVMBuilderRef builder = LLVMCreateBuilder (); char *name; int i; @@ -2534,18 +2530,15 @@ emit_get_unbox_tramp (MonoLLVMModule *module) g_free (name); bbs [i] = bb; - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, bb); LLVMBuildRet (builder, LLVMBuildBitCast (builder, m, rtype, "")); } fail_bb = LLVMAppendBasicBlock (func, "FAIL"); - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, fail_bb); LLVMBuildRet (builder, LLVMConstNull (rtype)); - builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, entry_bb); switch_ins = LLVMBuildSwitch (builder, LLVMGetParam (func, 0), fail_bb, 0); @@ -2558,6 +2551,7 @@ emit_get_unbox_tramp (MonoLLVMModule *module) } mark_as_used (module, func); + LLVMDisposeBuilder (builder); } /* Add a function to mark the beginning of LLVM code */ @@ -2577,6 +2571,7 @@ emit_llvm_code_start (MonoLLVMModule *module) builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, entry_bb); LLVMBuildRetVoid (builder); + LLVMDisposeBuilder (builder); } static LLVMValueRef @@ -2650,6 +2645,7 @@ emit_init_icall_wrapper (MonoLLVMModule *module, const char *name, const char *i LLVMBuildRetVoid (builder); LLVMVerifyFunction(func, LLVMAbortProcessAction); + LLVMDisposeBuilder (builder); return func; } @@ -2683,6 +2679,7 @@ emit_llvm_code_end (MonoLLVMModule *module) builder = LLVMCreateBuilder (); LLVMPositionBuilderAtEnd (builder, entry_bb); LLVMBuildRetVoid (builder); + LLVMDisposeBuilder (builder); } static void @@ -2873,6 +2870,7 @@ emit_unbox_tramp (EmitContext *ctx, const char *method_name, LLVMTypeRef method_ LLVMBuildRet (builder, call); g_hash_table_insert (ctx->module->idx_to_unbox_tramp, GINT_TO_POINTER (method_index), tramp); + LLVMDisposeBuilder (builder); } /* @@ -3986,6 +3984,7 @@ emit_handler_start (EmitContext *ctx, MonoBasicBlock *bb, LLVMBuilderRef builder LLVMPositionBuilderAtEnd (builder2, entry_bb); LLVMBuildRet (builder2, LLVMConstInt (LLVMInt32Type (), 0, FALSE)); ctx->module->personality = personality; + LLVMDisposeBuilder (builder2); } #else static gint32 mapping_inited; @@ -6618,6 +6617,14 @@ free_ctx (EmitContext *ctx) g_hash_table_destroy (ctx->region_to_handler); g_hash_table_destroy (ctx->clause_to_handler); g_hash_table_destroy (ctx->jit_callees); + + GHashTableIter iter; + g_hash_table_iter_init (&iter, ctx->method_to_callers); + while (g_hash_table_iter_next (&iter, NULL, &l)) + g_slist_free (l); + + g_hash_table_destroy (ctx->method_to_callers); + g_free (ctx->method_name); g_ptr_array_free (ctx->bblock_list, TRUE);