2222// /
2323// ===----------------------------------------------------------------------===//
2424
25+ #include " llvm/CodeGen/RemoveLoadsIntoFakeUses.h"
2526#include " llvm/ADT/PostOrderIterator.h"
2627#include " llvm/ADT/Statistic.h"
2728#include " llvm/CodeGen/LiveRegUnits.h"
2829#include " llvm/CodeGen/MachineFunction.h"
2930#include " llvm/CodeGen/MachineFunctionPass.h"
31+ #include " llvm/CodeGen/MachinePassManager.h"
3032#include " llvm/CodeGen/MachineRegisterInfo.h"
3133#include " llvm/CodeGen/TargetSubtargetInfo.h"
3234#include " llvm/IR/Function.h"
@@ -41,12 +43,13 @@ using namespace llvm;
4143STATISTIC (NumLoadsDeleted, " Number of dead load instructions deleted" );
4244STATISTIC (NumFakeUsesDeleted, " Number of FAKE_USE instructions deleted" );
4345
44- class RemoveLoadsIntoFakeUses : public MachineFunctionPass {
46+ class RemoveLoadsIntoFakeUsesLegacy : public MachineFunctionPass {
4547public:
4648 static char ID;
4749
48- RemoveLoadsIntoFakeUses () : MachineFunctionPass(ID) {
49- initializeRemoveLoadsIntoFakeUsesPass (*PassRegistry::getPassRegistry ());
50+ RemoveLoadsIntoFakeUsesLegacy () : MachineFunctionPass(ID) {
51+ initializeRemoveLoadsIntoFakeUsesLegacyPass (
52+ *PassRegistry::getPassRegistry ());
5053 }
5154
5255 void getAnalysisUsage (AnalysisUsage &AU) const override {
@@ -66,21 +69,45 @@ class RemoveLoadsIntoFakeUses : public MachineFunctionPass {
6669 bool runOnMachineFunction (MachineFunction &MF) override ;
6770};
6871
69- char RemoveLoadsIntoFakeUses::ID = 0 ;
70- char &llvm::RemoveLoadsIntoFakeUsesID = RemoveLoadsIntoFakeUses::ID;
72+ struct RemoveLoadsIntoFakeUses {
73+ bool run (MachineFunction &MF);
74+ };
75+
76+ char RemoveLoadsIntoFakeUsesLegacy::ID = 0 ;
77+ char &llvm::RemoveLoadsIntoFakeUsesID = RemoveLoadsIntoFakeUsesLegacy::ID;
7178
72- INITIALIZE_PASS_BEGIN (RemoveLoadsIntoFakeUses , DEBUG_TYPE,
79+ INITIALIZE_PASS_BEGIN (RemoveLoadsIntoFakeUsesLegacy , DEBUG_TYPE,
7380 " Remove Loads Into Fake Uses" , false , false )
74- INITIALIZE_PASS_END(RemoveLoadsIntoFakeUses , DEBUG_TYPE,
81+ INITIALIZE_PASS_END(RemoveLoadsIntoFakeUsesLegacy , DEBUG_TYPE,
7582 " Remove Loads Into Fake Uses" , false , false )
7683
77- bool RemoveLoadsIntoFakeUses::runOnMachineFunction(MachineFunction &MF) {
84+ bool RemoveLoadsIntoFakeUsesLegacy::runOnMachineFunction(MachineFunction &MF) {
85+ if (skipFunction (MF.getFunction ()))
86+ return false ;
87+
88+ return RemoveLoadsIntoFakeUses ().run (MF);
89+ }
90+
91+ PreservedAnalyses
92+ RemoveLoadsIntoFakeUsesPass::run (MachineFunction &MF,
93+ MachineFunctionAnalysisManager &MFAM) {
94+ MFPropsModifier _ (*this , MF);
95+
96+ if (!RemoveLoadsIntoFakeUses ().run (MF))
97+ return PreservedAnalyses::all ();
98+
99+ auto PA = getMachineFunctionPassPreservedAnalyses ();
100+ PA.preserveSet <CFGAnalyses>();
101+ return PA;
102+ }
103+
104+ bool RemoveLoadsIntoFakeUses::run (MachineFunction &MF) {
78105 // Skip this pass if we would use VarLoc-based LDV, as there may be DBG_VALUE
79106 // instructions of the restored values that would become invalid.
80107 if (!MF.useDebugInstrRef ())
81108 return false ;
82109 // Only run this for functions that have fake uses.
83- if (!MF.hasFakeUses () || skipFunction (MF. getFunction ()) )
110+ if (!MF.hasFakeUses ())
84111 return false ;
85112
86113 bool AnyChanges = false ;
0 commit comments