diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2016-11-09 09:09:49 -0800 |
---|---|---|
committer | Carol Eidt <carol.eidt@microsoft.com> | 2016-11-18 15:32:24 -0800 |
commit | aa676e8b01b29942e82c58011b0e183f923ff2bc (patch) | |
tree | 7b5cc4342c35545c2de6d4c5374fd0b3d06b8a72 /src/jit/gtlist.h | |
parent | f4b527dfb2ed02e268e4f1d5318fa79053ede064 (diff) | |
download | coreclr-aa676e8b01b29942e82c58011b0e183f923ff2bc.tar.gz coreclr-aa676e8b01b29942e82c58011b0e183f923ff2bc.tar.bz2 coreclr-aa676e8b01b29942e82c58011b0e183f923ff2bc.zip |
Reinstate the struct optimization changes:
Remove many of the restrictions on structs that were added to preserve behavior of the old IR form.
Change the init block representation to not require changing the parent when a copy block is changed to an init.
In addition, fix the bug that was causing the corefx ValueTuple tests to fail. This was a bug in assertion prop where it was not invaliding the assertions about the parent struct when a field is modified. Add a repro test case for that bug.
Incorporate the fix to #7954, which was encountered after the earlier version of these changes. This was a case where we reused a struct temp, and then it wound up eventually getting assigned the value it originally contained, so we had V09 = V09. This hit the assert in liveness where it wasn't expecting to find a struct assignment with the same lclVar on the lhs and rhs. This assert should have been eliminated with the IR change to struct assignments, but when this situation arises we may run into issues if we call a helper that doesn't expect the lhs and rhs to be the same. So, change morph to eliminate such assignments.
Diffstat (limited to 'src/jit/gtlist.h')
-rw-r--r-- | src/jit/gtlist.h | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/src/jit/gtlist.h b/src/jit/gtlist.h index a330a6bb37..92265a7359 100644 --- a/src/jit/gtlist.h +++ b/src/jit/gtlist.h @@ -93,6 +93,8 @@ GTNODE(SIMD_CHK , "simdChk" ,GenTreeBoundsChk ,0,GTK_SPECIAL|GTK_ GTNODE(ALLOCOBJ , "allocObj" ,GenTreeAllocObj ,0,GTK_UNOP|GTK_EXOP) // object allocator +GTNODE(INIT_VAL , "initVal" ,GenTreeOp ,0,GTK_UNOP) // Initialization value for an initBlk + //----------------------------------------------------------------------------- // Binary operators (2 operands): //----------------------------------------------------------------------------- |