@@ -373,19 +373,9 @@ LaneBitmask DeadLaneDetector::determineInitialUsedLanes(Register Reg) {
373373
374374namespace {
375375
376- class DetectDeadLanes : public MachineFunctionPass {
376+ class DetectDeadLanes {
377377public:
378- bool runOnMachineFunction (MachineFunction &MF) override ;
379-
380- static char ID;
381- DetectDeadLanes () : MachineFunctionPass(ID) {}
382-
383- StringRef getPassName () const override { return " Detect Dead Lanes" ; }
384-
385- void getAnalysisUsage (AnalysisUsage &AU) const override {
386- AU.setPreservesCFG ();
387- MachineFunctionPass::getAnalysisUsage (AU);
388- }
378+ bool run (MachineFunction &MF);
389379
390380private:
391381 // / update the operand status.
@@ -407,12 +397,29 @@ class DetectDeadLanes : public MachineFunctionPass {
407397 const TargetRegisterInfo *TRI = nullptr ;
408398};
409399
400+ struct DetectDeadLanesLegacy : public MachineFunctionPass {
401+ static char ID;
402+ DetectDeadLanesLegacy () : MachineFunctionPass(ID) {}
403+
404+ StringRef getPassName () const override { return " Detect Dead Lanes" ; }
405+
406+ void getAnalysisUsage (AnalysisUsage &AU) const override {
407+ AU.setPreservesCFG ();
408+ MachineFunctionPass::getAnalysisUsage (AU);
409+ }
410+
411+ bool runOnMachineFunction (MachineFunction &MF) override {
412+ return DetectDeadLanes ().run (MF);
413+ }
414+ };
415+
410416} // end anonymous namespace
411417
412- char DetectDeadLanes ::ID = 0 ;
413- char &llvm::DetectDeadLanesID = DetectDeadLanes ::ID;
418+ char DetectDeadLanesLegacy ::ID = 0 ;
419+ char &llvm::DetectDeadLanesID = DetectDeadLanesLegacy ::ID;
414420
415- INITIALIZE_PASS (DetectDeadLanes, DEBUG_TYPE, " Detect Dead Lanes" , false , false )
421+ INITIALIZE_PASS (DetectDeadLanesLegacy, DEBUG_TYPE, " Detect Dead Lanes" , false ,
422+ false )
416423
417424bool DetectDeadLanes::isUndefRegAtInput(
418425 const MachineOperand &MO, const DeadLaneDetector::VRegInfo &RegInfo) const {
@@ -537,7 +544,17 @@ DetectDeadLanes::modifySubRegisterOperandStatus(const DeadLaneDetector &DLD,
537544 return std::make_pair (Changed, Again);
538545}
539546
540- bool DetectDeadLanes::runOnMachineFunction (MachineFunction &MF) {
547+ PreservedAnalyses
548+ DetectDeadLanesPass::run (MachineFunction &MF,
549+ MachineFunctionAnalysisManager &MFAM) {
550+ if (!DetectDeadLanes ().run (MF))
551+ return PreservedAnalyses::all ();
552+ auto PA = getMachineFunctionPassPreservedAnalyses ();
553+ PA.preserveSet <CFGAnalyses>();
554+ return PA;
555+ }
556+
557+ bool DetectDeadLanes::run (MachineFunction &MF) {
541558 // Don't bother if we won't track subregister liveness later. This pass is
542559 // required for correctness if subregister liveness is enabled because the
543560 // register coalescer cannot deal with hidden dead defs. However without
0 commit comments