From: Xinliang David Li Date: Sat, 22 Apr 2017 19:24:19 +0000 (+0000) Subject: [PartialInlining] Using existing hasAddressTaken interface to legality check/NFC X-Git-Tag: llvmorg-5.0.0-rc1~6947 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=016a82ba51d2a3574130423b27ffbdc24326ed5d;p=platform%2Fupstream%2Fllvm.git [PartialInlining] Using existing hasAddressTaken interface to legality check/NFC llvm-svn: 301090 --- diff --git a/llvm/lib/Transforms/IPO/PartialInlining.cpp b/llvm/lib/Transforms/IPO/PartialInlining.cpp index d811168..f5e5775 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(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 Users(F->user_begin(), F->user_end()); - for (User *User : Users) { - Function *Callee = nullptr; - if (CallInst *CI = dyn_cast(User)) - Callee = CallSite(CI).getCalledFunction(); - else if (InvokeInst *II = dyn_cast(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);