@@ -42,7 +42,7 @@ class AMDGPUAlwaysInline : public ModulePass {
42
42
43
43
void getAnalysisUsage (AnalysisUsage &AU) const override {
44
44
AU.setPreservesAll ();
45
- }
45
+ }
46
46
};
47
47
48
48
} // End anonymous namespace
@@ -89,6 +89,7 @@ recursivelyVisitUsers(GlobalValue &GV,
89
89
static bool alwaysInlineImpl (Module &M, bool GlobalOpt) {
90
90
std::vector<GlobalAlias*> AliasesToRemove;
91
91
92
+ bool Changed = false ;
92
93
SmallPtrSet<Function *, 8 > FuncsToAlwaysInline;
93
94
SmallPtrSet<Function *, 8 > FuncsToNoInline;
94
95
Triple TT (M.getTargetTriple ());
@@ -98,6 +99,7 @@ static bool alwaysInlineImpl(Module &M, bool GlobalOpt) {
98
99
if (TT.getArch () == Triple::amdgcn &&
99
100
A.getLinkage () != GlobalValue::InternalLinkage)
100
101
continue ;
102
+ Changed = true ;
101
103
A.replaceAllUsesWith (F);
102
104
AliasesToRemove.push_back (&A);
103
105
}
@@ -153,7 +155,7 @@ static bool alwaysInlineImpl(Module &M, bool GlobalOpt) {
153
155
for (Function *F : FuncsToNoInline)
154
156
F->addFnAttr (Attribute::NoInline);
155
157
156
- return !FuncsToAlwaysInline.empty () || !FuncsToNoInline.empty ();
158
+ return Changed || !FuncsToAlwaysInline.empty () || !FuncsToNoInline.empty ();
157
159
}
158
160
159
161
bool AMDGPUAlwaysInline::runOnModule (Module &M) {
@@ -166,6 +168,6 @@ ModulePass *llvm::createAMDGPUAlwaysInlinePass(bool GlobalOpt) {
166
168
167
169
PreservedAnalyses AMDGPUAlwaysInlinePass::run (Module &M,
168
170
ModuleAnalysisManager &AM) {
169
- alwaysInlineImpl (M, GlobalOpt);
170
- return PreservedAnalyses::all ();
171
+ const bool Changed = alwaysInlineImpl (M, GlobalOpt);
172
+ return Changed ? PreservedAnalyses::none () : PreservedAnalyses::all ();
171
173
}
0 commit comments