Enable and use updateAssginedInterval() for all targets
authorHyung-Kyu Choi <hk0110.choi@samsung.com>
Wed, 21 Jun 2017 03:06:19 +0000 (12:06 +0900)
committerHyung-Kyu Choi <hk0110.choi@samsung.com>
Wed, 21 Jun 2017 04:12:48 +0000 (13:12 +0900)
Signed-off-by: Hyung-Kyu Choi <hk0110.choi@samsung.com>
Commit migrated from https://github.com/dotnet/coreclr/commit/6dd3d4c991544d02ac88817d745125b84e69598c

src/coreclr/src/jit/lsra.cpp
src/coreclr/src/jit/lsra.h

index 16672cc..b6117d2 100644 (file)
@@ -7031,12 +7031,8 @@ void LinearScan::processBlockStartLocations(BasicBlock* currentBlock, bool alloc
                     }
                     else
                     {
-// This interval is no longer assigned to this register.
-#ifdef _TARGET_ARM_
+                        // This interval is no longer assigned to this register.
                         updateAssignedInterval(targetRegRecord, nullptr, assignedInterval->registerType);
-#else
-                        targetRegRecord->assignedInterval = nullptr;
-#endif
                     }
                 }
                 assignPhysReg(targetRegRecord, interval);
@@ -8027,11 +8023,8 @@ void LinearScan::allocateRegisters()
 #endif // DEBUG
 }
 
-#ifdef _TARGET_ARM_
 //-----------------------------------------------------------------------------
-// updateAssignedInterval: Update assigned interval of register for ARM32
-// considering register type. When register type is TYP_DOUBLE, update
-// two float registers consisting a double register.
+// updateAssignedInterval: Update assigned interval of register.
 //
 // Arguments:
 //    reg      -    register to be updated
@@ -8042,13 +8035,18 @@ void LinearScan::allocateRegisters()
 //    None
 //
 // Assumptions:
-//    When "regType" is TYP_DOUBLE, "reg" should be a even-numbered float register,
-//    i.e. lower half of double register.
+//    For ARM32, when "regType" is TYP_DOUBLE, "reg" should be a even-numbered
+//    float register, i.e. lower half of double register.
+//
+// Note:
+//    For ARM32, two float registers consisting a double register are updated
+//    together when "regType" is TYP_DOUBLE.
 //
 void LinearScan::updateAssignedInterval(RegRecord* reg, Interval* interval, RegisterType regType)
 {
     reg->assignedInterval = interval;
 
+#ifdef _TARGET_ARM_
     // Update overlapping floating point register for TYP_DOUBLE
     if (regType == TYP_DOUBLE)
     {
@@ -8058,8 +8056,8 @@ void LinearScan::updateAssignedInterval(RegRecord* reg, Interval* interval, Regi
 
         anotherHalfReg->assignedInterval = interval;
     }
-}
 #endif
+}
 
 // LinearScan::resolveLocalRef
 // Description:
@@ -8136,11 +8134,7 @@ void LinearScan::resolveLocalRef(BasicBlock* block, GenTreePtr treeNode, RefPosi
         varDsc->lvRegNum = REG_STK;
         if (interval->assignedReg != nullptr && interval->assignedReg->assignedInterval == interval)
         {
-#ifdef _TARGET_ARM_
             updateAssignedInterval(interval->assignedReg, nullptr, interval->registerType);
-#else
-            interval->assignedReg->assignedInterval = nullptr;
-#endif
         }
         interval->assignedReg = nullptr;
         interval->physReg     = REG_NA;
@@ -8168,11 +8162,7 @@ void LinearScan::resolveLocalRef(BasicBlock* block, GenTreePtr treeNode, RefPosi
             RegRecord* oldRegRecord = getRegisterRecord(oldAssignedReg);
             if (oldRegRecord->assignedInterval == interval)
             {
-#ifdef _TARGET_ARM_
                 updateAssignedInterval(oldRegRecord, nullptr, interval->registerType);
-#else
-                oldRegRecord->assignedInterval      = nullptr;
-#endif
             }
         }
     }
@@ -8327,22 +8317,14 @@ void LinearScan::resolveLocalRef(BasicBlock* block, GenTreePtr treeNode, RefPosi
         interval->assignedReg = nullptr;
         interval->physReg     = REG_NA;
 
-#ifdef _TARGET_ARM_
         updateAssignedInterval(physRegRecord, nullptr, interval->registerType);
-#else
-        physRegRecord->assignedInterval             = nullptr;
-#endif
     }
     else
     {
         interval->isActive    = true;
         interval->assignedReg = physRegRecord;
 
-#ifdef _TARGET_ARM_
         updateAssignedInterval(physRegRecord, interval, interval->registerType);
-#else
-        physRegRecord->assignedInterval             = interval;
-#endif
     }
 }
 
@@ -10107,7 +10089,7 @@ void LinearScan::resolveEdge(BasicBlock*      fromBlock,
             tempRegFlt = getTempRegForResolution(fromBlock, toBlock, TYP_FLOAT);
         }
 #else
-        tempRegFlt                                  = getTempRegForResolution(fromBlock, toBlock, TYP_FLOAT);
+        tempRegFlt = getTempRegForResolution(fromBlock, toBlock, TYP_FLOAT);
 #endif
     }
 
index bb7b52f..870ddaa 100644 (file)
@@ -697,8 +697,8 @@ private:
 #ifdef _TARGET_ARM_
     bool isSecondHalfReg(RegRecord* regRec, Interval* interval);
     RegRecord* findAnotherHalfRegRec(RegRecord* regRec);
-    void updateAssignedInterval(RegRecord* reg, Interval* interval, RegisterType regType);
 #endif
+    void updateAssignedInterval(RegRecord* reg, Interval* interval, RegisterType regType);
     bool canRestorePreviousInterval(RegRecord* regRec, Interval* assignedInterval);
     bool isAssignedToInterval(Interval* interval, RegRecord* regRec);