diff options
author | Davide Italiano <davide@freebsd.org> | 2016-05-03 20:08:24 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2016-05-03 20:08:24 +0000 |
commit | 296d12cd403fc1d813a145201f8369d5c068a5e4 (patch) | |
tree | 703646cbf702454ffa5ab235adfcbe10d1c93dcc /llvm/lib/Transforms/IPO/IPConstantPropagation.cpp | |
parent | b4b2c8719aa85cc2249abff6e564ab210f1e5df1 (diff) | |
download | llvm-296d12cd403fc1d813a145201f8369d5c068a5e4.zip llvm-296d12cd403fc1d813a145201f8369d5c068a5e4.tar.gz llvm-296d12cd403fc1d813a145201f8369d5c068a5e4.tar.bz2 |
[IPO/IPCP] Convert to use static functions. NFC.
In preparation for porting this pass to the new PM.
llvm-svn: 268429
Diffstat (limited to 'llvm/lib/Transforms/IPO/IPConstantPropagation.cpp')
-rw-r--r-- | llvm/lib/Transforms/IPO/IPConstantPropagation.cpp | 67 |
1 files changed, 32 insertions, 35 deletions
diff --git a/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp b/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp index a1533b3..b3ee499 100644 --- a/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp +++ b/llvm/lib/Transforms/IPO/IPConstantPropagation.cpp @@ -41,47 +41,14 @@ namespace { } bool runOnModule(Module &M) override; - private: - bool PropagateConstantsIntoArguments(Function &F); - bool PropagateConstantReturn(Function &F); }; } -char IPCP::ID = 0; -INITIALIZE_PASS(IPCP, "ipconstprop", - "Interprocedural constant propagation", false, false) - -ModulePass *llvm::createIPConstantPropagationPass() { return new IPCP(); } - -bool IPCP::runOnModule(Module &M) { - if (skipModule(M)) - return false; - - bool Changed = false; - bool LocalChange = true; - - // FIXME: instead of using smart algorithms, we just iterate until we stop - // making changes. - while (LocalChange) { - LocalChange = false; - for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) - if (!I->isDeclaration()) { - // Delete any klingons. - I->removeDeadConstantUsers(); - if (I->hasLocalLinkage()) - LocalChange |= PropagateConstantsIntoArguments(*I); - Changed |= PropagateConstantReturn(*I); - } - Changed |= LocalChange; - } - return Changed; -} - /// PropagateConstantsIntoArguments - Look at all uses of the specified /// function. If all uses are direct call sites, and all pass a particular /// constant in for an argument, propagate that constant in as the argument. /// -bool IPCP::PropagateConstantsIntoArguments(Function &F) { +static bool PropagateConstantsIntoArguments(Function &F) { if (F.arg_empty() || F.use_empty()) return false; // No arguments? Early exit. // For each argument, keep track of its constant value and whether it is a @@ -160,7 +127,7 @@ bool IPCP::PropagateConstantsIntoArguments(Function &F) { // Additionally if a function always returns one of its arguments directly, // callers will be updated to use the value they pass in directly instead of // using the return value. -bool IPCP::PropagateConstantReturn(Function &F) { +static bool PropagateConstantReturn(Function &F) { if (F.getReturnType()->isVoidTy()) return false; // No return value. @@ -281,3 +248,33 @@ bool IPCP::PropagateConstantReturn(Function &F) { if (MadeChange) ++NumReturnValProped; return MadeChange; } + +char IPCP::ID = 0; +INITIALIZE_PASS(IPCP, "ipconstprop", + "Interprocedural constant propagation", false, false) + +ModulePass *llvm::createIPConstantPropagationPass() { return new IPCP(); } + +bool IPCP::runOnModule(Module &M) { + if (skipModule(M)) + return false; + + bool Changed = false; + bool LocalChange = true; + + // FIXME: instead of using smart algorithms, we just iterate until we stop + // making changes. + while (LocalChange) { + LocalChange = false; + for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) + if (!I->isDeclaration()) { + // Delete any klingons. + I->removeDeadConstantUsers(); + if (I->hasLocalLinkage()) + LocalChange |= PropagateConstantsIntoArguments(*I); + Changed |= PropagateConstantReturn(*I); + } + Changed |= LocalChange; + } + return Changed; +} |