[llvm] b1ee4d0 - [RISCV] Refactor some code in RISCVMergeBaseOffset.NFC (#170839)

via llvm-commits llvm-commits at lists.llvm.org
Fri Dec 5 18:08:51 PST 2025


Author: Sudharsan Veeravalli
Date: 2025-12-06T07:38:46+05:30
New Revision: b1ee4d08be7b53eb4676df5833127adbb778a487

URL: https://github.com/llvm/llvm-project/commit/b1ee4d08be7b53eb4676df5833127adbb778a487
DIFF: https://github.com/llvm/llvm-project/commit/b1ee4d08be7b53eb4676df5833127adbb778a487.diff

LOG: [RISCV] Refactor some code in RISCVMergeBaseOffset.NFC (#170839)

Added: 
    

Modified: 
    llvm/lib/Target/RISCV/RISCVMergeBaseOffset.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/RISCV/RISCVMergeBaseOffset.cpp b/llvm/lib/Target/RISCV/RISCVMergeBaseOffset.cpp
index 87f0c8f15a909..f3adac84f41c0 100644
--- a/llvm/lib/Target/RISCV/RISCVMergeBaseOffset.cpp
+++ b/llvm/lib/Target/RISCV/RISCVMergeBaseOffset.cpp
@@ -83,13 +83,14 @@ INITIALIZE_PASS(RISCVMergeBaseOffsetOpt, DEBUG_TYPE,
 //    3) The offset value in the Global Address or Constant Pool is 0.
 bool RISCVMergeBaseOffsetOpt::detectFoldable(MachineInstr &Hi,
                                              MachineInstr *&Lo) {
-  if (Hi.getOpcode() != RISCV::LUI && Hi.getOpcode() != RISCV::AUIPC &&
-      Hi.getOpcode() != RISCV::PseudoMovAddr)
+  auto HiOpc = Hi.getOpcode();
+  if (HiOpc != RISCV::LUI && HiOpc != RISCV::AUIPC &&
+      HiOpc != RISCV::PseudoMovAddr)
     return false;
 
   const MachineOperand &HiOp1 = Hi.getOperand(1);
   unsigned ExpectedFlags =
-      Hi.getOpcode() == RISCV::AUIPC ? RISCVII::MO_PCREL_HI : RISCVII::MO_HI;
+      HiOpc == RISCV::AUIPC ? RISCVII::MO_PCREL_HI : RISCVII::MO_HI;
   if (HiOp1.getTargetFlags() != ExpectedFlags)
     return false;
 
@@ -97,7 +98,7 @@ bool RISCVMergeBaseOffsetOpt::detectFoldable(MachineInstr &Hi,
       HiOp1.getOffset() != 0)
     return false;
 
-  if (Hi.getOpcode() == RISCV::PseudoMovAddr) {
+  if (HiOpc == RISCV::PseudoMovAddr) {
     // Most of the code should handle it correctly without modification by
     // setting Lo and Hi both point to PseudoMovAddr
     Lo = &Hi;
@@ -112,13 +113,13 @@ bool RISCVMergeBaseOffsetOpt::detectFoldable(MachineInstr &Hi,
   }
 
   const MachineOperand &LoOp2 = Lo->getOperand(2);
-  if (Hi.getOpcode() == RISCV::LUI || Hi.getOpcode() == RISCV::PseudoMovAddr) {
+  if (HiOpc == RISCV::LUI || HiOpc == RISCV::PseudoMovAddr) {
     if (LoOp2.getTargetFlags() != RISCVII::MO_LO ||
         !(LoOp2.isGlobal() || LoOp2.isCPI() || LoOp2.isBlockAddress()) ||
         LoOp2.getOffset() != 0)
       return false;
   } else {
-    assert(Hi.getOpcode() == RISCV::AUIPC);
+    assert(HiOpc == RISCV::AUIPC);
     if (LoOp2.getTargetFlags() != RISCVII::MO_PCREL_LO ||
         LoOp2.getType() != MachineOperand::MO_MCSymbol)
       return false;
@@ -148,7 +149,8 @@ bool RISCVMergeBaseOffsetOpt::foldOffset(MachineInstr &Hi, MachineInstr &Lo,
   // If Hi is an AUIPC, don't fold the offset if it is outside the bounds of
   // the global object. The object may be within 2GB of the PC, but addresses
   // outside of the object might not be.
-  if (Hi.getOpcode() == RISCV::AUIPC && Hi.getOperand(1).isGlobal()) {
+  auto HiOpc = Hi.getOpcode();
+  if (HiOpc == RISCV::AUIPC && Hi.getOperand(1).isGlobal()) {
     const GlobalValue *GV = Hi.getOperand(1).getGlobal();
     Type *Ty = GV->getValueType();
     if (!Ty->isSized() || Offset < 0 ||
@@ -158,12 +160,13 @@ bool RISCVMergeBaseOffsetOpt::foldOffset(MachineInstr &Hi, MachineInstr &Lo,
 
   // Put the offset back in Hi and the Lo
   Hi.getOperand(1).setOffset(Offset);
-  if (Hi.getOpcode() != RISCV::AUIPC)
+  if (HiOpc != RISCV::AUIPC)
     Lo.getOperand(2).setOffset(Offset);
   // Delete the tail instruction.
-  MRI->constrainRegClass(Lo.getOperand(0).getReg(),
-                         MRI->getRegClass(Tail.getOperand(0).getReg()));
-  MRI->replaceRegWith(Tail.getOperand(0).getReg(), Lo.getOperand(0).getReg());
+  Register LoOp0Reg = Lo.getOperand(0).getReg();
+  Register TailOp0Reg = Tail.getOperand(0).getReg();
+  MRI->constrainRegClass(LoOp0Reg, MRI->getRegClass(TailOp0Reg));
+  MRI->replaceRegWith(TailOp0Reg, LoOp0Reg);
   Tail.eraseFromParent();
   LLVM_DEBUG(dbgs() << "  Merged offset " << Offset << " into base.\n"
                     << "     " << Hi << "     " << Lo;);
@@ -204,8 +207,8 @@ bool RISCVMergeBaseOffsetOpt::foldLargeOffset(MachineInstr &Hi,
     return false;
   // This can point to an ADDI(W) or a LUI:
   MachineInstr &OffsetTail = *MRI->getVRegDef(Reg);
-  if (OffsetTail.getOpcode() == RISCV::ADDI ||
-      OffsetTail.getOpcode() == RISCV::ADDIW) {
+  auto OffsetTailOpc = OffsetTail.getOpcode();
+  if (OffsetTailOpc == RISCV::ADDI || OffsetTailOpc == RISCV::ADDIW) {
     // The offset value has non zero bits in both %hi and %lo parts.
     // Detect an ADDI that feeds from a LUI instruction.
     MachineOperand &AddiImmOp = OffsetTail.getOperand(2);
@@ -232,7 +235,7 @@ bool RISCVMergeBaseOffsetOpt::foldLargeOffset(MachineInstr &Hi,
     int64_t Offset = SignExtend64<32>(LuiImmOp.getImm() << 12);
     Offset += OffLo;
     // RV32 ignores the upper 32 bits. ADDIW sign extends the result.
-    if (!ST->is64Bit() || OffsetTail.getOpcode() == RISCV::ADDIW)
+    if (!ST->is64Bit() || OffsetTailOpc == RISCV::ADDIW)
       Offset = SignExtend64<32>(Offset);
     // We can only fold simm32 offsets.
     if (!isInt<32>(Offset))
@@ -244,7 +247,7 @@ bool RISCVMergeBaseOffsetOpt::foldLargeOffset(MachineInstr &Hi,
     OffsetTail.eraseFromParent();
     OffsetLui.eraseFromParent();
     return true;
-  } else if (OffsetTail.getOpcode() == RISCV::LUI) {
+  } else if (OffsetTailOpc == RISCV::LUI) {
     // The offset value has all zero bits in the lower 12 bits. Only LUI
     // exists.
     LLVM_DEBUG(dbgs() << "  Offset Instr: " << OffsetTail);
@@ -503,14 +506,15 @@ bool RISCVMergeBaseOffsetOpt::foldIntoMemoryOps(MachineInstr &Hi,
 
   Hi.getOperand(1).setOffset(NewOffset);
   MachineOperand &ImmOp = Lo.getOperand(2);
+  auto HiOpc = Hi.getOpcode();
   // Expand PseudoMovAddr into LUI
-  if (Hi.getOpcode() == RISCV::PseudoMovAddr) {
+  if (HiOpc == RISCV::PseudoMovAddr) {
     auto *TII = ST->getInstrInfo();
     Hi.setDesc(TII->get(RISCV::LUI));
     Hi.removeOperand(2);
   }
 
-  if (Hi.getOpcode() != RISCV::AUIPC)
+  if (HiOpc != RISCV::AUIPC)
     ImmOp.setOffset(NewOffset);
 
   // Update the immediate in the load/store instructions to add the offset.


        


More information about the llvm-commits mailing list