From cb5114735c241392317316eaf8ba6d499e475a8a Mon Sep 17 00:00:00 2001 From: Hyung-Kyu Choi Date: Thu, 8 Jun 2017 19:21:35 +0900 Subject: [PATCH] [RyuJIT/ARM32] Clear assigned interval of double register Clear assigned interval of double register properly Signed-off-by: Hyung-Kyu Choi Commit migrated from https://github.com/dotnet/coreclr/commit/fc3492a8a831e768ff6a6de9ae41b977ac6d4fbc --- src/coreclr/src/jit/lsra.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/coreclr/src/jit/lsra.cpp b/src/coreclr/src/jit/lsra.cpp index 319195e..d7d97a7 100644 --- a/src/coreclr/src/jit/lsra.cpp +++ b/src/coreclr/src/jit/lsra.cpp @@ -7006,7 +7006,8 @@ void LinearScan::processBlockStartLocations(BasicBlock* currentBlock, bool alloc if (assignedInterval != nullptr) { #ifdef _TARGET_ARM_ - if (assignedInterval->assignedReg == targetRegRecord || isSecondHalfReg(targetRegRecord, assignedInterval)) + if (assignedInterval->assignedReg == targetRegRecord || + isSecondHalfReg(targetRegRecord, assignedInterval)) #else if (assignedInterval->assignedReg == targetRegRecord) #endif @@ -7028,6 +7029,13 @@ void LinearScan::processBlockStartLocations(BasicBlock* currentBlock, bool alloc { // This interval is no longer assigned to this register. targetRegRecord->assignedInterval = nullptr; +#ifdef _TARGET_ARM_ + if (assignedInterval->registerType == TYP_DOUBLE) + { + RegRecord* anotherHalfRegRec = findAnotherHalfRegRec(targetRegRecord); + anotherHalfRegRec->assignedInterval = nullptr; + } +#endif } } assignPhysReg(targetRegRecord, interval); -- 2.7.4