diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2017-10-04 17:42:07 -0700 |
---|---|---|
committer | Carol Eidt <carol.eidt@microsoft.com> | 2017-10-11 11:13:15 -0700 |
commit | 3da20a179409f6232d9844f1525f45d01c14aaa1 (patch) | |
tree | 934ec47fe75eb6dbd046ef2b9438a2a3b6c439c7 /src/jit/lsraarmarch.cpp | |
parent | 65738239e7a50615d0fc50dcbe5b1b6086f96ef2 (diff) | |
download | coreclr-3da20a179409f6232d9844f1525f45d01c14aaa1.tar.gz coreclr-3da20a179409f6232d9844f1525f45d01c14aaa1.tar.bz2 coreclr-3da20a179409f6232d9844f1525f45d01c14aaa1.zip |
Cleanup of Lowering & LsraInfo
These are preparatory changes for eliminating gtLsraInfo.
Register requirements should never be set on contained nodes. This includes setting isDelayFree and restricting to byte registers for x86.
- This results in net positive diffs for the framework (eliminating incorrect setting of hasDelayFreeSrc), though a net regression for the tests on x86 (including many instances of effectively the same code).
- The regressions are largely related to issue #11274.
Improve consistency of IsValue():
- Any node that can be contained should produce a value, and have a type (e.g. GT_FIELD_LIST).
- Some value nodes (GTK_NOVALUE isn't set) are allowed to have TYP_VOID, in which case IsValue() should return false.
- This simplifies IsValue().
- Any node that can be assigned a register should return true for IsValue() (e.g. GT_LOCKADD).
- PUTARG_STK doesn't produce a value; get type from its operand.
- This requires some fixing up of SIMD12 operands.
- Unused GT_LONG nodes shouldn't define any registers
Eliminate isNoRegCompare, by setting type of JTRUE operand to TYP_VOID
- Set GTF_SET_FLAGS on the operand to ensure it is not eliminated as dead code.
Diffstat (limited to 'src/jit/lsraarmarch.cpp')
-rw-r--r-- | src/jit/lsraarmarch.cpp | 9 |
1 files changed, 1 insertions, 8 deletions
diff --git a/src/jit/lsraarmarch.cpp b/src/jit/lsraarmarch.cpp index 53e223dab6..9351ede35c 100644 --- a/src/jit/lsraarmarch.cpp +++ b/src/jit/lsraarmarch.cpp @@ -92,15 +92,8 @@ void LinearScan::TreeNodeInfoInitCmp(GenTreePtr tree) { TreeNodeInfo* info = &(tree->gtLsraInfo); + assert((info->dstCount == 1) || (tree->TypeGet() == TYP_VOID)); info->srcCount = tree->gtOp.gtOp2->isContained() ? 1 : 2; - if (info->isNoRegCompare) - { - info->dstCount = 0; - } - else - { - assert((info->dstCount == 1) || tree->OperIs(GT_CMP, GT_TEST_EQ, GT_TEST_NE)); - } } void LinearScan::TreeNodeInfoInitGCWriteBarrier(GenTree* tree) |