]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - contrib/llvm/lib/Transforms/Scalar/TailRecursionElimination.cpp
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / contrib / llvm / lib / Transforms / Scalar / TailRecursionElimination.cpp
1 //===- TailRecursionElimination.cpp - Eliminate Tail Calls ----------------===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 //
10 // This file transforms calls of the current function (self recursion) followed
11 // by a return instruction with a branch to the entry of the function, creating
12 // a loop.  This pass also implements the following extensions to the basic
13 // algorithm:
14 //
15 //  1. Trivial instructions between the call and return do not prevent the
16 //     transformation from taking place, though currently the analysis cannot
17 //     support moving any really useful instructions (only dead ones).
18 //  2. This pass transforms functions that are prevented from being tail
19 //     recursive by an associative and commutative expression to use an
20 //     accumulator variable, thus compiling the typical naive factorial or
21 //     'fib' implementation into efficient code.
22 //  3. TRE is performed if the function returns void, if the return
23 //     returns the result returned by the call, or if the function returns a
24 //     run-time constant on all exits from the function.  It is possible, though
25 //     unlikely, that the return returns something else (like constant 0), and
26 //     can still be TRE'd.  It can be TRE'd if ALL OTHER return instructions in
27 //     the function return the exact same value.
28 //  4. If it can prove that callees do not access their caller stack frame,
29 //     they are marked as eligible for tail call elimination (by the code
30 //     generator).
31 //
32 // There are several improvements that could be made:
33 //
34 //  1. If the function has any alloca instructions, these instructions will be
35 //     moved out of the entry block of the function, causing them to be
36 //     evaluated each time through the tail recursion.  Safely keeping allocas
37 //     in the entry block requires analysis to proves that the tail-called
38 //     function does not read or write the stack object.
39 //  2. Tail recursion is only performed if the call immediately precedes the
40 //     return instruction.  It's possible that there could be a jump between
41 //     the call and the return.
42 //  3. There can be intervening operations between the call and the return that
43 //     prevent the TRE from occurring.  For example, there could be GEP's and
44 //     stores to memory that will not be read or written by the call.  This
45 //     requires some substantial analysis (such as with DSA) to prove safe to
46 //     move ahead of the call, but doing so could allow many more TREs to be
47 //     performed, for example in TreeAdd/TreeAlloc from the treeadd benchmark.
48 //  4. The algorithm we use to detect if callees access their caller stack
49 //     frames is very primitive.
50 //
51 //===----------------------------------------------------------------------===//
52
53 #define DEBUG_TYPE "tailcallelim"
54 #include "llvm/Transforms/Scalar.h"
55 #include "llvm/ADT/STLExtras.h"
56 #include "llvm/ADT/Statistic.h"
57 #include "llvm/Analysis/CaptureTracking.h"
58 #include "llvm/Analysis/InlineCost.h"
59 #include "llvm/Analysis/InstructionSimplify.h"
60 #include "llvm/Analysis/Loads.h"
61 #include "llvm/Analysis/TargetTransformInfo.h"
62 #include "llvm/IR/Constants.h"
63 #include "llvm/IR/DerivedTypes.h"
64 #include "llvm/IR/Function.h"
65 #include "llvm/IR/Instructions.h"
66 #include "llvm/IR/IntrinsicInst.h"
67 #include "llvm/IR/Module.h"
68 #include "llvm/Pass.h"
69 #include "llvm/Support/CFG.h"
70 #include "llvm/Support/CallSite.h"
71 #include "llvm/Support/Debug.h"
72 #include "llvm/Support/raw_ostream.h"
73 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
74 #include "llvm/Transforms/Utils/Local.h"
75 using namespace llvm;
76
77 STATISTIC(NumEliminated, "Number of tail calls removed");
78 STATISTIC(NumRetDuped,   "Number of return duplicated");
79 STATISTIC(NumAccumAdded, "Number of accumulators introduced");
80
81 namespace {
82   struct TailCallElim : public FunctionPass {
83     const TargetTransformInfo *TTI;
84
85     static char ID; // Pass identification, replacement for typeid
86     TailCallElim() : FunctionPass(ID) {
87       initializeTailCallElimPass(*PassRegistry::getPassRegistry());
88     }
89
90     virtual void getAnalysisUsage(AnalysisUsage &AU) const;
91
92     virtual bool runOnFunction(Function &F);
93
94   private:
95     CallInst *FindTRECandidate(Instruction *I,
96                                bool CannotTailCallElimCallsMarkedTail);
97     bool EliminateRecursiveTailCall(CallInst *CI, ReturnInst *Ret,
98                                     BasicBlock *&OldEntry,
99                                     bool &TailCallsAreMarkedTail,
100                                     SmallVector<PHINode*, 8> &ArgumentPHIs,
101                                     bool CannotTailCallElimCallsMarkedTail);
102     bool FoldReturnAndProcessPred(BasicBlock *BB,
103                                   ReturnInst *Ret, BasicBlock *&OldEntry,
104                                   bool &TailCallsAreMarkedTail,
105                                   SmallVector<PHINode*, 8> &ArgumentPHIs,
106                                   bool CannotTailCallElimCallsMarkedTail);
107     bool ProcessReturningBlock(ReturnInst *RI, BasicBlock *&OldEntry,
108                                bool &TailCallsAreMarkedTail,
109                                SmallVector<PHINode*, 8> &ArgumentPHIs,
110                                bool CannotTailCallElimCallsMarkedTail);
111     bool CanMoveAboveCall(Instruction *I, CallInst *CI);
112     Value *CanTransformAccumulatorRecursion(Instruction *I, CallInst *CI);
113   };
114 }
115
116 char TailCallElim::ID = 0;
117 INITIALIZE_PASS_BEGIN(TailCallElim, "tailcallelim",
118                       "Tail Call Elimination", false, false)
119 INITIALIZE_AG_DEPENDENCY(TargetTransformInfo)
120 INITIALIZE_PASS_END(TailCallElim, "tailcallelim",
121                     "Tail Call Elimination", false, false)
122
123 // Public interface to the TailCallElimination pass
124 FunctionPass *llvm::createTailCallEliminationPass() {
125   return new TailCallElim();
126 }
127
128 void TailCallElim::getAnalysisUsage(AnalysisUsage &AU) const {
129   AU.addRequired<TargetTransformInfo>();
130 }
131
132 /// AllocaMightEscapeToCalls - Return true if this alloca may be accessed by
133 /// callees of this function.  We only do very simple analysis right now, this
134 /// could be expanded in the future to use mod/ref information for particular
135 /// call sites if desired.
136 static bool AllocaMightEscapeToCalls(AllocaInst *AI) {
137   // FIXME: do simple 'address taken' analysis.
138   return true;
139 }
140
141 /// CheckForEscapingAllocas - Scan the specified basic block for alloca
142 /// instructions.  If it contains any that might be accessed by calls, return
143 /// true.
144 static bool CheckForEscapingAllocas(BasicBlock *BB,
145                                     bool &CannotTCETailMarkedCall) {
146   bool RetVal = false;
147   for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
148     if (AllocaInst *AI = dyn_cast<AllocaInst>(I)) {
149       RetVal |= AllocaMightEscapeToCalls(AI);
150
151       // If this alloca is in the body of the function, or if it is a variable
152       // sized allocation, we cannot tail call eliminate calls marked 'tail'
153       // with this mechanism.
154       if (BB != &BB->getParent()->getEntryBlock() ||
155           !isa<ConstantInt>(AI->getArraySize()))
156         CannotTCETailMarkedCall = true;
157     }
158   return RetVal;
159 }
160
161 bool TailCallElim::runOnFunction(Function &F) {
162   // If this function is a varargs function, we won't be able to PHI the args
163   // right, so don't even try to convert it...
164   if (F.getFunctionType()->isVarArg()) return false;
165
166   TTI = &getAnalysis<TargetTransformInfo>();
167   BasicBlock *OldEntry = 0;
168   bool TailCallsAreMarkedTail = false;
169   SmallVector<PHINode*, 8> ArgumentPHIs;
170   bool MadeChange = false;
171   bool FunctionContainsEscapingAllocas = false;
172
173   // CannotTCETailMarkedCall - If true, we cannot perform TCE on tail calls
174   // marked with the 'tail' attribute, because doing so would cause the stack
175   // size to increase (real TCE would deallocate variable sized allocas, TCE
176   // doesn't).
177   bool CannotTCETailMarkedCall = false;
178
179   // Loop over the function, looking for any returning blocks, and keeping track
180   // of whether this function has any non-trivially used allocas.
181   for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
182     if (FunctionContainsEscapingAllocas && CannotTCETailMarkedCall)
183       break;
184
185     FunctionContainsEscapingAllocas |=
186       CheckForEscapingAllocas(BB, CannotTCETailMarkedCall);
187   }
188
189   /// FIXME: The code generator produces really bad code when an 'escaping
190   /// alloca' is changed from being a static alloca to being a dynamic alloca.
191   /// Until this is resolved, disable this transformation if that would ever
192   /// happen.  This bug is PR962.
193   if (FunctionContainsEscapingAllocas)
194     return false;
195
196   // Second pass, change any tail calls to loops.
197   for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB) {
198     if (ReturnInst *Ret = dyn_cast<ReturnInst>(BB->getTerminator())) {
199       bool Change = ProcessReturningBlock(Ret, OldEntry, TailCallsAreMarkedTail,
200                                           ArgumentPHIs,CannotTCETailMarkedCall);
201       if (!Change && BB->getFirstNonPHIOrDbg() == Ret)
202         Change = FoldReturnAndProcessPred(BB, Ret, OldEntry,
203                                           TailCallsAreMarkedTail, ArgumentPHIs,
204                                           CannotTCETailMarkedCall);
205       MadeChange |= Change;
206     }
207   }
208
209   // If we eliminated any tail recursions, it's possible that we inserted some
210   // silly PHI nodes which just merge an initial value (the incoming operand)
211   // with themselves.  Check to see if we did and clean up our mess if so.  This
212   // occurs when a function passes an argument straight through to its tail
213   // call.
214   if (!ArgumentPHIs.empty()) {
215     for (unsigned i = 0, e = ArgumentPHIs.size(); i != e; ++i) {
216       PHINode *PN = ArgumentPHIs[i];
217
218       // If the PHI Node is a dynamic constant, replace it with the value it is.
219       if (Value *PNV = SimplifyInstruction(PN)) {
220         PN->replaceAllUsesWith(PNV);
221         PN->eraseFromParent();
222       }
223     }
224   }
225
226   // Finally, if this function contains no non-escaping allocas, or calls
227   // setjmp, mark all calls in the function as eligible for tail calls
228   //(there is no stack memory for them to access).
229   if (!FunctionContainsEscapingAllocas && !F.callsFunctionThatReturnsTwice())
230     for (Function::iterator BB = F.begin(), E = F.end(); BB != E; ++BB)
231       for (BasicBlock::iterator I = BB->begin(), E = BB->end(); I != E; ++I)
232         if (CallInst *CI = dyn_cast<CallInst>(I)) {
233           CI->setTailCall();
234           MadeChange = true;
235         }
236
237   return MadeChange;
238 }
239
240
241 /// CanMoveAboveCall - Return true if it is safe to move the specified
242 /// instruction from after the call to before the call, assuming that all
243 /// instructions between the call and this instruction are movable.
244 ///
245 bool TailCallElim::CanMoveAboveCall(Instruction *I, CallInst *CI) {
246   // FIXME: We can move load/store/call/free instructions above the call if the
247   // call does not mod/ref the memory location being processed.
248   if (I->mayHaveSideEffects())  // This also handles volatile loads.
249     return false;
250
251   if (LoadInst *L = dyn_cast<LoadInst>(I)) {
252     // Loads may always be moved above calls without side effects.
253     if (CI->mayHaveSideEffects()) {
254       // Non-volatile loads may be moved above a call with side effects if it
255       // does not write to memory and the load provably won't trap.
256       // FIXME: Writes to memory only matter if they may alias the pointer
257       // being loaded from.
258       if (CI->mayWriteToMemory() ||
259           !isSafeToLoadUnconditionally(L->getPointerOperand(), L,
260                                        L->getAlignment()))
261         return false;
262     }
263   }
264
265   // Otherwise, if this is a side-effect free instruction, check to make sure
266   // that it does not use the return value of the call.  If it doesn't use the
267   // return value of the call, it must only use things that are defined before
268   // the call, or movable instructions between the call and the instruction
269   // itself.
270   for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
271     if (I->getOperand(i) == CI)
272       return false;
273   return true;
274 }
275
276 // isDynamicConstant - Return true if the specified value is the same when the
277 // return would exit as it was when the initial iteration of the recursive
278 // function was executed.
279 //
280 // We currently handle static constants and arguments that are not modified as
281 // part of the recursion.
282 //
283 static bool isDynamicConstant(Value *V, CallInst *CI, ReturnInst *RI) {
284   if (isa<Constant>(V)) return true; // Static constants are always dyn consts
285
286   // Check to see if this is an immutable argument, if so, the value
287   // will be available to initialize the accumulator.
288   if (Argument *Arg = dyn_cast<Argument>(V)) {
289     // Figure out which argument number this is...
290     unsigned ArgNo = 0;
291     Function *F = CI->getParent()->getParent();
292     for (Function::arg_iterator AI = F->arg_begin(); &*AI != Arg; ++AI)
293       ++ArgNo;
294
295     // If we are passing this argument into call as the corresponding
296     // argument operand, then the argument is dynamically constant.
297     // Otherwise, we cannot transform this function safely.
298     if (CI->getArgOperand(ArgNo) == Arg)
299       return true;
300   }
301
302   // Switch cases are always constant integers. If the value is being switched
303   // on and the return is only reachable from one of its cases, it's
304   // effectively constant.
305   if (BasicBlock *UniquePred = RI->getParent()->getUniquePredecessor())
306     if (SwitchInst *SI = dyn_cast<SwitchInst>(UniquePred->getTerminator()))
307       if (SI->getCondition() == V)
308         return SI->getDefaultDest() != RI->getParent();
309
310   // Not a constant or immutable argument, we can't safely transform.
311   return false;
312 }
313
314 // getCommonReturnValue - Check to see if the function containing the specified
315 // tail call consistently returns the same runtime-constant value at all exit
316 // points except for IgnoreRI.  If so, return the returned value.
317 //
318 static Value *getCommonReturnValue(ReturnInst *IgnoreRI, CallInst *CI) {
319   Function *F = CI->getParent()->getParent();
320   Value *ReturnedValue = 0;
321
322   for (Function::iterator BBI = F->begin(), E = F->end(); BBI != E; ++BBI) {
323     ReturnInst *RI = dyn_cast<ReturnInst>(BBI->getTerminator());
324     if (RI == 0 || RI == IgnoreRI) continue;
325
326     // We can only perform this transformation if the value returned is
327     // evaluatable at the start of the initial invocation of the function,
328     // instead of at the end of the evaluation.
329     //
330     Value *RetOp = RI->getOperand(0);
331     if (!isDynamicConstant(RetOp, CI, RI))
332       return 0;
333
334     if (ReturnedValue && RetOp != ReturnedValue)
335       return 0;     // Cannot transform if differing values are returned.
336     ReturnedValue = RetOp;
337   }
338   return ReturnedValue;
339 }
340
341 /// CanTransformAccumulatorRecursion - If the specified instruction can be
342 /// transformed using accumulator recursion elimination, return the constant
343 /// which is the start of the accumulator value.  Otherwise return null.
344 ///
345 Value *TailCallElim::CanTransformAccumulatorRecursion(Instruction *I,
346                                                       CallInst *CI) {
347   if (!I->isAssociative() || !I->isCommutative()) return 0;
348   assert(I->getNumOperands() == 2 &&
349          "Associative/commutative operations should have 2 args!");
350
351   // Exactly one operand should be the result of the call instruction.
352   if ((I->getOperand(0) == CI && I->getOperand(1) == CI) ||
353       (I->getOperand(0) != CI && I->getOperand(1) != CI))
354     return 0;
355
356   // The only user of this instruction we allow is a single return instruction.
357   if (!I->hasOneUse() || !isa<ReturnInst>(I->use_back()))
358     return 0;
359
360   // Ok, now we have to check all of the other return instructions in this
361   // function.  If they return non-constants or differing values, then we cannot
362   // transform the function safely.
363   return getCommonReturnValue(cast<ReturnInst>(I->use_back()), CI);
364 }
365
366 static Instruction *FirstNonDbg(BasicBlock::iterator I) {
367   while (isa<DbgInfoIntrinsic>(I))
368     ++I;
369   return &*I;
370 }
371
372 CallInst*
373 TailCallElim::FindTRECandidate(Instruction *TI,
374                                bool CannotTailCallElimCallsMarkedTail) {
375   BasicBlock *BB = TI->getParent();
376   Function *F = BB->getParent();
377
378   if (&BB->front() == TI) // Make sure there is something before the terminator.
379     return 0;
380
381   // Scan backwards from the return, checking to see if there is a tail call in
382   // this block.  If so, set CI to it.
383   CallInst *CI = 0;
384   BasicBlock::iterator BBI = TI;
385   while (true) {
386     CI = dyn_cast<CallInst>(BBI);
387     if (CI && CI->getCalledFunction() == F)
388       break;
389
390     if (BBI == BB->begin())
391       return 0;          // Didn't find a potential tail call.
392     --BBI;
393   }
394
395   // If this call is marked as a tail call, and if there are dynamic allocas in
396   // the function, we cannot perform this optimization.
397   if (CI->isTailCall() && CannotTailCallElimCallsMarkedTail)
398     return 0;
399
400   // As a special case, detect code like this:
401   //   double fabs(double f) { return __builtin_fabs(f); } // a 'fabs' call
402   // and disable this xform in this case, because the code generator will
403   // lower the call to fabs into inline code.
404   if (BB == &F->getEntryBlock() &&
405       FirstNonDbg(BB->front()) == CI &&
406       FirstNonDbg(llvm::next(BB->begin())) == TI &&
407       CI->getCalledFunction() &&
408       !TTI->isLoweredToCall(CI->getCalledFunction())) {
409     // A single-block function with just a call and a return. Check that
410     // the arguments match.
411     CallSite::arg_iterator I = CallSite(CI).arg_begin(),
412                            E = CallSite(CI).arg_end();
413     Function::arg_iterator FI = F->arg_begin(),
414                            FE = F->arg_end();
415     for (; I != E && FI != FE; ++I, ++FI)
416       if (*I != &*FI) break;
417     if (I == E && FI == FE)
418       return 0;
419   }
420
421   return CI;
422 }
423
424 bool TailCallElim::EliminateRecursiveTailCall(CallInst *CI, ReturnInst *Ret,
425                                        BasicBlock *&OldEntry,
426                                        bool &TailCallsAreMarkedTail,
427                                        SmallVector<PHINode*, 8> &ArgumentPHIs,
428                                        bool CannotTailCallElimCallsMarkedTail) {
429   // If we are introducing accumulator recursion to eliminate operations after
430   // the call instruction that are both associative and commutative, the initial
431   // value for the accumulator is placed in this variable.  If this value is set
432   // then we actually perform accumulator recursion elimination instead of
433   // simple tail recursion elimination.  If the operation is an LLVM instruction
434   // (eg: "add") then it is recorded in AccumulatorRecursionInstr.  If not, then
435   // we are handling the case when the return instruction returns a constant C
436   // which is different to the constant returned by other return instructions
437   // (which is recorded in AccumulatorRecursionEliminationInitVal).  This is a
438   // special case of accumulator recursion, the operation being "return C".
439   Value *AccumulatorRecursionEliminationInitVal = 0;
440   Instruction *AccumulatorRecursionInstr = 0;
441
442   // Ok, we found a potential tail call.  We can currently only transform the
443   // tail call if all of the instructions between the call and the return are
444   // movable to above the call itself, leaving the call next to the return.
445   // Check that this is the case now.
446   BasicBlock::iterator BBI = CI;
447   for (++BBI; &*BBI != Ret; ++BBI) {
448     if (CanMoveAboveCall(BBI, CI)) continue;
449
450     // If we can't move the instruction above the call, it might be because it
451     // is an associative and commutative operation that could be transformed
452     // using accumulator recursion elimination.  Check to see if this is the
453     // case, and if so, remember the initial accumulator value for later.
454     if ((AccumulatorRecursionEliminationInitVal =
455                            CanTransformAccumulatorRecursion(BBI, CI))) {
456       // Yes, this is accumulator recursion.  Remember which instruction
457       // accumulates.
458       AccumulatorRecursionInstr = BBI;
459     } else {
460       return false;   // Otherwise, we cannot eliminate the tail recursion!
461     }
462   }
463
464   // We can only transform call/return pairs that either ignore the return value
465   // of the call and return void, ignore the value of the call and return a
466   // constant, return the value returned by the tail call, or that are being
467   // accumulator recursion variable eliminated.
468   if (Ret->getNumOperands() == 1 && Ret->getReturnValue() != CI &&
469       !isa<UndefValue>(Ret->getReturnValue()) &&
470       AccumulatorRecursionEliminationInitVal == 0 &&
471       !getCommonReturnValue(0, CI)) {
472     // One case remains that we are able to handle: the current return
473     // instruction returns a constant, and all other return instructions
474     // return a different constant.
475     if (!isDynamicConstant(Ret->getReturnValue(), CI, Ret))
476       return false; // Current return instruction does not return a constant.
477     // Check that all other return instructions return a common constant.  If
478     // so, record it in AccumulatorRecursionEliminationInitVal.
479     AccumulatorRecursionEliminationInitVal = getCommonReturnValue(Ret, CI);
480     if (!AccumulatorRecursionEliminationInitVal)
481       return false;
482   }
483
484   BasicBlock *BB = Ret->getParent();
485   Function *F = BB->getParent();
486
487   // OK! We can transform this tail call.  If this is the first one found,
488   // create the new entry block, allowing us to branch back to the old entry.
489   if (OldEntry == 0) {
490     OldEntry = &F->getEntryBlock();
491     BasicBlock *NewEntry = BasicBlock::Create(F->getContext(), "", F, OldEntry);
492     NewEntry->takeName(OldEntry);
493     OldEntry->setName("tailrecurse");
494     BranchInst::Create(OldEntry, NewEntry);
495
496     // If this tail call is marked 'tail' and if there are any allocas in the
497     // entry block, move them up to the new entry block.
498     TailCallsAreMarkedTail = CI->isTailCall();
499     if (TailCallsAreMarkedTail)
500       // Move all fixed sized allocas from OldEntry to NewEntry.
501       for (BasicBlock::iterator OEBI = OldEntry->begin(), E = OldEntry->end(),
502              NEBI = NewEntry->begin(); OEBI != E; )
503         if (AllocaInst *AI = dyn_cast<AllocaInst>(OEBI++))
504           if (isa<ConstantInt>(AI->getArraySize()))
505             AI->moveBefore(NEBI);
506
507     // Now that we have created a new block, which jumps to the entry
508     // block, insert a PHI node for each argument of the function.
509     // For now, we initialize each PHI to only have the real arguments
510     // which are passed in.
511     Instruction *InsertPos = OldEntry->begin();
512     for (Function::arg_iterator I = F->arg_begin(), E = F->arg_end();
513          I != E; ++I) {
514       PHINode *PN = PHINode::Create(I->getType(), 2,
515                                     I->getName() + ".tr", InsertPos);
516       I->replaceAllUsesWith(PN); // Everyone use the PHI node now!
517       PN->addIncoming(I, NewEntry);
518       ArgumentPHIs.push_back(PN);
519     }
520   }
521
522   // If this function has self recursive calls in the tail position where some
523   // are marked tail and some are not, only transform one flavor or another.  We
524   // have to choose whether we move allocas in the entry block to the new entry
525   // block or not, so we can't make a good choice for both.  NOTE: We could do
526   // slightly better here in the case that the function has no entry block
527   // allocas.
528   if (TailCallsAreMarkedTail && !CI->isTailCall())
529     return false;
530
531   // Ok, now that we know we have a pseudo-entry block WITH all of the
532   // required PHI nodes, add entries into the PHI node for the actual
533   // parameters passed into the tail-recursive call.
534   for (unsigned i = 0, e = CI->getNumArgOperands(); i != e; ++i)
535     ArgumentPHIs[i]->addIncoming(CI->getArgOperand(i), BB);
536
537   // If we are introducing an accumulator variable to eliminate the recursion,
538   // do so now.  Note that we _know_ that no subsequent tail recursion
539   // eliminations will happen on this function because of the way the
540   // accumulator recursion predicate is set up.
541   //
542   if (AccumulatorRecursionEliminationInitVal) {
543     Instruction *AccRecInstr = AccumulatorRecursionInstr;
544     // Start by inserting a new PHI node for the accumulator.
545     pred_iterator PB = pred_begin(OldEntry), PE = pred_end(OldEntry);
546     PHINode *AccPN =
547       PHINode::Create(AccumulatorRecursionEliminationInitVal->getType(),
548                       std::distance(PB, PE) + 1,
549                       "accumulator.tr", OldEntry->begin());
550
551     // Loop over all of the predecessors of the tail recursion block.  For the
552     // real entry into the function we seed the PHI with the initial value,
553     // computed earlier.  For any other existing branches to this block (due to
554     // other tail recursions eliminated) the accumulator is not modified.
555     // Because we haven't added the branch in the current block to OldEntry yet,
556     // it will not show up as a predecessor.
557     for (pred_iterator PI = PB; PI != PE; ++PI) {
558       BasicBlock *P = *PI;
559       if (P == &F->getEntryBlock())
560         AccPN->addIncoming(AccumulatorRecursionEliminationInitVal, P);
561       else
562         AccPN->addIncoming(AccPN, P);
563     }
564
565     if (AccRecInstr) {
566       // Add an incoming argument for the current block, which is computed by
567       // our associative and commutative accumulator instruction.
568       AccPN->addIncoming(AccRecInstr, BB);
569
570       // Next, rewrite the accumulator recursion instruction so that it does not
571       // use the result of the call anymore, instead, use the PHI node we just
572       // inserted.
573       AccRecInstr->setOperand(AccRecInstr->getOperand(0) != CI, AccPN);
574     } else {
575       // Add an incoming argument for the current block, which is just the
576       // constant returned by the current return instruction.
577       AccPN->addIncoming(Ret->getReturnValue(), BB);
578     }
579
580     // Finally, rewrite any return instructions in the program to return the PHI
581     // node instead of the "initval" that they do currently.  This loop will
582     // actually rewrite the return value we are destroying, but that's ok.
583     for (Function::iterator BBI = F->begin(), E = F->end(); BBI != E; ++BBI)
584       if (ReturnInst *RI = dyn_cast<ReturnInst>(BBI->getTerminator()))
585         RI->setOperand(0, AccPN);
586     ++NumAccumAdded;
587   }
588
589   // Now that all of the PHI nodes are in place, remove the call and
590   // ret instructions, replacing them with an unconditional branch.
591   BranchInst *NewBI = BranchInst::Create(OldEntry, Ret);
592   NewBI->setDebugLoc(CI->getDebugLoc());
593
594   BB->getInstList().erase(Ret);  // Remove return.
595   BB->getInstList().erase(CI);   // Remove call.
596   ++NumEliminated;
597   return true;
598 }
599
600 bool TailCallElim::FoldReturnAndProcessPred(BasicBlock *BB,
601                                        ReturnInst *Ret, BasicBlock *&OldEntry,
602                                        bool &TailCallsAreMarkedTail,
603                                        SmallVector<PHINode*, 8> &ArgumentPHIs,
604                                        bool CannotTailCallElimCallsMarkedTail) {
605   bool Change = false;
606
607   // If the return block contains nothing but the return and PHI's,
608   // there might be an opportunity to duplicate the return in its
609   // predecessors and perform TRC there. Look for predecessors that end
610   // in unconditional branch and recursive call(s).
611   SmallVector<BranchInst*, 8> UncondBranchPreds;
612   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
613     BasicBlock *Pred = *PI;
614     TerminatorInst *PTI = Pred->getTerminator();
615     if (BranchInst *BI = dyn_cast<BranchInst>(PTI))
616       if (BI->isUnconditional())
617         UncondBranchPreds.push_back(BI);
618   }
619
620   while (!UncondBranchPreds.empty()) {
621     BranchInst *BI = UncondBranchPreds.pop_back_val();
622     BasicBlock *Pred = BI->getParent();
623     if (CallInst *CI = FindTRECandidate(BI, CannotTailCallElimCallsMarkedTail)){
624       DEBUG(dbgs() << "FOLDING: " << *BB
625             << "INTO UNCOND BRANCH PRED: " << *Pred);
626       EliminateRecursiveTailCall(CI, FoldReturnIntoUncondBranch(Ret, BB, Pred),
627                                  OldEntry, TailCallsAreMarkedTail, ArgumentPHIs,
628                                  CannotTailCallElimCallsMarkedTail);
629       ++NumRetDuped;
630       Change = true;
631     }
632   }
633
634   return Change;
635 }
636
637 bool TailCallElim::ProcessReturningBlock(ReturnInst *Ret, BasicBlock *&OldEntry,
638                                          bool &TailCallsAreMarkedTail,
639                                          SmallVector<PHINode*, 8> &ArgumentPHIs,
640                                        bool CannotTailCallElimCallsMarkedTail) {
641   CallInst *CI = FindTRECandidate(Ret, CannotTailCallElimCallsMarkedTail);
642   if (!CI)
643     return false;
644
645   return EliminateRecursiveTailCall(CI, Ret, OldEntry, TailCallsAreMarkedTail,
646                                     ArgumentPHIs,
647                                     CannotTailCallElimCallsMarkedTail);
648 }