Let GenTreeCopyOrReload handle scenarios when FEATURE_MULTIREG_RET is disabled (...
authorKunal Pathak <Kunal.Pathak@microsoft.com>
Fri, 24 Feb 2023 14:45:55 +0000 (06:45 -0800)
committerGitHub <noreply@github.com>
Fri, 24 Feb 2023 14:45:55 +0000 (06:45 -0800)
* remove FEATURE_MULTIREG_RET check

* Remove comments

* updated comment

src/coreclr/jit/gentree.cpp
src/coreclr/jit/gentree.h

index d3940c1..1b25efb 100644 (file)
@@ -976,12 +976,12 @@ bool GenTree::IsMultiRegNode() const
         return AsMultiRegOp()->GetRegCount() > 1;
     }
 #endif
+#endif // FEATURE_MULTIREG_RET
 
     if (OperIs(GT_COPY, GT_RELOAD))
     {
         return true;
     }
-#endif // FEATURE_MULTIREG_RET
 
 #ifdef FEATURE_HW_INTRINSICS
     if (OperIsHWIntrinsic())
@@ -1027,12 +1027,12 @@ unsigned GenTree::GetMultiRegCount(Compiler* comp) const
         return AsMultiRegOp()->GetRegCount();
     }
 #endif
+#endif // FEATURE_MULTIREG_RET
 
     if (OperIs(GT_COPY, GT_RELOAD))
     {
         return AsCopyOrReload()->GetRegCount();
     }
-#endif // FEATURE_MULTIREG_RET
 
 #ifdef FEATURE_HW_INTRINSICS
     if (OperIsHWIntrinsic())
@@ -11707,7 +11707,8 @@ void Compiler::gtDispLeaf(GenTree* tree, IndentStack* indentStack)
                             fieldVarDsc->PrintVarReg();
                         }
 
-                        if (fieldVarDsc->lvTracked && fgLocalVarLivenessDone && tree->AsLclVar()->IsLastUse(index))
+                        if (fieldVarDsc->lvTracked && fgLocalVarLivenessDone &&
+                            tree->AsLclVarCommon()->IsLastUse(index))
                         {
                             printf(" (last use)");
                         }
index 6a8209f..bf24197 100644 (file)
@@ -8051,18 +8051,14 @@ struct GenTreePutArgSplit : public GenTreePutArgStk
 
 // Represents GT_COPY or GT_RELOAD node
 //
-// As it turns out, these are only needed on targets that happen to have multi-reg returns.
-// However, they are actually needed on any target that has any multi-reg ops. It is just
-// coincidence that those are the same (and there isn't a FEATURE_MULTIREG_OPS).
+// Needed to support multi-reg ops.
 //
 struct GenTreeCopyOrReload : public GenTreeUnOp
 {
-#if FEATURE_MULTIREG_RET
     // State required to support copy/reload of a multi-reg call node.
     // The first register is always given by GetRegNum().
     //
     regNumberSmall gtOtherRegs[MAX_MULTIREG_COUNT - 1];
-#endif
 
     //----------------------------------------------------------
     // ClearOtherRegs: set gtOtherRegs to REG_NA.
@@ -8075,12 +8071,10 @@ struct GenTreeCopyOrReload : public GenTreeUnOp
     //
     void ClearOtherRegs()
     {
-#if FEATURE_MULTIREG_RET
         for (unsigned i = 0; i < MAX_MULTIREG_COUNT - 1; ++i)
         {
             gtOtherRegs[i] = REG_NA;
         }
-#endif
     }
 
     //-----------------------------------------------------------
@@ -8101,11 +8095,7 @@ struct GenTreeCopyOrReload : public GenTreeUnOp
             return GetRegNum();
         }
 
-#if FEATURE_MULTIREG_RET
         return (regNumber)gtOtherRegs[idx - 1];
-#else
-        return REG_NA;
-#endif
     }
 
     //-----------------------------------------------------------
@@ -8126,18 +8116,11 @@ struct GenTreeCopyOrReload : public GenTreeUnOp
         {
             SetRegNum(reg);
         }
-#if FEATURE_MULTIREG_RET
         else
         {
             gtOtherRegs[idx - 1] = (regNumberSmall)reg;
             assert(gtOtherRegs[idx - 1] == reg);
         }
-#else
-        else
-        {
-            unreached();
-        }
-#endif
     }
 
     //----------------------------------------------------------------------------
@@ -8166,7 +8149,6 @@ struct GenTreeCopyOrReload : public GenTreeUnOp
 
     unsigned GetRegCount() const
     {
-#if FEATURE_MULTIREG_RET
         // We need to return the highest index for which we have a valid register.
         // Note that the gtOtherRegs array is off by one (the 0th register is GetRegNum()).
         // If there's no valid register in gtOtherRegs, GetRegNum() must be valid.
@@ -8181,7 +8163,7 @@ struct GenTreeCopyOrReload : public GenTreeUnOp
                 return i;
             }
         }
-#endif
+
         // We should never have a COPY or RELOAD with no valid registers.
         assert(GetRegNum() != REG_NA);
         return 1;
@@ -9127,12 +9109,12 @@ inline regNumber GenTree::GetRegByIndex(int regIndex) const
         return AsMultiRegOp()->GetRegNumByIdx(regIndex);
     }
 #endif
+#endif // FEATURE_MULTIREG_RET
 
     if (OperIs(GT_COPY, GT_RELOAD))
     {
         return AsCopyOrReload()->GetRegNumByIdx(regIndex);
     }
-#endif // FEATURE_MULTIREG_RET
 
 #ifdef FEATURE_HW_INTRINSICS
     if (OperIs(GT_HWINTRINSIC))