summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Utils/InlineFunction.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-01-13 18:16:48 +0000
committerChris Lattner <sabre@nondot.org>2006-01-13 18:16:48 +0000
commit257492c0ab9dd065fde3c4ec785deb5be839d8a2 (patch)
tree9a72e4c6d53d49ce9f2cb3bea44292893751cbdb /llvm/lib/Transforms/Utils/InlineFunction.cpp
parent49c4d536bd6f9e5d37e6e98b45e0e37ae39e41ff (diff)
downloadbcm5719-llvm-257492c0ab9dd065fde3c4ec785deb5be839d8a2.tar.gz
bcm5719-llvm-257492c0ab9dd065fde3c4ec785deb5be839d8a2.zip
Fix a bug I noticed by inspection: if the first instruction in the inlined
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. llvm-svn: 25280
Diffstat (limited to 'llvm/lib/Transforms/Utils/InlineFunction.cpp')
-rw-r--r--llvm/lib/Transforms/Utils/InlineFunction.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/Utils/InlineFunction.cpp b/llvm/lib/Transforms/Utils/InlineFunction.cpp
index cf456334475..40d02ab4bc9 100644
--- a/llvm/lib/Transforms/Utils/InlineFunction.cpp
+++ b/llvm/lib/Transforms/Utils/InlineFunction.cpp
@@ -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;
OpenPOWER on IntegriCloud