diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/GCNDPPCombine.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/GCNDPPCombine.cpp | 57 |
1 files changed, 42 insertions, 15 deletions
diff --git a/llvm/lib/Target/AMDGPU/GCNDPPCombine.cpp b/llvm/lib/Target/AMDGPU/GCNDPPCombine.cpp index 0ac079c69e60..cc802b5fbb67 100644 --- a/llvm/lib/Target/AMDGPU/GCNDPPCombine.cpp +++ b/llvm/lib/Target/AMDGPU/GCNDPPCombine.cpp @@ -37,6 +37,7 @@ // The mov_dpp instruction should reside in the same BB as all its uses //===----------------------------------------------------------------------===// +#include "GCNDPPCombine.h" #include "AMDGPU.h" #include "GCNSubtarget.h" #include "MCTargetDesc/AMDGPUMCTargetDesc.h" @@ -51,7 +52,7 @@ STATISTIC(NumDPPMovsCombined, "Number of DPP moves combined."); namespace { -class GCNDPPCombine : public MachineFunctionPass { +class GCNDPPCombine { MachineRegisterInfo *MRI; const SIInstrInfo *TII; const GCNSubtarget *ST; @@ -76,12 +77,18 @@ class GCNDPPCombine : public MachineFunctionPass { bool combineDPPMov(MachineInstr &MI) const; + int getDPPOp(unsigned Op, bool IsShrinkable) const; + bool isShrinkable(MachineInstr &MI) const; + +public: + bool run(MachineFunction &MF); +}; + +class GCNDPPCombineLegacy : public MachineFunctionPass { public: static char ID; - GCNDPPCombine() : MachineFunctionPass(ID) { - initializeGCNDPPCombinePass(*PassRegistry::getPassRegistry()); - } + GCNDPPCombineLegacy() : MachineFunctionPass(ID) {} bool runOnMachineFunction(MachineFunction &MF) override; @@ -96,22 +103,19 @@ public: return MachineFunctionProperties() .set(MachineFunctionProperties::Property::IsSSA); } - -private: - int getDPPOp(unsigned Op, bool IsShrinkable) const; - bool isShrinkable(MachineInstr &MI) const; }; } // end anonymous namespace -INITIALIZE_PASS(GCNDPPCombine, DEBUG_TYPE, "GCN DPP Combine", false, false) +INITIALIZE_PASS(GCNDPPCombineLegacy, DEBUG_TYPE, "GCN DPP Combine", false, + false) -char GCNDPPCombine::ID = 0; +char GCNDPPCombineLegacy::ID = 0; -char &llvm::GCNDPPCombineID = GCNDPPCombine::ID; +char &llvm::GCNDPPCombineLegacyID = GCNDPPCombineLegacy::ID; FunctionPass *llvm::createGCNDPPCombinePass() { - return new GCNDPPCombine(); + return new GCNDPPCombineLegacy(); } bool GCNDPPCombine::isShrinkable(MachineInstr &MI) const { @@ -497,7 +501,7 @@ MachineInstr *GCNDPPCombine::createDPPInst( return nullptr; } CombOldVGPR = getRegSubRegPair(*Src1); - auto MovDst = TII->getNamedOperand(MovMI, AMDGPU::OpName::vdst); + auto *MovDst = TII->getNamedOperand(MovMI, AMDGPU::OpName::vdst); const TargetRegisterClass *RC = MRI->getRegClass(MovDst->getReg()); if (!isOfRegClass(CombOldVGPR, *RC, *MRI)) { LLVM_DEBUG(dbgs() << " failed: src1 has wrong register class\n"); @@ -749,9 +753,16 @@ bool GCNDPPCombine::combineDPPMov(MachineInstr &MovMI) const { return !Rollback; } -bool GCNDPPCombine::runOnMachineFunction(MachineFunction &MF) { +bool GCNDPPCombineLegacy::runOnMachineFunction(MachineFunction &MF) { + if (skipFunction(MF.getFunction())) + return false; + + return GCNDPPCombine().run(MF); +} + +bool GCNDPPCombine::run(MachineFunction &MF) { ST = &MF.getSubtarget<GCNSubtarget>(); - if (!ST->hasDPP() || skipFunction(MF.getFunction())) + if (!ST->hasDPP()) return false; MRI = &MF.getRegInfo(); @@ -781,3 +792,19 @@ bool GCNDPPCombine::runOnMachineFunction(MachineFunction &MF) { } return Changed; } + +PreservedAnalyses GCNDPPCombinePass::run(MachineFunction &MF, + MachineFunctionAnalysisManager &) { + MFPropsModifier _(*this, MF); + + if (MF.getFunction().hasOptNone()) + return PreservedAnalyses::all(); + + bool Changed = GCNDPPCombine().run(MF); + if (!Changed) + return PreservedAnalyses::all(); + + auto PA = getMachineFunctionPassPreservedAnalyses(); + PA.preserveSet<CFGAnalyses>(); + return PA; +} |
