summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2006-10-22 18:42:26 +0000
committerChris Lattner <sabre@nondot.org>2006-10-22 18:42:26 +0000
commit250eff20dab7763a94c263972faef876d6965599 (patch)
tree419726489bdc84853eb7c50607b4d8fdebad7fd5 /llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
parentaa1c614784ccc78b0bc2e655ab08aee4a37bee7c (diff)
downloadbcm5719-llvm-250eff20dab7763a94c263972faef876d6965599.tar.gz
bcm5719-llvm-250eff20dab7763a94c263972faef876d6965599.zip
Add a workaround for PR962, disabling the more aggressive form of this
transformation. This speeds up a C++ app 2.25x. llvm-svn: 31113
Diffstat (limited to 'llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
index 5b46007e42b..14c4d8bdc74 100644
--- a/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
+++ b/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
@@ -140,6 +140,14 @@ bool TailCallElim::runOnFunction(Function &F) {
FunctionContainsEscapingAllocas |=
CheckForEscapingAllocas(BB, CannotTCETailMarkedCall);
}
+
+ /// FIXME: The code generator produces really bad code when an 'escaping
+ /// alloca' is changed from being a static alloca to being a dynamic alloca.
+ /// Until this is resolved, disable this transformation if that would ever
+ /// happen. This bug is PR962.
+ if (FunctionContainsEscapingAllocas)
+ return false;
+
// Second pass, change any tail calls to loops.
for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
OpenPOWER on IntegriCloud