diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp')
-rw-r--r-- | llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp | 37 |
1 files changed, 23 insertions, 14 deletions
diff --git a/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp b/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp index 05c81feb23ecd..9a1855c3458be 100644 --- a/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp +++ b/llvm/lib/Target/AMDGPU/SIPeepholeSDWA.cpp @@ -244,11 +244,6 @@ static raw_ostream& operator<<(raw_ostream &OS, const DstUnused &Un) { return OS; } -static raw_ostream& operator<<(raw_ostream &OS, const SDWAOperand &Operand) { - Operand.print(OS); - return OS; -} - LLVM_DUMP_METHOD void SDWASrcOperand::print(raw_ostream& OS) const { OS << "SDWA src: " << *getTargetOperand() @@ -850,6 +845,13 @@ SIPeepholeSDWA::matchSDWAOperand(MachineInstr &MI) { return std::unique_ptr<SDWAOperand>(nullptr); } +#if !defined(NDEBUG) +static raw_ostream& operator<<(raw_ostream &OS, const SDWAOperand &Operand) { + Operand.print(OS); + return OS; +} +#endif + void SIPeepholeSDWA::matchSDWAOperands(MachineBasicBlock &MBB) { for (MachineInstr &MI : MBB) { if (auto Operand = matchSDWAOperand(MI)) { @@ -920,18 +922,24 @@ void SIPeepholeSDWA::pseudoOpConvertToVOP2(MachineInstr &MI, if (I->modifiesRegister(AMDGPU::VCC, TRI)) return; } + // Make the two new e32 instruction variants. // Replace MI with V_{SUB|ADD}_I32_e32 - auto NewMI = BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(Opc)); - NewMI.add(*TII->getNamedOperand(MI, AMDGPU::OpName::vdst)); - NewMI.add(*TII->getNamedOperand(MI, AMDGPU::OpName::src0)); - NewMI.add(*TII->getNamedOperand(MI, AMDGPU::OpName::src1)); + BuildMI(MBB, MI, MI.getDebugLoc(), TII->get(Opc)) + .add(*TII->getNamedOperand(MI, AMDGPU::OpName::vdst)) + .add(*TII->getNamedOperand(MI, AMDGPU::OpName::src0)) + .add(*TII->getNamedOperand(MI, AMDGPU::OpName::src1)) + .setMIFlags(MI.getFlags()); + MI.eraseFromParent(); + // Replace MISucc with V_{SUBB|ADDC}_U32_e32 - auto NewInst = BuildMI(MBB, MISucc, MISucc.getDebugLoc(), TII->get(SuccOpc)); - NewInst.add(*TII->getNamedOperand(MISucc, AMDGPU::OpName::vdst)); - NewInst.add(*TII->getNamedOperand(MISucc, AMDGPU::OpName::src0)); - NewInst.add(*TII->getNamedOperand(MISucc, AMDGPU::OpName::src1)); + BuildMI(MBB, MISucc, MISucc.getDebugLoc(), TII->get(SuccOpc)) + .add(*TII->getNamedOperand(MISucc, AMDGPU::OpName::vdst)) + .add(*TII->getNamedOperand(MISucc, AMDGPU::OpName::src0)) + .add(*TII->getNamedOperand(MISucc, AMDGPU::OpName::src1)) + .setMIFlags(MISucc.getFlags()); + MISucc.eraseFromParent(); } @@ -1008,7 +1016,8 @@ bool SIPeepholeSDWA::convertToSDWA(MachineInstr &MI, // Create SDWA version of instruction MI and initialize its operands MachineInstrBuilder SDWAInst = - BuildMI(*MI.getParent(), MI, MI.getDebugLoc(), SDWADesc); + BuildMI(*MI.getParent(), MI, MI.getDebugLoc(), SDWADesc) + .setMIFlags(MI.getFlags()); // Copy dst, if it is present in original then should also be present in SDWA MachineOperand *Dst = TII->getNamedOperand(MI, AMDGPU::OpName::vdst); |