Don't insert a PHI node to merge "returns" from an inlined function if there
authorChris Lattner <sabre@nondot.org>
Sun, 22 Sep 2002 18:41:25 +0000 (18:41 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 22 Sep 2002 18:41:25 +0000 (18:41 +0000)
is only a single return from the function!

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3878 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Transforms/IPO/InlineSimple.cpp

index d88a923e2257dd8a5898b7e8a1e063d3cfcf0c94..41f849a79888b41854e96c93e37c6d7e50662c8a 100644 (file)
@@ -190,7 +190,18 @@ bool InlineFunction(CallInst *CI) {
       RemapInstruction(II, ValueMap);
   }
 
-  if (PHI) RemapInstruction(PHI, ValueMap);  // Fix the PHI node also...
+  if (PHI) {
+    RemapInstruction(PHI, ValueMap);  // Fix the PHI node also...
+
+    // Check to see if the PHI node only has one argument.  This is a common
+    // case resulting from there only being a single return instruction in the
+    // function call.  Because this is so common, eliminate the PHI node.
+    //
+    if (PHI->getNumIncomingValues() == 1) {
+      PHI->replaceAllUsesWith(PHI->getIncomingValue(0));
+      PHI->getParent()->getInstList().erase(PHI);
+    }
+  }
 
   // Change the branch that used to go to NewBB to branch to the first basic 
   // block of the inlined function.