diff options
author | Carol Eidt <carol.eidt@microsoft.com> | 2017-12-19 15:34:37 -0800 |
---|---|---|
committer | Carol Eidt <carol.eidt@microsoft.com> | 2017-12-19 15:34:37 -0800 |
commit | f55e568162507ff8bea14e749eb6168c026e8c95 (patch) | |
tree | c4c199065ead83f4f0f9fb7fd9396b1e8d95fe20 | |
parent | 4157555a94ee1d0fe9831bef12d39fed1ac7d1cf (diff) | |
download | coreclr-f55e568162507ff8bea14e749eb6168c026e8c95.tar.gz coreclr-f55e568162507ff8bea14e749eb6168c026e8c95.tar.bz2 coreclr-f55e568162507ff8bea14e749eb6168c026e8c95.zip |
Fix for armel double passed as long
-rw-r--r-- | src/jit/lsra.cpp | 2 | ||||
-rw-r--r-- | src/jit/lsraarm.cpp | 1 | ||||
-rw-r--r-- | src/jit/lsraarmarch.cpp | 5 |
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_ |