Fix a bug I noticed by inspection: if the first instruction in the inlined
authorChris Lattner <sabre@nondot.org>
Fri, 13 Jan 2006 18:16:48 +0000 (18:16 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 13 Jan 2006 18:16:48 +0000 (18:16 +0000)
function was not an alloca, we wouldn't check the entry block for any allocas,
leading to increased stack space in some cases.  In practice, allocas are almost
always at the top of the block, so this was never noticed.

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

lib/Transforms/Utils/InlineFunction.cpp

index cf4563344750238df4e644a34bc60e817b1f724c..40d02ab4bc92cae72c79f2ec86283fe05084bfa7 100644 (file)
@@ -10,9 +10,6 @@
 // This file implements inlining of a function into a call site, resolving
 // parameters and the return value as appropriate.
 //
-// FIXME: This pass should transform alloca instructions in the called function
-// into alloca/dealloca pairs!  Or perhaps it should refuse to inline them!
-//
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Transforms/Utils/Cloning.h"
@@ -87,13 +84,14 @@ bool llvm::InlineFunction(CallSite CS) {
   // calculate which instruction they should be inserted before.  We insert the
   // instructions at the end of the current alloca list.
   //
-  if (isa<AllocaInst>(FirstNewBlock->begin())) {
+  {
     BasicBlock::iterator InsertPoint = Caller->begin()->begin();
     for (BasicBlock::iterator I = FirstNewBlock->begin(),
            E = FirstNewBlock->end(); I != E; )
       if (AllocaInst *AI = dyn_cast<AllocaInst>(I++))
         if (isa<Constant>(AI->getArraySize())) {
-          // Scan for the block of allocas that we can move over.
+          // Scan for the block of allocas that we can move over, and move them
+          // all at once.
           while (isa<AllocaInst>(I) &&
                  isa<Constant>(cast<AllocaInst>(I)->getArraySize()))
             ++I;