[interp] Add a few super instructions (#50361)
authorVlad Brezae <brezaevlad@gmail.com>
Tue, 30 Mar 2021 11:23:03 +0000 (14:23 +0300)
committerGitHub <noreply@github.com>
Tue, 30 Mar 2021 11:23:03 +0000 (14:23 +0300)
commitddb88a44049d2b8b3bed39431729fcd67d4ca789
tree7308668e9502b423bc0f71aa3a8d759d3736b283
parent75d8aaed9dcdc2b118c78c45d35c479bde444090
[interp] Add a few super instructions (#50361)

* [interp] Fix PROFILE_INTERP build

* [interp] Add ldc.i8.0 opcode, replacing ldnull on 64bit

We still need to use this opcode in more places, instead of the generic ldc.i8

* [interp] Add a few super instructions

We depend on the cprop pass to init local_ref_count. We only add a super instruction if the definition of the an intermediary result is done in the same basic block (the dreg is local var) and it is not used anywhere else, otherwise we can't clear the instruction.

* [interp] Improve the marvin block intrinsic

By removing also 2 additional ldloca instructions, and enabling cprop for these vars that no longer have their address taken.
src/mono/mono/mini/interp/interp.c
src/mono/mono/mini/interp/mintops.def
src/mono/mono/mini/interp/mintops.h
src/mono/mono/mini/interp/transform.c
src/mono/mono/mini/interp/transform.h