[runtime] Call error_init instead of mono_error_init (#4425)
[mono.git] / mono / mini / mini.c
index 88dc3a514c77e8bdcfe967f706e57563530e44bd..807cd5dd470cf7a2c230ede0b523020e1131d380 100644 (file)
@@ -60,7 +60,6 @@
 #include <mono/utils/dtrace.h>
 #include <mono/utils/mono-threads.h>
 #include <mono/utils/mono-threads-coop.h>
-#include <mono/io-layer/io-layer.h>
 
 #include "mini.h"
 #include "seq-points.h"
@@ -146,12 +145,6 @@ mono_emit_unwind_op (MonoCompile *cfg, int when, int tag, int reg, int val)
        }
 }
 
-#define MONO_INIT_VARINFO(vi,id) do { \
-       (vi)->range.first_use.pos.bid = 0xffff; \
-       (vi)->reg = -1; \
-        (vi)->idx = (id); \
-} while (0)
-
 /**
  * mono_unlink_bblock:
  *
@@ -681,8 +674,10 @@ mono_compile_create_var_for_vreg (MonoCompile *cfg, MonoType *type, int opcode,
        
        cfg->varinfo [num] = inst;
 
-       MONO_INIT_VARINFO (&cfg->vars [num], num);
-       MONO_VARINFO (cfg, num)->vreg = vreg;
+       cfg->vars [num].idx = num;
+       cfg->vars [num].vreg = vreg;
+       cfg->vars [num].range.first_use.pos.bid = 0xffff;
+       cfg->vars [num].reg = -1;
 
        if (vreg != -1)
                set_vreg_to_inst (cfg, vreg, inst);
@@ -3241,7 +3236,7 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl
 
        if (cfg->gen_seq_points)
                cfg->seq_points = g_ptr_array_new ();
-       mono_error_init (&cfg->error);
+       error_init (&cfg->error);
 
        if (cfg->compile_aot && !try_generic_shared && (method->is_generic || mono_class_is_gtd (method->klass) || method_is_gshared)) {
                cfg->exception_type = MONO_EXCEPTION_GENERIC_SHARING_FAILED;
@@ -3283,7 +3278,7 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl
        }
        cfg->method_to_register = method_to_register;
 
-       mono_error_init (&err);
+       error_init (&err);
        sig = mono_method_signature_checked (cfg->method, &err);        
        if (!sig) {
                cfg->exception_type = MONO_EXCEPTION_TYPE_LOAD;
@@ -3609,6 +3604,10 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl
                cfg->disable_ssa = TRUE;
        }
 
+       if (cfg->num_varinfo > 10000 && !cfg->llvm_only)
+               /* Disable llvm for overly complex methods */
+               cfg->disable_ssa = TRUE;
+
        if (cfg->opt & MONO_OPT_LOOP) {
                MONO_TIME_TRACK (mono_jit_stats.jit_compile_dominator_info, mono_compile_dominator_info (cfg, MONO_COMP_DOM | MONO_COMP_IDOM));
                MONO_TIME_TRACK (mono_jit_stats.jit_compute_natural_loops, mono_compute_natural_loops (cfg));
@@ -3895,7 +3894,7 @@ mini_method_compile (MonoMethod *method, guint32 opts, MonoDomain *domain, JitFl
                g_free (id);
        }
 
-       if (!cfg->compile_aot) {
+       if (!cfg->compile_aot && !(flags & JIT_FLAG_DISCARD_RESULTS)) {
                mono_domain_lock (cfg->domain);
                mono_jit_info_table_add (cfg->domain, cfg->jit_info);
 
@@ -4067,7 +4066,7 @@ mono_jit_compile_method_inner (MonoMethod *method, MonoDomain *target_domain, in
        GTimer *jit_timer;
        MonoMethod *prof_method, *shared;
 
-       mono_error_init (error);
+       error_init (error);
 
        if ((method->iflags & METHOD_IMPL_ATTRIBUTE_INTERNAL_CALL) ||
            (method->flags & METHOD_ATTRIBUTE_PINVOKE_IMPL)) {