66//
77// ===----------------------------------------------------------------------===//
88
9+ #include " llvm/CodeGen/ProcessImplicitDefs.h"
910#include " llvm/ADT/SetVector.h"
1011#include " llvm/Analysis/AliasAnalysis.h"
1112#include " llvm/CodeGen/MachineFunctionPass.h"
@@ -26,24 +27,15 @@ using namespace llvm;
2627namespace {
2728// / Process IMPLICIT_DEF instructions and make sure there is one implicit_def
2829// / for each use. Add isUndef marker to implicit_def defs and their uses.
29- class ProcessImplicitDefs : public MachineFunctionPass {
30- const TargetInstrInfo *TII = nullptr ;
31- const TargetRegisterInfo *TRI = nullptr ;
32- MachineRegisterInfo *MRI = nullptr ;
33-
34- SmallSetVector<MachineInstr*, 16 > WorkList;
35-
36- void processImplicitDef (MachineInstr *MI);
37- bool canTurnIntoImplicitDef (MachineInstr *MI);
38-
30+ class ProcessImplicitDefsLegacy : public MachineFunctionPass {
3931public:
4032 static char ID;
4133
42- ProcessImplicitDefs () : MachineFunctionPass(ID) {
43- initializeProcessImplicitDefsPass (*PassRegistry::getPassRegistry ());
34+ ProcessImplicitDefsLegacy () : MachineFunctionPass(ID) {
35+ initializeProcessImplicitDefsLegacyPass (*PassRegistry::getPassRegistry ());
4436 }
4537
46- void getAnalysisUsage (AnalysisUsage &au ) const override ;
38+ void getAnalysisUsage (AnalysisUsage &AU ) const override ;
4739
4840 bool runOnMachineFunction (MachineFunction &MF) override ;
4941
@@ -52,15 +44,29 @@ class ProcessImplicitDefs : public MachineFunctionPass {
5244 MachineFunctionProperties::Property::IsSSA);
5345 }
5446};
47+
48+ class ProcessImplicitDefs {
49+ const TargetInstrInfo *TII = nullptr ;
50+ const TargetRegisterInfo *TRI = nullptr ;
51+ MachineRegisterInfo *MRI = nullptr ;
52+
53+ SmallSetVector<MachineInstr *, 16 > WorkList;
54+
55+ void processImplicitDef (MachineInstr *MI);
56+ bool canTurnIntoImplicitDef (MachineInstr *MI);
57+
58+ public:
59+ bool run (MachineFunction &MF);
60+ };
5561} // end anonymous namespace
5662
57- char ProcessImplicitDefs ::ID = 0 ;
58- char &llvm::ProcessImplicitDefsID = ProcessImplicitDefs ::ID;
63+ char ProcessImplicitDefsLegacy ::ID = 0 ;
64+ char &llvm::ProcessImplicitDefsID = ProcessImplicitDefsLegacy ::ID;
5965
60- INITIALIZE_PASS (ProcessImplicitDefs , DEBUG_TYPE,
66+ INITIALIZE_PASS (ProcessImplicitDefsLegacy , DEBUG_TYPE,
6167 " Process Implicit Definitions" , false , false )
6268
63- void ProcessImplicitDefs ::getAnalysisUsage(AnalysisUsage &AU) const {
69+ void ProcessImplicitDefsLegacy ::getAnalysisUsage(AnalysisUsage &AU) const {
6470 AU.setPreservesCFG ();
6571 AU.addPreserved <AAResultsWrapperPass>();
6672 MachineFunctionPass::getAnalysisUsage (AU);
@@ -133,9 +139,24 @@ void ProcessImplicitDefs::processImplicitDef(MachineInstr *MI) {
133139 LLVM_DEBUG (dbgs () << " Keeping physreg: " << *MI);
134140}
135141
142+ bool ProcessImplicitDefsLegacy::runOnMachineFunction (MachineFunction &MF) {
143+ return ProcessImplicitDefs ().run (MF);
144+ }
145+
146+ PreservedAnalyses
147+ ProcessImplicitDefsPass::run (MachineFunction &MF,
148+ MachineFunctionAnalysisManager &MFAM) {
149+ if (!ProcessImplicitDefs ().run (MF))
150+ return PreservedAnalyses::all ();
151+
152+ return getMachineFunctionPassPreservedAnalyses ()
153+ .preserveSet <CFGAnalyses>()
154+ .preserve <AAManager>();
155+ }
156+
136157// / processImplicitDefs - Process IMPLICIT_DEF instructions and turn them into
137158// / <undef> operands.
138- bool ProcessImplicitDefs::runOnMachineFunction (MachineFunction &MF) {
159+ bool ProcessImplicitDefs::run (MachineFunction &MF) {
139160
140161 LLVM_DEBUG (dbgs () << " ********** PROCESS IMPLICIT DEFS **********\n "
141162 << " ********** Function: " << MF.getName () << ' \n ' );
0 commit comments