diff options
Diffstat (limited to 'llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp')
| -rw-r--r-- | llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp b/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp index 22947544ac07..51af25050950 100644 --- a/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp +++ b/llvm/lib/Target/AMDGPU/AMDGPUAlwaysInlinePass.cpp @@ -15,9 +15,9 @@ #include "AMDGPU.h" #include "AMDGPUTargetMachine.h" #include "Utils/AMDGPUBaseInfo.h" -#include "llvm/ADT/SmallPtrSet.h" #include "llvm/IR/Module.h" -#include "llvm/Transforms/Utils/Cloning.h" +#include "llvm/Pass.h" +#include "llvm/Support/CommandLine.h" using namespace llvm; @@ -32,8 +32,6 @@ static cl::opt<bool> StressCalls( class AMDGPUAlwaysInline : public ModulePass { bool GlobalOpt; - void recursivelyVisitUsers(GlobalValue &GV, - SmallPtrSetImpl<Function *> &FuncsToAlwaysInline); public: static char ID; @@ -53,16 +51,13 @@ INITIALIZE_PASS(AMDGPUAlwaysInline, "amdgpu-always-inline", char AMDGPUAlwaysInline::ID = 0; -void AMDGPUAlwaysInline::recursivelyVisitUsers( - GlobalValue &GV, - SmallPtrSetImpl<Function *> &FuncsToAlwaysInline) { - SmallVector<User *, 16> Stack; +static void +recursivelyVisitUsers(GlobalValue &GV, + SmallPtrSetImpl<Function *> &FuncsToAlwaysInline) { + SmallVector<User *, 16> Stack(GV.users()); SmallPtrSet<const Value *, 8> Visited; - for (User *U : GV.users()) - Stack.push_back(U); - while (!Stack.empty()) { User *U = Stack.pop_back_val(); if (!Visited.insert(U).second) @@ -86,12 +81,11 @@ void AMDGPUAlwaysInline::recursivelyVisitUsers( continue; } - for (User *UU : U->users()) - Stack.push_back(UU); + append_range(Stack, U->users()); } } -bool AMDGPUAlwaysInline::runOnModule(Module &M) { +static bool alwaysInlineImpl(Module &M, bool GlobalOpt) { std::vector<GlobalAlias*> AliasesToRemove; SmallPtrSet<Function *, 8> FuncsToAlwaysInline; @@ -157,7 +151,16 @@ bool AMDGPUAlwaysInline::runOnModule(Module &M) { return !FuncsToAlwaysInline.empty() || !FuncsToNoInline.empty(); } +bool AMDGPUAlwaysInline::runOnModule(Module &M) { + return alwaysInlineImpl(M, GlobalOpt); +} + ModulePass *llvm::createAMDGPUAlwaysInlinePass(bool GlobalOpt) { return new AMDGPUAlwaysInline(GlobalOpt); } +PreservedAnalyses AMDGPUAlwaysInlinePass::run(Module &M, + ModuleAnalysisManager &AM) { + alwaysInlineImpl(M, GlobalOpt); + return PreservedAnalyses::all(); +} |
