[interp] Remove unnecessary code (#35952)
authorVlad Brezae <brezaevlad@gmail.com>
Thu, 7 May 2020 15:22:33 +0000 (18:22 +0300)
committerGitHub <noreply@github.com>
Thu, 7 May 2020 15:22:33 +0000 (18:22 +0300)
param_count is always 1 and it doesn't need to be computed at runtime.

src/mono/mono/mini/interp/interp.c
src/mono/mono/mini/interp/mintops.def
src/mono/mono/mini/interp/transform.c

index 46b1664..d2e388d 100644 (file)
@@ -5143,26 +5143,13 @@ call_newobj:
                        MINT_IN_BREAK;
                }
                MINT_IN_CASE(MINT_INTRINS_BYREFERENCE_CTOR) {
-                       MonoMethodSignature *csig;
-                       guint32 token;
-
-                       frame->ip = ip;
-                       token = ip [1];
-                       ip += 2;
-
-                       InterpMethod *cmethod = (InterpMethod*)frame->imethod->data_items [token];
-                       csig = mono_method_signature_internal (cmethod->method);
-
-                       g_assert (csig->hasthis);
-                       sp -= csig->param_count;
-
-                       gpointer arg0 = sp [0].data.p;
-
+                       gpointer arg0 = sp [-1].data.p;
                        gpointer *byreference_this = (gpointer*)vt_sp;
                        *byreference_this = arg0;
 
                        /* Followed by a VTRESULT opcode which will push the result on the stack */
-                       ++sp;
+                       /* FIXME kill MINT_VTRESULT */
+                       ip++;
                        MINT_IN_BREAK;
                }
                MINT_IN_CASE(MINT_INTRINS_BYREFERENCE_GET_VALUE) {
index 15171dc..d3a7a73 100644 (file)
@@ -811,7 +811,7 @@ OPDEF(MINT_PROF_COVERAGE_STORE, "prof_coverage_store", 5, Pop0, Push0, MintOpLon
 OPDEF(MINT_INTRINS_ENUM_HASFLAG, "intrins_enum_hasflag", 2, Pop2, Push1, MintOpClassToken)
 OPDEF(MINT_INTRINS_GET_HASHCODE, "intrins_get_hashcode", 1, Pop1, Push1, MintOpNoArgs)
 OPDEF(MINT_INTRINS_GET_TYPE, "intrins_get_type", 1, Pop1, Push1, MintOpNoArgs)
-OPDEF(MINT_INTRINS_BYREFERENCE_CTOR, "intrins_byreference_ctor", 2, VarPop, Push1, MintOpClassToken)
+OPDEF(MINT_INTRINS_BYREFERENCE_CTOR, "intrins_byreference_ctor", 1, Pop1, Push1, MintOpClassToken)
 OPDEF(MINT_INTRINS_BYREFERENCE_GET_VALUE, "intrins_byreference_get_value", 1, Pop1, Push1, MintOpNoArgs)
 OPDEF(MINT_INTRINS_UNSAFE_ADD_BYTE_OFFSET, "intrins_unsafe_add_byte_offset", 1, Pop2, Push1, MintOpNoArgs)
 OPDEF(MINT_INTRINS_UNSAFE_BYTE_OFFSET, "intrins_unsafe_byte_offset", 1, Pop2, Push1, MintOpNoArgs)
index 412f0ed..c9bf7a6 100644 (file)
@@ -4610,7 +4610,6 @@ generate_code (TransformData *td, MonoMethod *method, MonoMethodHeader *header,
                                        /* public ByReference(ref T value) */
                                        g_assert (csignature->hasthis && csignature->param_count == 1);
                                        interp_add_ins (td, MINT_INTRINS_BYREFERENCE_CTOR);
-                                       td->last_ins->data [0] = get_data_item_index (td, mono_interp_get_imethod (domain, m, error));
                                } else if (klass != mono_defaults.string_class &&
                                                !mono_class_is_marshalbyref (klass) &&
                                                !mono_class_has_finalizer (klass) &&
@@ -6498,12 +6497,6 @@ get_inst_stack_usage (TransformData *td, InterpInst *ins, int *pop, int *push)
                        *push = 1;
                        break;
                }
-               case MINT_INTRINS_BYREFERENCE_CTOR: {
-                       InterpMethod *imethod = (InterpMethod*) td->data_items [ins->data [0]];
-                       *pop = imethod->param_count;
-                       *push = 1;
-                       break;
-               }
                default:
                        g_assert_not_reached ();
                }