[llvm] [RISCV] Move PseudoVSET(I)VLI expansion to use PseudoInstExpansion. (PR #102496)
via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 8 09:00:45 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: Craig Topper (topperc)
<details>
<summary>Changes</summary>
Instead of expanding in RISCVExpandPseudoInsts, expand during MachineInstr to MCInst lowering.
We weren't doing anything in expansion other than copying operands.
---
Full diff: https://github.com/llvm/llvm-project/pull/102496.diff
2 Files Affected:
- (modified) llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp (-35)
- (modified) llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td (+3)
``````````diff
diff --git a/llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp b/llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
index d93709ac03420..9b9e870fb61d9 100644
--- a/llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
+++ b/llvm/lib/Target/RISCV/RISCVExpandPseudoInsts.cpp
@@ -46,7 +46,6 @@ class RISCVExpandPseudo : public MachineFunctionPass {
MachineBasicBlock::iterator &NextMBBI);
bool expandCCOp(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI,
MachineBasicBlock::iterator &NextMBBI);
- bool expandVSetVL(MachineBasicBlock &MBB, MachineBasicBlock::iterator MBBI);
bool expandVMSET_VMCLR(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MBBI, unsigned Opcode);
bool expandRV32ZdinxStore(MachineBasicBlock &MBB,
@@ -139,10 +138,6 @@ bool RISCVExpandPseudo::expandMI(MachineBasicBlock &MBB,
case RISCV::PseudoCCORN:
case RISCV::PseudoCCXNOR:
return expandCCOp(MBB, MBBI, NextMBBI);
- case RISCV::PseudoVSETVLI:
- case RISCV::PseudoVSETVLIX0:
- case RISCV::PseudoVSETIVLI:
- return expandVSetVL(MBB, MBBI);
case RISCV::PseudoVMCLR_M_B1:
case RISCV::PseudoVMCLR_M_B2:
case RISCV::PseudoVMCLR_M_B4:
@@ -258,36 +253,6 @@ bool RISCVExpandPseudo::expandCCOp(MachineBasicBlock &MBB,
return true;
}
-bool RISCVExpandPseudo::expandVSetVL(MachineBasicBlock &MBB,
- MachineBasicBlock::iterator MBBI) {
- assert(MBBI->getNumExplicitOperands() == 3 && MBBI->getNumOperands() >= 5 &&
- "Unexpected instruction format");
-
- DebugLoc DL = MBBI->getDebugLoc();
-
- assert((MBBI->getOpcode() == RISCV::PseudoVSETVLI ||
- MBBI->getOpcode() == RISCV::PseudoVSETVLIX0 ||
- MBBI->getOpcode() == RISCV::PseudoVSETIVLI) &&
- "Unexpected pseudo instruction");
- unsigned Opcode;
- if (MBBI->getOpcode() == RISCV::PseudoVSETIVLI)
- Opcode = RISCV::VSETIVLI;
- else
- Opcode = RISCV::VSETVLI;
- const MCInstrDesc &Desc = TII->get(Opcode);
- assert(Desc.getNumOperands() == 3 && "Unexpected instruction format");
-
- Register DstReg = MBBI->getOperand(0).getReg();
- bool DstIsDead = MBBI->getOperand(0).isDead();
- BuildMI(MBB, MBBI, DL, Desc)
- .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead))
- .add(MBBI->getOperand(1)) // VL
- .add(MBBI->getOperand(2)); // VType
-
- MBBI->eraseFromParent(); // The pseudo instruction is gone now.
- return true;
-}
-
bool RISCVExpandPseudo::expandVMSET_VMCLR(MachineBasicBlock &MBB,
MachineBasicBlock::iterator MBBI,
unsigned Opcode) {
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
index c49066b06b837..ab4d5a7e180df 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoVPseudos.td
@@ -6136,10 +6136,13 @@ let hasSideEffects = 0, mayLoad = 0, mayStore = 0, Defs = [VL, VTYPE] in {
// be accidentally be made X0 by MachineIR optimizations. To satisfy the
// verifier, we also need a GPRX0 instruction for the special encodings.
def PseudoVSETVLI : Pseudo<(outs GPR:$rd), (ins GPRNoX0:$rs1, VTypeIOp11:$vtypei), []>,
+ PseudoInstExpansion<(VSETVLI GPR:$rd, GPR:$rs1, VTypeIOp11:$vtypei)>,
Sched<[WriteVSETVLI, ReadVSETVLI]>;
def PseudoVSETVLIX0 : Pseudo<(outs GPR:$rd), (ins GPRX0:$rs1, VTypeIOp11:$vtypei), []>,
+ PseudoInstExpansion<(VSETVLI GPR:$rd, GPR:$rs1, VTypeIOp11:$vtypei)>,
Sched<[WriteVSETVLI, ReadVSETVLI]>;
def PseudoVSETIVLI : Pseudo<(outs GPR:$rd), (ins uimm5:$rs1, VTypeIOp10:$vtypei), []>,
+ PseudoInstExpansion<(VSETIVLI GPR:$rd, uimm5:$rs1, VTypeIOp10:$vtypei)>,
Sched<[WriteVSETIVLI]>;
}
``````````
</details>
https://github.com/llvm/llvm-project/pull/102496
More information about the llvm-commits
mailing list