[llvm] [llvm] Make use of `llvm::reverse_conditionally()` in a few places (NFCI) (PR #171150)

via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 8 07:45:40 PST 2025


llvmbot wrote:


<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-llvm-mc

Author: Benjamin Maxwell (MacDue)

<details>
<summary>Changes</summary>



---
Full diff: https://github.com/llvm/llvm-project/pull/171150.diff


3 Files Affected:

- (modified) llvm/lib/CodeGen/PrologEpilogInserter.cpp (+10-21) 
- (modified) llvm/lib/CodeGen/RegisterClassInfo.cpp (+1-6) 
- (modified) llvm/lib/MC/MCWin64EH.cpp (+5-12) 


``````````diff
diff --git a/llvm/lib/CodeGen/PrologEpilogInserter.cpp b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
index 510faa3f56f3e..44cfaef944da7 100644
--- a/llvm/lib/CodeGen/PrologEpilogInserter.cpp
+++ b/llvm/lib/CodeGen/PrologEpilogInserter.cpp
@@ -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 : reverse_conditionally(AllFIs, /*Reverse=*/!StackGrowsDown)) {
+    // Only allocate objects on the default stack.
+    if (!MFI.isCalleeSavedObjectIndex(FI) ||
+        MFI.getStackID(FI) != TargetStackID::Default)
+      continue;
 
-      if (MFI.isDeadObjectIndex(FI))
-        continue;
+    // TODO: should this just be if (MFI.isDeadObjectIndex(FI))
+    if (!StackGrowsDown && MFI.isDeadObjectIndex(FI))
+      continue;
 
-      AdjustStackOffset(MFI, FI, StackGrowsDown, Offset, MaxAlign);
-    }
+    AdjustStackOffset(MFI, FI, StackGrowsDown, Offset, MaxAlign);
   }
 
   assert(MaxAlign == MFI.getMaxAlign() &&
diff --git a/llvm/lib/CodeGen/RegisterClassInfo.cpp b/llvm/lib/CodeGen/RegisterClassInfo.cpp
index bbeb7adae825c..e6fd10a38da7c 100644
--- a/llvm/lib/CodeGen/RegisterClassInfo.cpp
+++ b/llvm/lib/CodeGen/RegisterClassInfo.cpp
@@ -145,12 +145,7 @@ void RegisterClassInfo::compute(const TargetRegisterClass *RC) const {
   // FIXME: Once targets reserve registers instead of removing them from the
   // allocation order, we can simply use begin/end here.
   ArrayRef<MCPhysReg> RawOrder = RC->getRawAllocationOrder(*MF, Reverse);
-  std::vector<MCPhysReg> ReverseOrder;
-  if (Reverse) {
-    llvm::append_range(ReverseOrder, reverse(RawOrder));
-    RawOrder = ArrayRef<MCPhysReg>(ReverseOrder);
-  }
-  for (unsigned PhysReg : RawOrder) {
+  for (unsigned PhysReg : reverse_conditionally(RawOrder, Reverse)) {
     // Remove reserved registers from the allocation order.
     if (Reserved.test(PhysReg))
       continue;
diff --git a/llvm/lib/MC/MCWin64EH.cpp b/llvm/lib/MC/MCWin64EH.cpp
index 6835ba73ffab8..7a4b07991c674 100644
--- a/llvm/lib/MC/MCWin64EH.cpp
+++ b/llvm/lib/MC/MCWin64EH.cpp
@@ -887,7 +887,11 @@ static void simplifyARM64Opcodes(std::vector<WinEH::Instruction> &Instructions,
   unsigned PrevOffset = -1;
   unsigned PrevRegister = -1;
 
-  auto VisitInstruction = [&](WinEH::Instruction &Inst) {
+  // Iterate over instructions in a forward order (for prologues),
+  // backwards for epilogues (i.e. always reverse compared to how the
+  // opcodes are stored).
+  for (WinEH::Instruction &Inst :
+       llvm::reverse_conditionally(Instructions, Reverse)) {
     // Convert 2-byte opcodes into equivalent 1-byte ones.
     if (Inst.Operation == Win64EH::UOP_SaveRegP && Inst.Register == 29) {
       Inst.Operation = Win64EH::UOP_SaveFPLR;
@@ -930,17 +934,6 @@ static void simplifyARM64Opcodes(std::vector<WinEH::Instruction> &Instructions,
       PrevRegister = -1;
       PrevOffset = -1;
     }
-  };
-
-  // Iterate over instructions in a forward order (for prologues),
-  // backwards for epilogues (i.e. always reverse compared to how the
-  // opcodes are stored).
-  if (Reverse) {
-    for (auto It = Instructions.rbegin(); It != Instructions.rend(); It++)
-      VisitInstruction(*It);
-  } else {
-    for (WinEH::Instruction &Inst : Instructions)
-      VisitInstruction(Inst);
   }
 }
 

``````````

</details>


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


More information about the llvm-commits mailing list