4343#include " llvm/CodeGen/MachinePostDominators.h"
4444#include " llvm/CodeGen/MachineRegisterInfo.h"
4545#include " llvm/CodeGen/MachineSizeOpts.h"
46+ #include " llvm/CodeGen/PostRAMachineSink.h"
4647#include " llvm/CodeGen/RegisterClassInfo.h"
4748#include " llvm/CodeGen/RegisterPressure.h"
4849#include " llvm/CodeGen/SlotIndexes.h"
@@ -2068,24 +2069,7 @@ void MachineSinking::SalvageUnsunkDebugUsersOfCopy(
20682069// ===----------------------------------------------------------------------===//
20692070namespace {
20702071
2071- class PostRAMachineSinking : public MachineFunctionPass {
2072- public:
2073- bool runOnMachineFunction (MachineFunction &MF) override ;
2074-
2075- static char ID;
2076- PostRAMachineSinking () : MachineFunctionPass(ID) {}
2077- StringRef getPassName () const override { return " PostRA Machine Sink" ; }
2078-
2079- void getAnalysisUsage (AnalysisUsage &AU) const override {
2080- AU.setPreservesCFG ();
2081- MachineFunctionPass::getAnalysisUsage (AU);
2082- }
2083-
2084- MachineFunctionProperties getRequiredProperties () const override {
2085- return MachineFunctionProperties ().setNoVRegs ();
2086- }
2087-
2088- private:
2072+ class PostRAMachineSinkingImpl {
20892073 // / Track which register units have been modified and used.
20902074 LiveRegUnits ModifiedRegUnits, UsedRegUnits;
20912075
@@ -2099,13 +2083,36 @@ class PostRAMachineSinking : public MachineFunctionPass {
20992083 // / successors.
21002084 bool tryToSinkCopy (MachineBasicBlock &BB, MachineFunction &MF,
21012085 const TargetRegisterInfo *TRI, const TargetInstrInfo *TII);
2086+
2087+ public:
2088+ bool run (MachineFunction &MF);
21022089};
2090+
2091+ class PostRAMachineSinkingLegacy : public MachineFunctionPass {
2092+ public:
2093+ bool runOnMachineFunction (MachineFunction &MF) override ;
2094+
2095+ static char ID;
2096+ PostRAMachineSinkingLegacy () : MachineFunctionPass(ID) {}
2097+ StringRef getPassName () const override { return " PostRA Machine Sink" ; }
2098+
2099+ void getAnalysisUsage (AnalysisUsage &AU) const override {
2100+ AU.setPreservesCFG ();
2101+ MachineFunctionPass::getAnalysisUsage (AU);
2102+ }
2103+
2104+ MachineFunctionProperties getRequiredProperties () const override {
2105+ return MachineFunctionProperties ().set (
2106+ MachineFunctionProperties::Property::NoVRegs);
2107+ }
2108+ };
2109+
21032110} // namespace
21042111
2105- char PostRAMachineSinking ::ID = 0 ;
2106- char &llvm::PostRAMachineSinkingID = PostRAMachineSinking ::ID;
2112+ char PostRAMachineSinkingLegacy ::ID = 0 ;
2113+ char &llvm::PostRAMachineSinkingID = PostRAMachineSinkingLegacy ::ID;
21072114
2108- INITIALIZE_PASS (PostRAMachineSinking , " postra-machine-sink" ,
2115+ INITIALIZE_PASS (PostRAMachineSinkingLegacy , " postra-machine-sink" ,
21092116 " PostRA Machine Sink" , false , false )
21102117
21112118static bool aliasWithRegsInLiveIn(MachineBasicBlock &MBB, Register Reg,
@@ -2226,10 +2233,10 @@ static bool hasRegisterDependency(MachineInstr *MI,
22262233 return HasRegDependency;
22272234}
22282235
2229- bool PostRAMachineSinking ::tryToSinkCopy (MachineBasicBlock &CurBB,
2230- MachineFunction &MF,
2231- const TargetRegisterInfo *TRI,
2232- const TargetInstrInfo *TII) {
2236+ bool PostRAMachineSinkingImpl ::tryToSinkCopy (MachineBasicBlock &CurBB,
2237+ MachineFunction &MF,
2238+ const TargetRegisterInfo *TRI,
2239+ const TargetInstrInfo *TII) {
22332240 SmallPtrSet<MachineBasicBlock *, 2 > SinkableBBs;
22342241 // FIXME: For now, we sink only to a successor which has a single predecessor
22352242 // so that we can directly sink COPY instructions to the successor without
@@ -2354,10 +2361,7 @@ bool PostRAMachineSinking::tryToSinkCopy(MachineBasicBlock &CurBB,
23542361 return Changed;
23552362}
23562363
2357- bool PostRAMachineSinking::runOnMachineFunction (MachineFunction &MF) {
2358- if (skipFunction (MF.getFunction ()))
2359- return false ;
2360-
2364+ bool PostRAMachineSinkingImpl::run (MachineFunction &MF) {
23612365 bool Changed = false ;
23622366 const TargetRegisterInfo *TRI = MF.getSubtarget ().getRegisterInfo ();
23632367 const TargetInstrInfo *TII = MF.getSubtarget ().getInstrInfo ();
@@ -2369,3 +2373,23 @@ bool PostRAMachineSinking::runOnMachineFunction(MachineFunction &MF) {
23692373
23702374 return Changed;
23712375}
2376+
2377+ bool PostRAMachineSinkingLegacy::runOnMachineFunction (MachineFunction &MF) {
2378+ if (skipFunction (MF.getFunction ()))
2379+ return false ;
2380+
2381+ return PostRAMachineSinkingImpl ().run (MF);
2382+ }
2383+
2384+ PreservedAnalyses
2385+ PostRAMachineSinkingPass::run (MachineFunction &MF,
2386+ MachineFunctionAnalysisManager &MFAM) {
2387+ MFPropsModifier _ (*this , MF);
2388+
2389+ if (!PostRAMachineSinkingImpl ().run (MF))
2390+ return PreservedAnalyses::all ();
2391+
2392+ PreservedAnalyses PA = getMachineFunctionPassPreservedAnalyses ();
2393+ PA.preserveSet <CFGAnalyses>();
2394+ return PA;
2395+ }
0 commit comments