[llvm] [llvm][RISCV] Implement Zilsd load/store pair optimization (PR #158640)
Sam Elliott via llvm-commits
llvm-commits at lists.llvm.org
Tue Oct 7 22:03:01 PDT 2025
================
@@ -395,6 +423,143 @@ RISCVLoadStoreOpt::mergePairedInsns(MachineBasicBlock::iterator I,
return NextI;
}
+//===----------------------------------------------------------------------===//
+// Post reg-alloc zilsd pass implementation
+//===----------------------------------------------------------------------===//
+
+bool RISCVLoadStoreOpt::isConsecutiveRegPair(Register First, Register Second) {
+ // Special case: both registers are zero register - this is valid for storing
+ // zeros
+ if (First == RISCV::X0 && Second == RISCV::X0)
+ return true;
+
+ // Check if registers form a valid even/odd pair for Zilsd
+ unsigned FirstNum = TRI->getEncodingValue(First);
+ unsigned SecondNum = TRI->getEncodingValue(Second);
+
+ // Must be consecutive and first must be even
+ return (FirstNum % 2 == 0) && (SecondNum == FirstNum + 1);
----------------
lenary wrote:
The case `FirstNum == 0` and `SecondNum == 1` will still return `true`.
https://github.com/llvm/llvm-project/pull/158640
More information about the llvm-commits
mailing list