1212//
1313// ===----------------------------------------------------------------------===//
1414
15+ #include " AMDGPURemoveIncompatibleFunctions.h"
1516#include " AMDGPU.h"
1617#include " GCNSubtarget.h"
1718#include " llvm/Analysis/OptimizationRemarkEmitter.h"
@@ -33,25 +34,16 @@ namespace {
3334
3435using Generation = AMDGPUSubtarget::Generation;
3536
36- class AMDGPURemoveIncompatibleFunctions : public ModulePass {
37+ class AMDGPURemoveIncompatibleFunctions {
3738public:
38- static char ID;
39-
4039 AMDGPURemoveIncompatibleFunctions (const TargetMachine *TM = nullptr )
41- : ModulePass(ID), TM(TM) {
40+ : TM(TM) {
4241 assert (TM && " No TargetMachine!" );
4342 }
44-
45- StringRef getPassName () const override {
46- return " AMDGPU Remove Incompatible Functions" ;
47- }
48-
49- void getAnalysisUsage (AnalysisUsage &AU) const override {}
50-
5143 // / Checks a single function, returns true if the function must be deleted.
5244 bool checkFunction (Function &F);
5345
54- bool runOnModule (Module &M) override {
46+ bool run (Module &M) {
5547 assert (TM->getTargetTriple ().isAMDGCN ());
5648
5749 SmallVector<Function *, 4 > FnsToDelete;
@@ -71,6 +63,28 @@ class AMDGPURemoveIncompatibleFunctions : public ModulePass {
7163 const TargetMachine *TM = nullptr ;
7264};
7365
66+ class AMDGPURemoveIncompatibleFunctionsLegacy : public ModulePass {
67+ public:
68+ static char ID;
69+
70+ AMDGPURemoveIncompatibleFunctionsLegacy (const TargetMachine *TM)
71+ : ModulePass(ID), TM(TM) {}
72+
73+ bool runOnModule (Module &M) override {
74+ AMDGPURemoveIncompatibleFunctions Pass (TM);
75+ return Pass.run (M);
76+ }
77+
78+ StringRef getPassName () const override {
79+ return " AMDGPU Remove Incompatible Functions" ;
80+ }
81+
82+ void getAnalysisUsage (AnalysisUsage &AU) const override {}
83+
84+ private:
85+ const TargetMachine *TM = nullptr ;
86+ };
87+
7488StringRef getFeatureName (unsigned Feature) {
7589 for (const SubtargetFeatureKV &KV : AMDGPUFeatureKV)
7690 if (Feature == KV.Value )
@@ -131,6 +145,15 @@ void reportFunctionRemoved(Function &F, unsigned Feature) {
131145}
132146} // end anonymous namespace
133147
148+ PreservedAnalyses
149+ AMDGPURemoveIncompatibleFunctionsPass::run (Module &M,
150+ ModuleAnalysisManager &MAM) {
151+ AMDGPURemoveIncompatibleFunctions Impl (TM);
152+ if (Impl.run (M))
153+ return PreservedAnalyses::none ();
154+ return PreservedAnalyses::all ();
155+ }
156+
134157bool AMDGPURemoveIncompatibleFunctions::checkFunction (Function &F) {
135158 if (F.isDeclaration ())
136159 return false ;
@@ -182,12 +205,12 @@ bool AMDGPURemoveIncompatibleFunctions::checkFunction(Function &F) {
182205 return false ;
183206}
184207
185- INITIALIZE_PASS (AMDGPURemoveIncompatibleFunctions , DEBUG_TYPE,
208+ INITIALIZE_PASS (AMDGPURemoveIncompatibleFunctionsLegacy , DEBUG_TYPE,
186209 " AMDGPU Remove Incompatible Functions" , false , false )
187210
188- char AMDGPURemoveIncompatibleFunctions ::ID = 0;
211+ char AMDGPURemoveIncompatibleFunctionsLegacy ::ID = 0;
189212
190213ModulePass *
191214llvm::createAMDGPURemoveIncompatibleFunctionsPass (const TargetMachine *TM) {
192- return new AMDGPURemoveIncompatibleFunctions (TM);
215+ return new AMDGPURemoveIncompatibleFunctionsLegacy (TM);
193216}
0 commit comments