Oops, FunctionContainsEscapingAllocas is really used to mean two different
authorNick Lewycky <nicholas@mxc.ca>
Sat, 7 Nov 2009 07:42:38 +0000 (07:42 +0000)
committerNick Lewycky <nicholas@mxc.ca>
Sat, 7 Nov 2009 07:42:38 +0000 (07:42 +0000)
things. Back out part of r86349 for a moment.

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

lib/Transforms/Scalar/TailRecursionElimination.cpp
test/Transforms/TailCallElim/nocapture.ll

index 1b8ed4127c4b7537f67c5ead640ea4699c428873..e05991373a8df6484a736dd9dde7c7121502859b 100644 (file)
@@ -91,6 +91,15 @@ FunctionPass *llvm::createTailCallEliminationPass() {
   return new TailCallElim();
 }
 
+/// AllocaMightEscapeToCalls - Return true if this alloca may be accessed by
+/// callees of this function.  We only do very simple analysis right now, this
+/// could be expanded in the future to use mod/ref information for particular
+/// call sites if desired.
+static bool AllocaMightEscapeToCalls(AllocaInst *AI) {
+  // FIXME: do simple 'address taken' analysis.
+  return true;
+}
+
 /// CheckForEscapingAllocas - Scan the specified basic block for alloca
 /// instructions.  If it contains any that might be accessed by calls, return
 /// true.
@@ -99,7 +108,7 @@ static bool CheckForEscapingAllocas(BasicBlock *BB,
   bool RetVal = false;
   for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
     if (AllocaInst *AI = dyn_cast<AllocaInst>(I)) {
-      RetVal |= PointerMayBeCaptured(AI, true);
+      RetVal |= AllocaMightEscapeToCalls(AI);
 
       // If this alloca is in the body of the function, or if it is a variable
       // sized allocation, we cannot tail call eliminate calls marked 'tail'
@@ -145,7 +154,6 @@ bool TailCallElim::runOnFunction(Function &F) {
   /// 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)
index 92dc374a93c1c54d72686e3f5f55972bce31dcee..87cb9dd427b47187f2933a8a159c967f82b5dd77 100644 (file)
@@ -1,4 +1,5 @@
 ; RUN: opt %s -tailcallelim -S | FileCheck %s
+; XFAIL: *
 
 declare void @use(i8* nocapture, i8* nocapture)