[PartialInlining] Using existing hasAddressTaken interface to legality check/NFC
authorXinliang David Li <davidxl@google.com>
Sat, 22 Apr 2017 19:24:19 +0000 (19:24 +0000)
committerXinliang David Li <davidxl@google.com>
Sat, 22 Apr 2017 19:24:19 +0000 (19:24 +0000)
llvm-svn: 301090

llvm/lib/Transforms/IPO/PartialInlining.cpp

index d811168..f5e5775 100644 (file)
@@ -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);