3838//
3939// ===----------------------------------------------------------------------===//
4040
41+ #include " llvm/CodeGen/InitUndef.h"
4142#include " llvm/ADT/SmallSet.h"
4243#include " llvm/ADT/SmallVector.h"
4344#include " llvm/CodeGen/DetectDeadLanes.h"
@@ -59,20 +60,12 @@ using namespace llvm;
5960
6061namespace {
6162
62- class InitUndef : public MachineFunctionPass {
63- const TargetInstrInfo *TII;
64- MachineRegisterInfo *MRI;
65- const TargetSubtargetInfo *ST;
66- const TargetRegisterInfo *TRI;
67-
68- // Newly added vregs, assumed to be fully rewritten
69- SmallSet<Register, 8 > NewRegs;
70- SmallVector<MachineInstr *, 8 > DeadInsts;
71-
63+ class InitUndefLegacy : public MachineFunctionPass {
7264public:
7365 static char ID;
7466
75- InitUndef () : MachineFunctionPass(ID) {}
67+ InitUndefLegacy () : MachineFunctionPass(ID) {}
68+
7669 bool runOnMachineFunction (MachineFunction &MF) override ;
7770
7871 void getAnalysisUsage (AnalysisUsage &AU) const override {
@@ -81,6 +74,20 @@ class InitUndef : public MachineFunctionPass {
8174 }
8275
8376 StringRef getPassName () const override { return INIT_UNDEF_NAME; }
77+ };
78+
79+ class InitUndef {
80+ const TargetInstrInfo *TII;
81+ MachineRegisterInfo *MRI;
82+ const TargetSubtargetInfo *ST;
83+ const TargetRegisterInfo *TRI;
84+
85+ // Newly added vregs, assumed to be fully rewritten
86+ SmallSet<Register, 8 > NewRegs;
87+ SmallVector<MachineInstr *, 8 > DeadInsts;
88+
89+ public:
90+ bool run (MachineFunction &MF);
8491
8592private:
8693 bool processBasicBlock (MachineFunction &MF, MachineBasicBlock &MBB,
@@ -93,9 +100,9 @@ class InitUndef : public MachineFunctionPass {
93100
94101} // end anonymous namespace
95102
96- char InitUndef ::ID = 0 ;
97- INITIALIZE_PASS (InitUndef , DEBUG_TYPE, INIT_UNDEF_NAME, false , false )
98- char &llvm::InitUndefID = InitUndef ::ID;
103+ char InitUndefLegacy ::ID = 0 ;
104+ INITIALIZE_PASS (InitUndefLegacy , DEBUG_TYPE, INIT_UNDEF_NAME, false , false )
105+ char &llvm::InitUndefID = InitUndefLegacy ::ID;
99106
100107static bool isEarlyClobberMI (MachineInstr &MI) {
101108 return llvm::any_of (MI.all_defs (), [](const MachineOperand &DefMO) {
@@ -246,7 +253,20 @@ bool InitUndef::processBasicBlock(MachineFunction &MF, MachineBasicBlock &MBB,
246253 return Changed;
247254}
248255
249- bool InitUndef::runOnMachineFunction (MachineFunction &MF) {
256+ bool InitUndefLegacy::runOnMachineFunction (MachineFunction &MF) {
257+ return InitUndef ().run (MF);
258+ }
259+
260+ PreservedAnalyses InitUndefPass::run (MachineFunction &MF,
261+ MachineFunctionAnalysisManager &MFAM) {
262+ if (!InitUndef ().run (MF))
263+ return PreservedAnalyses::all ();
264+ auto PA = getMachineFunctionPassPreservedAnalyses ();
265+ PA.preserveSet <CFGAnalyses>();
266+ return PA;
267+ }
268+
269+ bool InitUndef::run (MachineFunction &MF) {
250270 ST = &MF.getSubtarget ();
251271
252272 // The pass is only needed if early-clobber defs and undef ops cannot be
0 commit comments