summaryrefslogtreecommitdiff
path: root/src/jit/lsra.cpp
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2018-03-26 13:33:28 -0700
committerCarol Eidt <carol.eidt@microsoft.com>2018-03-26 13:33:28 -0700
commit26c5dcb837fc7b5f629c7b34be5e127d1bac1539 (patch)
tree034ff9e449c9a20ca603fe7cb38bd8f74e2fff36 /src/jit/lsra.cpp
parent240ea0c7feecd8325af704be18022eb9c3b6b2f9 (diff)
downloadcoreclr-26c5dcb837fc7b5f629c7b34be5e127d1bac1539.tar.gz
coreclr-26c5dcb837fc7b5f629c7b34be5e127d1bac1539.tar.bz2
coreclr-26c5dcb837fc7b5f629c7b34be5e127d1bac1539.zip
Fix condition
Diffstat (limited to 'src/jit/lsra.cpp')
-rw-r--r--src/jit/lsra.cpp18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/jit/lsra.cpp b/src/jit/lsra.cpp
index 8bf17effe8..7cdcb8ee62 100644
--- a/src/jit/lsra.cpp
+++ b/src/jit/lsra.cpp
@@ -8282,9 +8282,23 @@ void LinearScan::resolveEdge(BasicBlock* fromBlock,
{
// We may have freed up the other half of a double where the lower half
// was already free.
- regNumber lowerHalfReg = REG_PREV(fromReg);
- if (location[lowerHalfReg] == REG_NA)
+ regNumber lowerHalfReg = REG_PREV(fromReg);
+ regNumber lowerHalfSrcReg = (regNumber)source[lowerHalfReg];
+ regNumber lowerHalfSrcLoc = (regNumber)location[lowerHalfReg];
+ // Necessary conditions:
+ // - There is a source register for this reg (lowerHalfSrcReg != REG_NA)
+ // - It is currently free (lowerHalfSrcLoc == REG_NA)
+ // - The source interval isn't yet completed (sourceIntervals[lowerHalfSrcReg] != nullptr)
+ // - It's not in the ready set ((targetRegsReady & genRegMask(lowerHalfReg)) ==
+ // RBM_NONE)
+ //
+ if ((lowerHalfSrcReg != REG_NA) && (lowerHalfSrcLoc == REG_NA) &&
+ (sourceIntervals[lowerHalfSrcReg] != nullptr) &&
+ ((targetRegsReady & genRegMask(lowerHalfReg)) == RBM_NONE))
{
+ // This must be a double interval, otherwise it would be in targetRegsReady, or already
+ // completed.
+ assert(sourceIntervals[lowerHalfSrcReg]->registerType == TYP_DOUBLE);
targetRegsReady |= genRegMask(lowerHalfReg);
}
#endif // _TARGET_ARM_