summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/Transforms/IPO/PartialInlining.cpp22
1 files changed, 3 insertions, 19 deletions
diff --git a/llvm/lib/Transforms/IPO/PartialInlining.cpp b/llvm/lib/Transforms/IPO/PartialInlining.cpp
index d8111688d1d..f5e5775da55 100644
--- a/llvm/lib/Transforms/IPO/PartialInlining.cpp
+++ b/llvm/lib/Transforms/IPO/PartialInlining.cpp
@@ -66,6 +66,9 @@ struct PartialInlinerLegacyPass : public ModulePass {
Function *PartialInlinerImpl::unswitchFunction(Function *F) {
// First, verify that this function is an unswitching candidate...
+ if (F->hasAddressTaken())
+ return nullptr;
+
BasicBlock *EntryBlock = &F->front();
BranchInst *BR = dyn_cast<BranchInst>(EntryBlock->getTerminator());
if (!BR || BR->isUnconditional())
@@ -85,25 +88,6 @@ Function *PartialInlinerImpl::unswitchFunction(Function *F) {
if (ReturnCount != 1)
return nullptr;
- auto canAllUsesBeReplaced = [](Function *F) {
- std::vector<User *> Users(F->user_begin(), F->user_end());
- for (User *User : Users) {
- Function *Callee = nullptr;
- if (CallInst *CI = dyn_cast<CallInst>(User))
- Callee = CallSite(CI).getCalledFunction();
- else if (InvokeInst *II = dyn_cast<InvokeInst>(User))
- Callee = CallSite(II).getCalledFunction();
-
- if (Callee != F)
- return false;
- }
-
- return true;
- };
-
- if (!canAllUsesBeReplaced(F))
- return nullptr;
-
// Clone the function, so that we can hack away on it.
ValueToValueMapTy VMap;
Function *DuplicateFunction = CloneFunction(F, VMap);
OpenPOWER on IntegriCloud