summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarol Eidt <carol.eidt@microsoft.com>2017-12-19 15:34:37 -0800
committerCarol Eidt <carol.eidt@microsoft.com>2017-12-19 15:34:37 -0800
commitf55e568162507ff8bea14e749eb6168c026e8c95 (patch)
treec4c199065ead83f4f0f9fb7fd9396b1e8d95fe20
parent4157555a94ee1d0fe9831bef12d39fed1ac7d1cf (diff)
downloadcoreclr-f55e568162507ff8bea14e749eb6168c026e8c95.tar.gz
coreclr-f55e568162507ff8bea14e749eb6168c026e8c95.tar.bz2
coreclr-f55e568162507ff8bea14e749eb6168c026e8c95.zip
Fix for armel double passed as long
-rw-r--r--src/jit/lsra.cpp2
-rw-r--r--src/jit/lsraarm.cpp1
-rw-r--r--src/jit/lsraarmarch.cpp5
3 files changed, 5 insertions, 3 deletions
diff --git a/src/jit/lsra.cpp b/src/jit/lsra.cpp
index 58ea6ae390..e943bc99f0 100644
--- a/src/jit/lsra.cpp
+++ b/src/jit/lsra.cpp
@@ -3998,7 +3998,7 @@ void LinearScan::buildRefPositionsForNode(GenTree* tree,
{
// This is the 2nd or subsequent register defined by a multi-reg node.
// Connect them using 'relatedInterval'.
- noway_assert((prevInterval != nullptr) && (prevInterval->relatedInterval == nullptr));
+ noway_assert(prevInterval != nullptr);
prevInterval->relatedInterval = interval;
prevInterval = interval;
prevInterval->isMultiReg = true;
diff --git a/src/jit/lsraarm.cpp b/src/jit/lsraarm.cpp
index eabb7cadf5..081415e9f2 100644
--- a/src/jit/lsraarm.cpp
+++ b/src/jit/lsraarm.cpp
@@ -767,7 +767,6 @@ void LinearScan::TreeNodeInfoInit(GenTree* tree, TreeNodeInfo* info)
info->srcCount = 1;
assert(info->dstCount == 1);
LocationInfoListNode* locationInfo = getLocationInfo(tree->gtOp.gtOp1);
- locationInfo->info.isTgtPref = true;
useList.Append(locationInfo);
regNumber argReg = tree->gtRegNum;
regMaskTP argMask = genRegMask(argReg);
diff --git a/src/jit/lsraarmarch.cpp b/src/jit/lsraarmarch.cpp
index e0bbbb1bce..17b1958a24 100644
--- a/src/jit/lsraarmarch.cpp
+++ b/src/jit/lsraarmarch.cpp
@@ -555,9 +555,12 @@ void LinearScan::TreeNodeInfoInitCall(GenTreeCall* call, TreeNodeInfo* info)
#ifdef _TARGET_ARM_
// The `double` types have been transformed to `long` on armel,
// while the actual long types have been decomposed.
+ // On ARM we may have bitcasts from DOUBLE to LONG.
if (argNode->TypeGet() == TYP_LONG)
{
- info->srcCount += appendBinaryLocationInfoToList(argNode->AsOp());
+ assert(argNode->IsMultiRegNode());
+ info->srcCount += 2;
+ appendLocationInfoToList(argNode);
}
else
#endif // _TARGET_ARM_