[llvm] [ADT] Add `llvm::conditionally_reverse()` iterator (PR #171040)

Jakub Kuderski via llvm-commits llvm-commits at lists.llvm.org
Sun Dec 7 10:51:20 PST 2025


================
@@ -911,29 +911,18 @@ void PEIImpl::calculateFrameObjectOffsets(MachineFunction &MF) {
   Align MaxAlign = MFI.getMaxAlign();
   // First assign frame offsets to stack objects that are used to spill
   // callee saved registers.
-  if (StackGrowsDown) {
-    for (int FI = MFI.getObjectIndexBegin(); FI < MFI.getObjectIndexEnd();
-         FI++) {
-      // Only allocate objects on the default stack.
-      if (!MFI.isCalleeSavedObjectIndex(FI) ||
-          MFI.getStackID(FI) != TargetStackID::Default)
-        continue;
-      // TODO: should we be using MFI.isDeadObjectIndex(FI) here?
-      AdjustStackOffset(MFI, FI, StackGrowsDown, Offset, MaxAlign);
-    }
-  } else {
-    for (int FI = MFI.getObjectIndexEnd() - 1; FI >= MFI.getObjectIndexBegin();
-         FI--) {
-      // Only allocate objects on the default stack.
-      if (!MFI.isCalleeSavedObjectIndex(FI) ||
-          MFI.getStackID(FI) != TargetStackID::Default)
-        continue;
+  auto AllFIs = seq(MFI.getObjectIndexBegin(), MFI.getObjectIndexEnd());
+  for (int FI : conditionally_reverse(AllFIs, /*Reverse=*/!StackGrowsDown)) {
+    // Only allocate objects on the default stack.
+    if (!MFI.isCalleeSavedObjectIndex(FI) ||
+        MFI.getStackID(FI) != TargetStackID::Default)
----------------
kuhar wrote:

Can you introduce the uses in a follow up PR? This is to make reverts less disruptive

https://github.com/llvm/llvm-project/pull/171040


More information about the llvm-commits mailing list