IndVarSimplify preserves ScalarEvolution. In the
[oota-llvm.git] / lib / Transforms / Scalar / IndVarSimplify.cpp
1 //===- IndVarSimplify.cpp - Induction Variable Elimination ----------------===//
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 transformation analyzes and transforms the induction variables (and
11 // computations derived from them) into simpler forms suitable for subsequent
12 // analysis and transformation.
13 //
14 // This transformation makes the following changes to each loop with an
15 // identifiable induction variable:
16 //   1. All loops are transformed to have a SINGLE canonical induction variable
17 //      which starts at zero and steps by one.
18 //   2. The canonical induction variable is guaranteed to be the first PHI node
19 //      in the loop header block.
20 //   3. Any pointer arithmetic recurrences are raised to use array subscripts.
21 //
22 // If the trip count of a loop is computable, this pass also makes the following
23 // changes:
24 //   1. The exit condition for the loop is canonicalized to compare the
25 //      induction value against the exit value.  This turns loops like:
26 //        'for (i = 7; i*i < 1000; ++i)' into 'for (i = 0; i != 25; ++i)'
27 //   2. Any use outside of the loop of an expression derived from the indvar
28 //      is changed to compute the derived value outside of the loop, eliminating
29 //      the dependence on the exit value of the induction variable.  If the only
30 //      purpose of the loop is to compute the exit value of some derived
31 //      expression, this transformation will make the loop dead.
32 //
33 // This transformation should be followed by strength reduction after all of the
34 // desired loop transformations have been performed.  Additionally, on targets
35 // where it is profitable, the loop could be transformed to count down to zero
36 // (the "do loop" optimization).
37 //
38 //===----------------------------------------------------------------------===//
39
40 #define DEBUG_TYPE "indvars"
41 #include "llvm/Transforms/Scalar.h"
42 #include "llvm/BasicBlock.h"
43 #include "llvm/Constants.h"
44 #include "llvm/Instructions.h"
45 #include "llvm/Type.h"
46 #include "llvm/Analysis/ScalarEvolutionExpander.h"
47 #include "llvm/Analysis/LoopInfo.h"
48 #include "llvm/Analysis/LoopPass.h"
49 #include "llvm/Support/CFG.h"
50 #include "llvm/Support/Compiler.h"
51 #include "llvm/Support/Debug.h"
52 #include "llvm/Support/GetElementPtrTypeIterator.h"
53 #include "llvm/Transforms/Utils/Local.h"
54 #include "llvm/Support/CommandLine.h"
55 #include "llvm/ADT/SmallVector.h"
56 #include "llvm/ADT/SetVector.h"
57 #include "llvm/ADT/SmallPtrSet.h"
58 #include "llvm/ADT/Statistic.h"
59 using namespace llvm;
60
61 STATISTIC(NumRemoved , "Number of aux indvars removed");
62 STATISTIC(NumPointer , "Number of pointer indvars promoted");
63 STATISTIC(NumInserted, "Number of canonical indvars added");
64 STATISTIC(NumReplaced, "Number of exit values replaced");
65 STATISTIC(NumLFTR    , "Number of loop exit tests replaced");
66
67 namespace {
68   class VISIBILITY_HIDDEN IndVarSimplify : public LoopPass {
69     LoopInfo        *LI;
70     ScalarEvolution *SE;
71     bool Changed;
72   public:
73
74    static char ID; // Pass identification, replacement for typeid
75    IndVarSimplify() : LoopPass(&ID) {}
76
77    virtual bool runOnLoop(Loop *L, LPPassManager &LPM);
78
79    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
80      AU.addRequired<ScalarEvolution>();
81      AU.addRequiredID(LCSSAID);
82      AU.addRequiredID(LoopSimplifyID);
83      AU.addRequired<LoopInfo>();
84      AU.addPreserved<ScalarEvolution>();
85      AU.addPreservedID(LoopSimplifyID);
86      AU.addPreservedID(LCSSAID);
87      AU.setPreservesCFG();
88    }
89
90   private:
91
92     void RewriteNonIntegerIVs(Loop *L);
93
94     void EliminatePointerRecurrence(PHINode *PN, BasicBlock *Preheader,
95                                     SmallPtrSet<Instruction*, 16> &DeadInsts);
96     void LinearFunctionTestReplace(Loop *L, SCEVHandle IterationCount,
97                                    Value *IndVar,
98                                    BasicBlock *ExitingBlock,
99                                    BranchInst *BI,
100                                    SCEVExpander &Rewriter,
101                                    bool SignExtendTripCount);
102     void RewriteLoopExitValues(Loop *L, SCEV *IterationCount);
103
104     void DeleteTriviallyDeadInstructions(SmallPtrSet<Instruction*, 16> &Insts);
105
106     void HandleFloatingPointIV(Loop *L, PHINode *PH,
107                                SmallPtrSet<Instruction*, 16> &DeadInsts);
108   };
109 }
110
111 char IndVarSimplify::ID = 0;
112 static RegisterPass<IndVarSimplify>
113 X("indvars", "Canonicalize Induction Variables");
114
115 Pass *llvm::createIndVarSimplifyPass() {
116   return new IndVarSimplify();
117 }
118
119 /// DeleteTriviallyDeadInstructions - If any of the instructions is the
120 /// specified set are trivially dead, delete them and see if this makes any of
121 /// their operands subsequently dead.
122 void IndVarSimplify::
123 DeleteTriviallyDeadInstructions(SmallPtrSet<Instruction*, 16> &Insts) {
124   while (!Insts.empty()) {
125     Instruction *I = *Insts.begin();
126     Insts.erase(I);
127     if (isInstructionTriviallyDead(I)) {
128       for (unsigned i = 0, e = I->getNumOperands(); i != e; ++i)
129         if (Instruction *U = dyn_cast<Instruction>(I->getOperand(i)))
130           Insts.insert(U);
131       SE->deleteValueFromRecords(I);
132       DOUT << "INDVARS: Deleting: " << *I;
133       I->eraseFromParent();
134       Changed = true;
135     }
136   }
137 }
138
139
140 /// EliminatePointerRecurrence - Check to see if this is a trivial GEP pointer
141 /// recurrence.  If so, change it into an integer recurrence, permitting
142 /// analysis by the SCEV routines.
143 void IndVarSimplify::EliminatePointerRecurrence(PHINode *PN,
144                                                 BasicBlock *Preheader,
145                                      SmallPtrSet<Instruction*, 16> &DeadInsts) {
146   assert(PN->getNumIncomingValues() == 2 && "Noncanonicalized loop!");
147   unsigned PreheaderIdx = PN->getBasicBlockIndex(Preheader);
148   unsigned BackedgeIdx = PreheaderIdx^1;
149   if (GetElementPtrInst *GEPI =
150           dyn_cast<GetElementPtrInst>(PN->getIncomingValue(BackedgeIdx)))
151     if (GEPI->getOperand(0) == PN) {
152       assert(GEPI->getNumOperands() == 2 && "GEP types must match!");
153       DOUT << "INDVARS: Eliminating pointer recurrence: " << *GEPI;
154
155       // Okay, we found a pointer recurrence.  Transform this pointer
156       // recurrence into an integer recurrence.  Compute the value that gets
157       // added to the pointer at every iteration.
158       Value *AddedVal = GEPI->getOperand(1);
159
160       // Insert a new integer PHI node into the top of the block.
161       PHINode *NewPhi = PHINode::Create(AddedVal->getType(),
162                                         PN->getName()+".rec", PN);
163       NewPhi->addIncoming(Constant::getNullValue(NewPhi->getType()), Preheader);
164
165       // Create the new add instruction.
166       Value *NewAdd = BinaryOperator::CreateAdd(NewPhi, AddedVal,
167                                                 GEPI->getName()+".rec", GEPI);
168       NewPhi->addIncoming(NewAdd, PN->getIncomingBlock(BackedgeIdx));
169
170       // Update the existing GEP to use the recurrence.
171       GEPI->setOperand(0, PN->getIncomingValue(PreheaderIdx));
172
173       // Update the GEP to use the new recurrence we just inserted.
174       GEPI->setOperand(1, NewAdd);
175
176       // If the incoming value is a constant expr GEP, try peeling out the array
177       // 0 index if possible to make things simpler.
178       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GEPI->getOperand(0)))
179         if (CE->getOpcode() == Instruction::GetElementPtr) {
180           unsigned NumOps = CE->getNumOperands();
181           assert(NumOps > 1 && "CE folding didn't work!");
182           if (CE->getOperand(NumOps-1)->isNullValue()) {
183             // Check to make sure the last index really is an array index.
184             gep_type_iterator GTI = gep_type_begin(CE);
185             for (unsigned i = 1, e = CE->getNumOperands()-1;
186                  i != e; ++i, ++GTI)
187               /*empty*/;
188             if (isa<SequentialType>(*GTI)) {
189               // Pull the last index out of the constant expr GEP.
190               SmallVector<Value*, 8> CEIdxs(CE->op_begin()+1, CE->op_end()-1);
191               Constant *NCE = ConstantExpr::getGetElementPtr(CE->getOperand(0),
192                                                              &CEIdxs[0],
193                                                              CEIdxs.size());
194               Value *Idx[2];
195               Idx[0] = Constant::getNullValue(Type::Int32Ty);
196               Idx[1] = NewAdd;
197               GetElementPtrInst *NGEPI = GetElementPtrInst::Create(
198                   NCE, Idx, Idx + 2,
199                   GEPI->getName(), GEPI);
200               SE->deleteValueFromRecords(GEPI);
201               GEPI->replaceAllUsesWith(NGEPI);
202               GEPI->eraseFromParent();
203               GEPI = NGEPI;
204             }
205           }
206         }
207
208
209       // Finally, if there are any other users of the PHI node, we must
210       // insert a new GEP instruction that uses the pre-incremented version
211       // of the induction amount.
212       if (!PN->use_empty()) {
213         BasicBlock::iterator InsertPos = PN; ++InsertPos;
214         while (isa<PHINode>(InsertPos)) ++InsertPos;
215         Value *PreInc =
216           GetElementPtrInst::Create(PN->getIncomingValue(PreheaderIdx),
217                                     NewPhi, "", InsertPos);
218         PreInc->takeName(PN);
219         PN->replaceAllUsesWith(PreInc);
220       }
221
222       // Delete the old PHI for sure, and the GEP if its otherwise unused.
223       DeadInsts.insert(PN);
224
225       ++NumPointer;
226       Changed = true;
227     }
228 }
229
230 /// LinearFunctionTestReplace - This method rewrites the exit condition of the
231 /// loop to be a canonical != comparison against the incremented loop induction
232 /// variable.  This pass is able to rewrite the exit tests of any loop where the
233 /// SCEV analysis can determine a loop-invariant trip count of the loop, which
234 /// is actually a much broader range than just linear tests.
235 void IndVarSimplify::LinearFunctionTestReplace(Loop *L,
236                                    SCEVHandle IterationCount,
237                                    Value *IndVar,
238                                    BasicBlock *ExitingBlock,
239                                    BranchInst *BI,
240                                    SCEVExpander &Rewriter,
241                                    bool SignExtendTripCount) {
242   // If the exiting block is not the same as the backedge block, we must compare
243   // against the preincremented value, otherwise we prefer to compare against
244   // the post-incremented value.
245   Value *CmpIndVar;
246   if (ExitingBlock == L->getLoopLatch()) {
247     // What ScalarEvolution calls the "iteration count" is actually the
248     // number of times the branch is taken. Add one to get the number
249     // of times the branch is executed. If this addition may overflow,
250     // we have to be more pessimistic and cast the induction variable
251     // before doing the add.
252     SCEVHandle Zero = SE->getIntegerSCEV(0, IterationCount->getType());
253     SCEVHandle N =
254       SE->getAddExpr(IterationCount,
255                      SE->getIntegerSCEV(1, IterationCount->getType()));
256     if ((isa<SCEVConstant>(N) && !N->isZero()) ||
257         SE->isLoopGuardedByCond(L, ICmpInst::ICMP_NE, N, Zero)) {
258       // No overflow. Cast the sum.
259       if (SignExtendTripCount)
260         IterationCount = SE->getTruncateOrSignExtend(N, IndVar->getType());
261       else
262         IterationCount = SE->getTruncateOrZeroExtend(N, IndVar->getType());
263     } else {
264       // Potential overflow. Cast before doing the add.
265       if (SignExtendTripCount)
266         IterationCount = SE->getTruncateOrSignExtend(IterationCount,
267                                                      IndVar->getType());
268       else
269         IterationCount = SE->getTruncateOrZeroExtend(IterationCount,
270                                                      IndVar->getType());
271       IterationCount =
272         SE->getAddExpr(IterationCount,
273                        SE->getIntegerSCEV(1, IndVar->getType()));
274     }
275
276     // The IterationCount expression contains the number of times that the
277     // backedge actually branches to the loop header.  This is one less than the
278     // number of times the loop executes, so add one to it.
279     CmpIndVar = L->getCanonicalInductionVariableIncrement();
280   } else {
281     // We have to use the preincremented value...
282     if (SignExtendTripCount)
283       IterationCount = SE->getTruncateOrSignExtend(IterationCount,
284                                                    IndVar->getType());
285     else
286       IterationCount = SE->getTruncateOrZeroExtend(IterationCount,
287                                                    IndVar->getType());
288     CmpIndVar = IndVar;
289   }
290
291   // Expand the code for the iteration count into the preheader of the loop.
292   BasicBlock *Preheader = L->getLoopPreheader();
293   Value *ExitCnt = Rewriter.expandCodeFor(IterationCount,
294                                           Preheader->getTerminator());
295
296   // Insert a new icmp_ne or icmp_eq instruction before the branch.
297   ICmpInst::Predicate Opcode;
298   if (L->contains(BI->getSuccessor(0)))
299     Opcode = ICmpInst::ICMP_NE;
300   else
301     Opcode = ICmpInst::ICMP_EQ;
302
303   DOUT << "INDVARS: Rewriting loop exit condition to:\n"
304        << "      LHS:" << *CmpIndVar // includes a newline
305        << "       op:\t"
306        << (Opcode == ICmpInst::ICMP_NE ? "!=" : "==") << "\n"
307        << "      RHS:\t" << *IterationCount << "\n";
308
309   Value *Cond = new ICmpInst(Opcode, CmpIndVar, ExitCnt, "exitcond", BI);
310   BI->setCondition(Cond);
311   ++NumLFTR;
312   Changed = true;
313 }
314
315 /// RewriteLoopExitValues - Check to see if this loop has a computable
316 /// loop-invariant execution count.  If so, this means that we can compute the
317 /// final value of any expressions that are recurrent in the loop, and
318 /// substitute the exit values from the loop into any instructions outside of
319 /// the loop that use the final values of the current expressions.
320 void IndVarSimplify::RewriteLoopExitValues(Loop *L, SCEV *IterationCount) {
321   BasicBlock *Preheader = L->getLoopPreheader();
322
323   // Scan all of the instructions in the loop, looking at those that have
324   // extra-loop users and which are recurrences.
325   SCEVExpander Rewriter(*SE, *LI);
326
327   // We insert the code into the preheader of the loop if the loop contains
328   // multiple exit blocks, or in the exit block if there is exactly one.
329   BasicBlock *BlockToInsertInto;
330   SmallVector<BasicBlock*, 8> ExitBlocks;
331   L->getUniqueExitBlocks(ExitBlocks);
332   if (ExitBlocks.size() == 1)
333     BlockToInsertInto = ExitBlocks[0];
334   else
335     BlockToInsertInto = Preheader;
336   BasicBlock::iterator InsertPt = BlockToInsertInto->getFirstNonPHI();
337
338   bool HasConstantItCount = isa<SCEVConstant>(IterationCount);
339
340   SmallPtrSet<Instruction*, 16> InstructionsToDelete;
341   std::map<Instruction*, Value*> ExitValues;
342
343   // Find all values that are computed inside the loop, but used outside of it.
344   // Because of LCSSA, these values will only occur in LCSSA PHI Nodes.  Scan
345   // the exit blocks of the loop to find them.
346   for (unsigned i = 0, e = ExitBlocks.size(); i != e; ++i) {
347     BasicBlock *ExitBB = ExitBlocks[i];
348
349     // If there are no PHI nodes in this exit block, then no values defined
350     // inside the loop are used on this path, skip it.
351     PHINode *PN = dyn_cast<PHINode>(ExitBB->begin());
352     if (!PN) continue;
353
354     unsigned NumPreds = PN->getNumIncomingValues();
355
356     // Iterate over all of the PHI nodes.
357     BasicBlock::iterator BBI = ExitBB->begin();
358     while ((PN = dyn_cast<PHINode>(BBI++))) {
359
360       // Iterate over all of the values in all the PHI nodes.
361       for (unsigned i = 0; i != NumPreds; ++i) {
362         // If the value being merged in is not integer or is not defined
363         // in the loop, skip it.
364         Value *InVal = PN->getIncomingValue(i);
365         if (!isa<Instruction>(InVal) ||
366             // SCEV only supports integer expressions for now.
367             !isa<IntegerType>(InVal->getType()))
368           continue;
369
370         // If this pred is for a subloop, not L itself, skip it.
371         if (LI->getLoopFor(PN->getIncomingBlock(i)) != L)
372           continue; // The Block is in a subloop, skip it.
373
374         // Check that InVal is defined in the loop.
375         Instruction *Inst = cast<Instruction>(InVal);
376         if (!L->contains(Inst->getParent()))
377           continue;
378
379         // We require that this value either have a computable evolution or that
380         // the loop have a constant iteration count.  In the case where the loop
381         // has a constant iteration count, we can sometimes force evaluation of
382         // the exit value through brute force.
383         SCEVHandle SH = SE->getSCEV(Inst);
384         if (!SH->hasComputableLoopEvolution(L) && !HasConstantItCount)
385           continue;          // Cannot get exit evolution for the loop value.
386
387         // Okay, this instruction has a user outside of the current loop
388         // and varies predictably *inside* the loop.  Evaluate the value it
389         // contains when the loop exits, if possible.
390         SCEVHandle ExitValue = SE->getSCEVAtScope(Inst, L->getParentLoop());
391         if (isa<SCEVCouldNotCompute>(ExitValue) ||
392             !ExitValue->isLoopInvariant(L))
393           continue;
394
395         Changed = true;
396         ++NumReplaced;
397
398         // See if we already computed the exit value for the instruction, if so,
399         // just reuse it.
400         Value *&ExitVal = ExitValues[Inst];
401         if (!ExitVal)
402           ExitVal = Rewriter.expandCodeFor(ExitValue, InsertPt);
403
404         DOUT << "INDVARS: RLEV: AfterLoopVal = " << *ExitVal
405              << "  LoopVal = " << *Inst << "\n";
406
407         PN->setIncomingValue(i, ExitVal);
408
409         // If this instruction is dead now, schedule it to be removed.
410         if (Inst->use_empty())
411           InstructionsToDelete.insert(Inst);
412
413         // See if this is a single-entry LCSSA PHI node.  If so, we can (and
414         // have to) remove
415         // the PHI entirely.  This is safe, because the NewVal won't be variant
416         // in the loop, so we don't need an LCSSA phi node anymore.
417         if (NumPreds == 1) {
418           SE->deleteValueFromRecords(PN);
419           PN->replaceAllUsesWith(ExitVal);
420           PN->eraseFromParent();
421           break;
422         }
423       }
424     }
425   }
426
427   DeleteTriviallyDeadInstructions(InstructionsToDelete);
428 }
429
430 void IndVarSimplify::RewriteNonIntegerIVs(Loop *L) {
431   // First step.  Check to see if there are any trivial GEP pointer recurrences.
432   // If there are, change them into integer recurrences, permitting analysis by
433   // the SCEV routines.
434   //
435   BasicBlock *Header    = L->getHeader();
436   BasicBlock *Preheader = L->getLoopPreheader();
437
438   SmallPtrSet<Instruction*, 16> DeadInsts;
439   for (BasicBlock::iterator I = Header->begin(); isa<PHINode>(I); ++I) {
440     PHINode *PN = cast<PHINode>(I);
441     if (isa<PointerType>(PN->getType()))
442       EliminatePointerRecurrence(PN, Preheader, DeadInsts);
443     else
444       HandleFloatingPointIV(L, PN, DeadInsts);
445   }
446
447   // If the loop previously had a pointer or floating-point IV, ScalarEvolution
448   // may not have been able to compute a trip count. Now that we've done some
449   // re-writing, the trip count may be computable.
450   if (Changed)
451     SE->forgetLoopIterationCount(L);
452
453   if (!DeadInsts.empty())
454     DeleteTriviallyDeadInstructions(DeadInsts);
455 }
456
457 /// getEffectiveIndvarType - Determine the widest type that the
458 /// induction-variable PHINode Phi is cast to.
459 ///
460 static const Type *getEffectiveIndvarType(const PHINode *Phi) {
461   const Type *Ty = Phi->getType();
462
463   for (Value::use_const_iterator UI = Phi->use_begin(), UE = Phi->use_end();
464        UI != UE; ++UI) {
465     const Type *CandidateType = NULL;
466     if (const ZExtInst *ZI = dyn_cast<ZExtInst>(UI))
467       CandidateType = ZI->getDestTy();
468     else if (const SExtInst *SI = dyn_cast<SExtInst>(UI))
469       CandidateType = SI->getDestTy();
470     if (CandidateType &&
471         CandidateType->getPrimitiveSizeInBits() >
472           Ty->getPrimitiveSizeInBits())
473       Ty = CandidateType;
474   }
475
476   return Ty;
477 }
478
479 /// TestOrigIVForWrap - Analyze the original induction variable
480 /// that controls the loop's iteration to determine whether it
481 /// would ever undergo signed or unsigned overflow. Also, check
482 /// whether an induction variable in the same type that starts
483 /// at 0 would undergo signed overflow.
484 ///
485 /// In addition to setting the NoSignedWrap, NoUnsignedWrap, and
486 /// SignExtendTripCount variables, return the PHI for this induction
487 /// variable.
488 ///
489 /// TODO: This duplicates a fair amount of ScalarEvolution logic.
490 /// Perhaps this can be merged with ScalarEvolution::getIterationCount
491 /// and/or ScalarEvolution::get{Sign,Zero}ExtendExpr.
492 ///
493 static const PHINode *TestOrigIVForWrap(const Loop *L,
494                                         const BranchInst *BI,
495                                         const Instruction *OrigCond,
496                                         bool &NoSignedWrap,
497                                         bool &NoUnsignedWrap,
498                                         bool &SignExtendTripCount) {
499   // Verify that the loop is sane and find the exit condition.
500   const ICmpInst *Cmp = dyn_cast<ICmpInst>(OrigCond);
501   if (!Cmp) return 0;
502
503   const Value *CmpLHS = Cmp->getOperand(0);
504   const Value *CmpRHS = Cmp->getOperand(1);
505   const BasicBlock *TrueBB = BI->getSuccessor(0);
506   const BasicBlock *FalseBB = BI->getSuccessor(1);
507   ICmpInst::Predicate Pred = Cmp->getPredicate();
508
509   // Canonicalize a constant to the RHS.
510   if (isa<ConstantInt>(CmpLHS)) {
511     Pred = ICmpInst::getSwappedPredicate(Pred);
512     std::swap(CmpLHS, CmpRHS);
513   }
514   // Canonicalize SLE to SLT.
515   if (Pred == ICmpInst::ICMP_SLE)
516     if (const ConstantInt *CI = dyn_cast<ConstantInt>(CmpRHS))
517       if (!CI->getValue().isMaxSignedValue()) {
518         CmpRHS = ConstantInt::get(CI->getValue() + 1);
519         Pred = ICmpInst::ICMP_SLT;
520       }
521   // Canonicalize SGT to SGE.
522   if (Pred == ICmpInst::ICMP_SGT)
523     if (const ConstantInt *CI = dyn_cast<ConstantInt>(CmpRHS))
524       if (!CI->getValue().isMaxSignedValue()) {
525         CmpRHS = ConstantInt::get(CI->getValue() + 1);
526         Pred = ICmpInst::ICMP_SGE;
527       }
528   // Canonicalize SGE to SLT.
529   if (Pred == ICmpInst::ICMP_SGE) {
530     std::swap(TrueBB, FalseBB);
531     Pred = ICmpInst::ICMP_SLT;
532   }
533   // Canonicalize ULE to ULT.
534   if (Pred == ICmpInst::ICMP_ULE)
535     if (const ConstantInt *CI = dyn_cast<ConstantInt>(CmpRHS))
536       if (!CI->getValue().isMaxValue()) {
537         CmpRHS = ConstantInt::get(CI->getValue() + 1);
538         Pred = ICmpInst::ICMP_ULT;
539       }
540   // Canonicalize UGT to UGE.
541   if (Pred == ICmpInst::ICMP_UGT)
542     if (const ConstantInt *CI = dyn_cast<ConstantInt>(CmpRHS))
543       if (!CI->getValue().isMaxValue()) {
544         CmpRHS = ConstantInt::get(CI->getValue() + 1);
545         Pred = ICmpInst::ICMP_UGE;
546       }
547   // Canonicalize UGE to ULT.
548   if (Pred == ICmpInst::ICMP_UGE) {
549     std::swap(TrueBB, FalseBB);
550     Pred = ICmpInst::ICMP_ULT;
551   }
552   // For now, analyze only LT loops for signed overflow.
553   if (Pred != ICmpInst::ICMP_SLT && Pred != ICmpInst::ICMP_ULT)
554     return 0;
555
556   bool isSigned = Pred == ICmpInst::ICMP_SLT;
557
558   // Get the increment instruction. Look past casts if we will
559   // be able to prove that the original induction variable doesn't
560   // undergo signed or unsigned overflow, respectively.
561   const Value *IncrVal = CmpLHS;
562   if (isSigned) {
563     if (const SExtInst *SI = dyn_cast<SExtInst>(CmpLHS)) {
564       if (!isa<ConstantInt>(CmpRHS) ||
565           !cast<ConstantInt>(CmpRHS)->getValue()
566             .isSignedIntN(IncrVal->getType()->getPrimitiveSizeInBits()))
567         return 0;
568       IncrVal = SI->getOperand(0);
569     }
570   } else {
571     if (const ZExtInst *ZI = dyn_cast<ZExtInst>(CmpLHS)) {
572       if (!isa<ConstantInt>(CmpRHS) ||
573           !cast<ConstantInt>(CmpRHS)->getValue()
574             .isIntN(IncrVal->getType()->getPrimitiveSizeInBits()))
575         return 0;
576       IncrVal = ZI->getOperand(0);
577     }
578   }
579
580   // For now, only analyze induction variables that have simple increments.
581   const BinaryOperator *IncrOp = dyn_cast<BinaryOperator>(IncrVal);
582   if (!IncrOp ||
583       IncrOp->getOpcode() != Instruction::Add ||
584       !isa<ConstantInt>(IncrOp->getOperand(1)) ||
585       !cast<ConstantInt>(IncrOp->getOperand(1))->equalsInt(1))
586     return 0;
587
588   // Make sure the PHI looks like a normal IV.
589   const PHINode *PN = dyn_cast<PHINode>(IncrOp->getOperand(0));
590   if (!PN || PN->getNumIncomingValues() != 2)
591     return 0;
592   unsigned IncomingEdge = L->contains(PN->getIncomingBlock(0));
593   unsigned BackEdge = !IncomingEdge;
594   if (!L->contains(PN->getIncomingBlock(BackEdge)) ||
595       PN->getIncomingValue(BackEdge) != IncrOp)
596     return 0;
597   if (!L->contains(TrueBB))
598     return 0;
599
600   // For now, only analyze loops with a constant start value, so that
601   // we can easily determine if the start value is not a maximum value
602   // which would wrap on the first iteration.
603   const ConstantInt *InitialVal =
604     dyn_cast<ConstantInt>(PN->getIncomingValue(IncomingEdge));
605   if (!InitialVal)
606     return 0;
607
608   // The original induction variable will start at some non-max value,
609   // it counts up by one, and the loop iterates only while it remans
610   // less than some value in the same type. As such, it will never wrap.
611   if (isSigned && !InitialVal->getValue().isMaxSignedValue()) {
612     NoSignedWrap = true;
613     // If the original induction variable starts at zero or greater,
614     // the trip count can be considered signed.
615     if (InitialVal->getValue().isNonNegative())
616       SignExtendTripCount = true;
617   } else if (!isSigned && !InitialVal->getValue().isMaxValue())
618     NoUnsignedWrap = true;
619   return PN;
620 }
621
622 bool IndVarSimplify::runOnLoop(Loop *L, LPPassManager &LPM) {
623   LI = &getAnalysis<LoopInfo>();
624   SE = &getAnalysis<ScalarEvolution>();
625   Changed = false;
626
627   // If there are any floating-point or pointer recurrences, attempt to
628   // transform them to use integer recurrences.
629   RewriteNonIntegerIVs(L);
630
631   BasicBlock *Header       = L->getHeader();
632   BasicBlock *ExitingBlock = L->getExitingBlock();
633   SmallPtrSet<Instruction*, 16> DeadInsts;
634
635   // Verify the input to the pass in already in LCSSA form.
636   assert(L->isLCSSAForm());
637
638   // Check to see if this loop has a computable loop-invariant execution count.
639   // If so, this means that we can compute the final value of any expressions
640   // that are recurrent in the loop, and substitute the exit values from the
641   // loop into any instructions outside of the loop that use the final values of
642   // the current expressions.
643   //
644   SCEVHandle IterationCount = SE->getIterationCount(L);
645   if (!isa<SCEVCouldNotCompute>(IterationCount))
646     RewriteLoopExitValues(L, IterationCount);
647
648   // Next, analyze all of the induction variables in the loop, canonicalizing
649   // auxillary induction variables.
650   std::vector<std::pair<PHINode*, SCEVHandle> > IndVars;
651
652   for (BasicBlock::iterator I = Header->begin(); isa<PHINode>(I); ++I) {
653     PHINode *PN = cast<PHINode>(I);
654     if (PN->getType()->isInteger()) { // FIXME: when we have fast-math, enable!
655       SCEVHandle SCEV = SE->getSCEV(PN);
656       // FIXME: It is an extremely bad idea to indvar substitute anything more
657       // complex than affine induction variables.  Doing so will put expensive
658       // polynomial evaluations inside of the loop, and the str reduction pass
659       // currently can only reduce affine polynomials.  For now just disable
660       // indvar subst on anything more complex than an affine addrec.
661       if (SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(SCEV))
662         if (AR->getLoop() == L && AR->isAffine())
663           IndVars.push_back(std::make_pair(PN, SCEV));
664     }
665   }
666
667   // Compute the type of the largest recurrence expression, and collect
668   // the set of the types of the other recurrence expressions.
669   const Type *LargestType = 0;
670   SmallSetVector<const Type *, 4> SizesToInsert;
671   if (!isa<SCEVCouldNotCompute>(IterationCount)) {
672     LargestType = IterationCount->getType();
673     SizesToInsert.insert(IterationCount->getType());
674   }
675   for (unsigned i = 0, e = IndVars.size(); i != e; ++i) {
676     const PHINode *PN = IndVars[i].first;
677     SizesToInsert.insert(PN->getType());
678     const Type *EffTy = getEffectiveIndvarType(PN);
679     SizesToInsert.insert(EffTy);
680     if (!LargestType ||
681         EffTy->getPrimitiveSizeInBits() >
682           LargestType->getPrimitiveSizeInBits())
683       LargestType = EffTy;
684   }
685
686   // Create a rewriter object which we'll use to transform the code with.
687   SCEVExpander Rewriter(*SE, *LI);
688
689   // Now that we know the largest of of the induction variables in this loop,
690   // insert a canonical induction variable of the largest size.
691   Value *IndVar = 0;
692   if (!SizesToInsert.empty()) {
693     IndVar = Rewriter.getOrInsertCanonicalInductionVariable(L,LargestType);
694     ++NumInserted;
695     Changed = true;
696     DOUT << "INDVARS: New CanIV: " << *IndVar;
697   }
698
699   // If we have a trip count expression, rewrite the loop's exit condition
700   // using it.  We can currently only handle loops with a single exit.
701   bool NoSignedWrap = false;
702   bool NoUnsignedWrap = false;
703   bool SignExtendTripCount = false;
704   const PHINode *OrigControllingPHI = 0;
705   if (!isa<SCEVCouldNotCompute>(IterationCount) && ExitingBlock)
706     // Can't rewrite non-branch yet.
707     if (BranchInst *BI = dyn_cast<BranchInst>(ExitingBlock->getTerminator())) {
708       if (Instruction *OrigCond = dyn_cast<Instruction>(BI->getCondition())) {
709         // Determine if the OrigIV will ever undergo overflow.
710         OrigControllingPHI =
711           TestOrigIVForWrap(L, BI, OrigCond,
712                             NoSignedWrap, NoUnsignedWrap,
713                             SignExtendTripCount);
714
715         // We'll be replacing the original condition, so it'll be dead.
716         DeadInsts.insert(OrigCond);
717       }
718
719       LinearFunctionTestReplace(L, IterationCount, IndVar,
720                                 ExitingBlock, BI, Rewriter,
721                                 SignExtendTripCount);
722     }
723
724   // Now that we have a canonical induction variable, we can rewrite any
725   // recurrences in terms of the induction variable.  Start with the auxillary
726   // induction variables, and recursively rewrite any of their uses.
727   BasicBlock::iterator InsertPt = Header->getFirstNonPHI();
728
729   // If there were induction variables of other sizes, cast the primary
730   // induction variable to the right size for them, avoiding the need for the
731   // code evaluation methods to insert induction variables of different sizes.
732   for (unsigned i = 0, e = SizesToInsert.size(); i != e; ++i) {
733     const Type *Ty = SizesToInsert[i];
734     if (Ty != LargestType) {
735       Instruction *New = new TruncInst(IndVar, Ty, "indvar", InsertPt);
736       Rewriter.addInsertedValue(New, SE->getSCEV(New));
737       DOUT << "INDVARS: Made trunc IV for type " << *Ty << ": "
738            << *New << "\n";
739     }
740   }
741
742   // Rewrite all induction variables in terms of the canonical induction
743   // variable.
744   while (!IndVars.empty()) {
745     PHINode *PN = IndVars.back().first;
746     SCEVAddRecExpr *AR = cast<SCEVAddRecExpr>(IndVars.back().second);
747     Value *NewVal = Rewriter.expandCodeFor(AR, InsertPt);
748     DOUT << "INDVARS: Rewrote IV '" << *AR << "' " << *PN
749          << "   into = " << *NewVal << "\n";
750     NewVal->takeName(PN);
751
752     /// If the new canonical induction variable is wider than the original,
753     /// and the original has uses that are casts to wider types, see if the
754     /// truncate and extend can be omitted.
755     if (PN == OrigControllingPHI && PN->getType() != LargestType)
756       for (Value::use_iterator UI = PN->use_begin(), UE = PN->use_end();
757            UI != UE; ++UI) {
758         if (isa<SExtInst>(UI) && NoSignedWrap) {
759           SCEVHandle ExtendedStart =
760             SE->getSignExtendExpr(AR->getStart(), LargestType);
761           SCEVHandle ExtendedStep =
762             SE->getSignExtendExpr(AR->getStepRecurrence(*SE), LargestType);
763           SCEVHandle ExtendedAddRec =
764             SE->getAddRecExpr(ExtendedStart, ExtendedStep, L);
765           if (LargestType != UI->getType())
766             ExtendedAddRec = SE->getTruncateExpr(ExtendedAddRec, UI->getType());
767           Value *TruncIndVar = Rewriter.expandCodeFor(ExtendedAddRec, InsertPt);
768           UI->replaceAllUsesWith(TruncIndVar);
769           if (Instruction *DeadUse = dyn_cast<Instruction>(*UI))
770             DeadInsts.insert(DeadUse);
771         }
772         if (isa<ZExtInst>(UI) && NoUnsignedWrap) {
773           SCEVHandle ExtendedStart =
774             SE->getZeroExtendExpr(AR->getStart(), LargestType);
775           SCEVHandle ExtendedStep =
776             SE->getZeroExtendExpr(AR->getStepRecurrence(*SE), LargestType);
777           SCEVHandle ExtendedAddRec =
778             SE->getAddRecExpr(ExtendedStart, ExtendedStep, L);
779           if (LargestType != UI->getType())
780             ExtendedAddRec = SE->getTruncateExpr(ExtendedAddRec, UI->getType());
781           Value *TruncIndVar = Rewriter.expandCodeFor(ExtendedAddRec, InsertPt);
782           UI->replaceAllUsesWith(TruncIndVar);
783           if (Instruction *DeadUse = dyn_cast<Instruction>(*UI))
784             DeadInsts.insert(DeadUse);
785         }
786       }
787
788     // Replace the old PHI Node with the inserted computation.
789     PN->replaceAllUsesWith(NewVal);
790     DeadInsts.insert(PN);
791     IndVars.pop_back();
792     ++NumRemoved;
793     Changed = true;
794   }
795
796   DeleteTriviallyDeadInstructions(DeadInsts);
797   assert(L->isLCSSAForm());
798   return Changed;
799 }
800
801 /// Return true if it is OK to use SIToFPInst for an inducation variable
802 /// with given inital and exit values.
803 static bool useSIToFPInst(ConstantFP &InitV, ConstantFP &ExitV,
804                           uint64_t intIV, uint64_t intEV) {
805
806   if (InitV.getValueAPF().isNegative() || ExitV.getValueAPF().isNegative())
807     return true;
808
809   // If the iteration range can be handled by SIToFPInst then use it.
810   APInt Max = APInt::getSignedMaxValue(32);
811   if (Max.getZExtValue() > static_cast<uint64_t>(abs(intEV - intIV)))
812     return true;
813
814   return false;
815 }
816
817 /// convertToInt - Convert APF to an integer, if possible.
818 static bool convertToInt(const APFloat &APF, uint64_t *intVal) {
819
820   bool isExact = false;
821   if (&APF.getSemantics() == &APFloat::PPCDoubleDouble)
822     return false;
823   if (APF.convertToInteger(intVal, 32, APF.isNegative(),
824                            APFloat::rmTowardZero, &isExact)
825       != APFloat::opOK)
826     return false;
827   if (!isExact)
828     return false;
829   return true;
830
831 }
832
833 /// HandleFloatingPointIV - If the loop has floating induction variable
834 /// then insert corresponding integer induction variable if possible.
835 /// For example,
836 /// for(double i = 0; i < 10000; ++i)
837 ///   bar(i)
838 /// is converted into
839 /// for(int i = 0; i < 10000; ++i)
840 ///   bar((double)i);
841 ///
842 void IndVarSimplify::HandleFloatingPointIV(Loop *L, PHINode *PH,
843                                    SmallPtrSet<Instruction*, 16> &DeadInsts) {
844
845   unsigned IncomingEdge = L->contains(PH->getIncomingBlock(0));
846   unsigned BackEdge     = IncomingEdge^1;
847
848   // Check incoming value.
849   ConstantFP *InitValue = dyn_cast<ConstantFP>(PH->getIncomingValue(IncomingEdge));
850   if (!InitValue) return;
851   uint64_t newInitValue = Type::Int32Ty->getPrimitiveSizeInBits();
852   if (!convertToInt(InitValue->getValueAPF(), &newInitValue))
853     return;
854
855   // Check IV increment. Reject this PH if increement operation is not
856   // an add or increment value can not be represented by an integer.
857   BinaryOperator *Incr =
858     dyn_cast<BinaryOperator>(PH->getIncomingValue(BackEdge));
859   if (!Incr) return;
860   if (Incr->getOpcode() != Instruction::Add) return;
861   ConstantFP *IncrValue = NULL;
862   unsigned IncrVIndex = 1;
863   if (Incr->getOperand(1) == PH)
864     IncrVIndex = 0;
865   IncrValue = dyn_cast<ConstantFP>(Incr->getOperand(IncrVIndex));
866   if (!IncrValue) return;
867   uint64_t newIncrValue = Type::Int32Ty->getPrimitiveSizeInBits();
868   if (!convertToInt(IncrValue->getValueAPF(), &newIncrValue))
869     return;
870
871   // Check Incr uses. One user is PH and the other users is exit condition used
872   // by the conditional terminator.
873   Value::use_iterator IncrUse = Incr->use_begin();
874   Instruction *U1 = cast<Instruction>(IncrUse++);
875   if (IncrUse == Incr->use_end()) return;
876   Instruction *U2 = cast<Instruction>(IncrUse++);
877   if (IncrUse != Incr->use_end()) return;
878
879   // Find exit condition.
880   FCmpInst *EC = dyn_cast<FCmpInst>(U1);
881   if (!EC)
882     EC = dyn_cast<FCmpInst>(U2);
883   if (!EC) return;
884
885   if (BranchInst *BI = dyn_cast<BranchInst>(EC->getParent()->getTerminator())) {
886     if (!BI->isConditional()) return;
887     if (BI->getCondition() != EC) return;
888   }
889
890   // Find exit value. If exit value can not be represented as an interger then
891   // do not handle this floating point PH.
892   ConstantFP *EV = NULL;
893   unsigned EVIndex = 1;
894   if (EC->getOperand(1) == Incr)
895     EVIndex = 0;
896   EV = dyn_cast<ConstantFP>(EC->getOperand(EVIndex));
897   if (!EV) return;
898   uint64_t intEV = Type::Int32Ty->getPrimitiveSizeInBits();
899   if (!convertToInt(EV->getValueAPF(), &intEV))
900     return;
901
902   // Find new predicate for integer comparison.
903   CmpInst::Predicate NewPred = CmpInst::BAD_ICMP_PREDICATE;
904   switch (EC->getPredicate()) {
905   case CmpInst::FCMP_OEQ:
906   case CmpInst::FCMP_UEQ:
907     NewPred = CmpInst::ICMP_EQ;
908     break;
909   case CmpInst::FCMP_OGT:
910   case CmpInst::FCMP_UGT:
911     NewPred = CmpInst::ICMP_UGT;
912     break;
913   case CmpInst::FCMP_OGE:
914   case CmpInst::FCMP_UGE:
915     NewPred = CmpInst::ICMP_UGE;
916     break;
917   case CmpInst::FCMP_OLT:
918   case CmpInst::FCMP_ULT:
919     NewPred = CmpInst::ICMP_ULT;
920     break;
921   case CmpInst::FCMP_OLE:
922   case CmpInst::FCMP_ULE:
923     NewPred = CmpInst::ICMP_ULE;
924     break;
925   default:
926     break;
927   }
928   if (NewPred == CmpInst::BAD_ICMP_PREDICATE) return;
929
930   // Insert new integer induction variable.
931   PHINode *NewPHI = PHINode::Create(Type::Int32Ty,
932                                     PH->getName()+".int", PH);
933   NewPHI->addIncoming(ConstantInt::get(Type::Int32Ty, newInitValue),
934                       PH->getIncomingBlock(IncomingEdge));
935
936   Value *NewAdd = BinaryOperator::CreateAdd(NewPHI,
937                                             ConstantInt::get(Type::Int32Ty,
938                                                              newIncrValue),
939                                             Incr->getName()+".int", Incr);
940   NewPHI->addIncoming(NewAdd, PH->getIncomingBlock(BackEdge));
941
942   ConstantInt *NewEV = ConstantInt::get(Type::Int32Ty, intEV);
943   Value *LHS = (EVIndex == 1 ? NewPHI->getIncomingValue(BackEdge) : NewEV);
944   Value *RHS = (EVIndex == 1 ? NewEV : NewPHI->getIncomingValue(BackEdge));
945   ICmpInst *NewEC = new ICmpInst(NewPred, LHS, RHS, EC->getNameStart(),
946                                  EC->getParent()->getTerminator());
947
948   // Delete old, floating point, exit comparision instruction.
949   EC->replaceAllUsesWith(NewEC);
950   DeadInsts.insert(EC);
951
952   // Delete old, floating point, increment instruction.
953   Incr->replaceAllUsesWith(UndefValue::get(Incr->getType()));
954   DeadInsts.insert(Incr);
955
956   // Replace floating induction variable. Give SIToFPInst preference over
957   // UIToFPInst because it is faster on platforms that are widely used.
958   if (useSIToFPInst(*InitValue, *EV, newInitValue, intEV)) {
959     SIToFPInst *Conv = new SIToFPInst(NewPHI, PH->getType(), "indvar.conv",
960                                       PH->getParent()->getFirstNonPHI());
961     PH->replaceAllUsesWith(Conv);
962   } else {
963     UIToFPInst *Conv = new UIToFPInst(NewPHI, PH->getType(), "indvar.conv",
964                                       PH->getParent()->getFirstNonPHI());
965     PH->replaceAllUsesWith(Conv);
966   }
967   DeadInsts.insert(PH);
968 }
969