Make the debug output of LSR less cryptic and more informative.
[oota-llvm.git] / lib / Transforms / Scalar / LoopStrengthReduce.cpp
1 //===- LoopStrengthReduce.cpp - Strength Reduce GEPs in Loops -------------===//
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 pass performs a strength reduction on array references inside loops that
11 // have as one or more of their components the loop induction variable.  This is
12 // accomplished by creating a new Value to hold the initial value of the array
13 // access for the first iteration, and then creating a new GEP instruction in
14 // the loop to increment the value by the appropriate amount.
15 //
16 //===----------------------------------------------------------------------===//
17
18 #define DEBUG_TYPE "loop-reduce"
19 #include "llvm/Transforms/Scalar.h"
20 #include "llvm/Constants.h"
21 #include "llvm/Instructions.h"
22 #include "llvm/IntrinsicInst.h"
23 #include "llvm/Type.h"
24 #include "llvm/DerivedTypes.h"
25 #include "llvm/Analysis/Dominators.h"
26 #include "llvm/Analysis/LoopInfo.h"
27 #include "llvm/Analysis/LoopPass.h"
28 #include "llvm/Analysis/ScalarEvolutionExpander.h"
29 #include "llvm/Support/CFG.h"
30 #include "llvm/Support/GetElementPtrTypeIterator.h"
31 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
32 #include "llvm/Transforms/Utils/Local.h"
33 #include "llvm/Target/TargetData.h"
34 #include "llvm/ADT/SmallPtrSet.h"
35 #include "llvm/ADT/Statistic.h"
36 #include "llvm/Support/Debug.h"
37 #include "llvm/Support/Compiler.h"
38 #include "llvm/Target/TargetLowering.h"
39 #include <algorithm>
40 #include <set>
41 using namespace llvm;
42
43 STATISTIC(NumReduced ,    "Number of GEPs strength reduced");
44 STATISTIC(NumInserted,    "Number of PHIs inserted");
45 STATISTIC(NumVariable,    "Number of PHIs with variable strides");
46 STATISTIC(NumEliminated,  "Number of strides eliminated");
47 STATISTIC(NumShadow,      "Number of Shadow IVs optimized");
48
49 namespace {
50
51   struct BasedUser;
52
53   /// IVStrideUse - Keep track of one use of a strided induction variable, where
54   /// the stride is stored externally.  The Offset member keeps track of the 
55   /// offset from the IV, User is the actual user of the operand, and
56   /// 'OperandValToReplace' is the operand of the User that is the use.
57   struct VISIBILITY_HIDDEN IVStrideUse {
58     SCEVHandle Offset;
59     Instruction *User;
60     Value *OperandValToReplace;
61
62     // isUseOfPostIncrementedValue - True if this should use the
63     // post-incremented version of this IV, not the preincremented version.
64     // This can only be set in special cases, such as the terminating setcc
65     // instruction for a loop or uses dominated by the loop.
66     bool isUseOfPostIncrementedValue;
67     
68     IVStrideUse(const SCEVHandle &Offs, Instruction *U, Value *O)
69       : Offset(Offs), User(U), OperandValToReplace(O),
70         isUseOfPostIncrementedValue(false) {}
71   };
72   
73   /// IVUsersOfOneStride - This structure keeps track of all instructions that
74   /// have an operand that is based on the trip count multiplied by some stride.
75   /// The stride for all of these users is common and kept external to this
76   /// structure.
77   struct VISIBILITY_HIDDEN IVUsersOfOneStride {
78     /// Users - Keep track of all of the users of this stride as well as the
79     /// initial value and the operand that uses the IV.
80     std::vector<IVStrideUse> Users;
81     
82     void addUser(const SCEVHandle &Offset,Instruction *User, Value *Operand) {
83       Users.push_back(IVStrideUse(Offset, User, Operand));
84     }
85   };
86
87   /// IVInfo - This structure keeps track of one IV expression inserted during
88   /// StrengthReduceStridedIVUsers. It contains the stride, the common base, as
89   /// well as the PHI node and increment value created for rewrite.
90   struct VISIBILITY_HIDDEN IVExpr {
91     SCEVHandle  Stride;
92     SCEVHandle  Base;
93     PHINode    *PHI;
94     Value      *IncV;
95
96     IVExpr(const SCEVHandle &stride, const SCEVHandle &base, PHINode *phi,
97            Value *incv)
98       : Stride(stride), Base(base), PHI(phi), IncV(incv) {}
99   };
100
101   /// IVsOfOneStride - This structure keeps track of all IV expression inserted
102   /// during StrengthReduceStridedIVUsers for a particular stride of the IV.
103   struct VISIBILITY_HIDDEN IVsOfOneStride {
104     std::vector<IVExpr> IVs;
105
106     void addIV(const SCEVHandle &Stride, const SCEVHandle &Base, PHINode *PHI,
107                Value *IncV) {
108       IVs.push_back(IVExpr(Stride, Base, PHI, IncV));
109     }
110   };
111
112   class VISIBILITY_HIDDEN LoopStrengthReduce : public LoopPass {
113     LoopInfo *LI;
114     DominatorTree *DT;
115     ScalarEvolution *SE;
116     const TargetData *TD;
117     const Type *UIntPtrTy;
118     bool Changed;
119
120     /// IVUsesByStride - Keep track of all uses of induction variables that we
121     /// are interested in.  The key of the map is the stride of the access.
122     std::map<SCEVHandle, IVUsersOfOneStride> IVUsesByStride;
123
124     /// IVsByStride - Keep track of all IVs that have been inserted for a
125     /// particular stride.
126     std::map<SCEVHandle, IVsOfOneStride> IVsByStride;
127
128     /// StrideOrder - An ordering of the keys in IVUsesByStride that is stable:
129     /// We use this to iterate over the IVUsesByStride collection without being
130     /// dependent on random ordering of pointers in the process.
131     SmallVector<SCEVHandle, 16> StrideOrder;
132
133     /// GEPlist - A list of the GEP's that have been remembered in the SCEV
134     /// data structures.  SCEV does not know to update these when the operands
135     /// of the GEP are changed, which means we cannot leave them live across
136     /// loops.
137     SmallVector<GetElementPtrInst *, 16> GEPlist;
138
139     /// CastedValues - As we need to cast values to uintptr_t, this keeps track
140     /// of the casted version of each value.  This is accessed by
141     /// getCastedVersionOf.
142     DenseMap<Value*, Value*> CastedPointers;
143
144     /// DeadInsts - Keep track of instructions we may have made dead, so that
145     /// we can remove them after we are done working.
146     SmallVector<Instruction*, 16> DeadInsts;
147
148     /// TLI - Keep a pointer of a TargetLowering to consult for determining
149     /// transformation profitability.
150     const TargetLowering *TLI;
151
152   public:
153     static char ID; // Pass ID, replacement for typeid
154     explicit LoopStrengthReduce(const TargetLowering *tli = NULL) : 
155       LoopPass(&ID), TLI(tli) {
156     }
157
158     bool runOnLoop(Loop *L, LPPassManager &LPM);
159
160     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
161       // We split critical edges, so we change the CFG.  However, we do update
162       // many analyses if they are around.
163       AU.addPreservedID(LoopSimplifyID);
164       AU.addPreserved<LoopInfo>();
165       AU.addPreserved<DominanceFrontier>();
166       AU.addPreserved<DominatorTree>();
167
168       AU.addRequiredID(LoopSimplifyID);
169       AU.addRequired<LoopInfo>();
170       AU.addRequired<DominatorTree>();
171       AU.addRequired<TargetData>();
172       AU.addRequired<ScalarEvolution>();
173       AU.addPreserved<ScalarEvolution>();
174     }
175     
176     /// getCastedVersionOf - Return the specified value casted to uintptr_t.
177     ///
178     Value *getCastedVersionOf(Instruction::CastOps opcode, Value *V);
179 private:
180     bool AddUsersIfInteresting(Instruction *I, Loop *L,
181                                SmallPtrSet<Instruction*,16> &Processed);
182     SCEVHandle GetExpressionSCEV(Instruction *E);
183     ICmpInst *ChangeCompareStride(Loop *L, ICmpInst *Cond,
184                                   IVStrideUse* &CondUse,
185                                   const SCEVHandle* &CondStride);
186     void OptimizeIndvars(Loop *L);
187
188     /// OptimizeShadowIV - If IV is used in a int-to-float cast
189     /// inside the loop then try to eliminate the cast opeation.
190     void OptimizeShadowIV(Loop *L);
191
192     /// OptimizeSMax - Rewrite the loop's terminating condition
193     /// if it uses an smax computation.
194     ICmpInst *OptimizeSMax(Loop *L, ICmpInst *Cond,
195                            IVStrideUse* &CondUse);
196
197     bool FindIVUserForCond(ICmpInst *Cond, IVStrideUse *&CondUse,
198                            const SCEVHandle *&CondStride);
199     bool RequiresTypeConversion(const Type *Ty, const Type *NewTy);
200     SCEVHandle CheckForIVReuse(bool, bool, bool, const SCEVHandle&,
201                              IVExpr&, const Type*,
202                              const std::vector<BasedUser>& UsersToProcess);
203     bool ValidStride(bool, int64_t,
204                      const std::vector<BasedUser>& UsersToProcess);
205     SCEVHandle CollectIVUsers(const SCEVHandle &Stride,
206                               IVUsersOfOneStride &Uses,
207                               Loop *L,
208                               bool &AllUsesAreAddresses,
209                               bool &AllUsesAreOutsideLoop,
210                               std::vector<BasedUser> &UsersToProcess);
211     void StrengthReduceStridedIVUsers(const SCEVHandle &Stride,
212                                       IVUsersOfOneStride &Uses,
213                                       Loop *L, bool isOnlyStride);
214     void DeleteTriviallyDeadInstructions();
215   };
216 }
217
218 char LoopStrengthReduce::ID = 0;
219 static RegisterPass<LoopStrengthReduce>
220 X("loop-reduce", "Loop Strength Reduction");
221
222 Pass *llvm::createLoopStrengthReducePass(const TargetLowering *TLI) {
223   return new LoopStrengthReduce(TLI);
224 }
225
226 /// getCastedVersionOf - Return the specified value casted to uintptr_t. This
227 /// assumes that the Value* V is of integer or pointer type only.
228 ///
229 Value *LoopStrengthReduce::getCastedVersionOf(Instruction::CastOps opcode, 
230                                               Value *V) {
231   if (V->getType() == UIntPtrTy) return V;
232   if (Constant *CB = dyn_cast<Constant>(V))
233     return ConstantExpr::getCast(opcode, CB, UIntPtrTy);
234
235   Value *&New = CastedPointers[V];
236   if (New) return New;
237   
238   New = SCEVExpander::InsertCastOfTo(opcode, V, UIntPtrTy);
239   DeadInsts.push_back(cast<Instruction>(New));
240   return New;
241 }
242
243
244 /// DeleteTriviallyDeadInstructions - If any of the instructions is the
245 /// specified set are trivially dead, delete them and see if this makes any of
246 /// their operands subsequently dead.
247 void LoopStrengthReduce::DeleteTriviallyDeadInstructions() {
248   if (DeadInsts.empty()) return;
249   
250   // Sort the deadinsts list so that we can trivially eliminate duplicates as we
251   // go.  The code below never adds a non-dead instruction to the worklist, but
252   // callers may not be so careful.
253   array_pod_sort(DeadInsts.begin(), DeadInsts.end());
254
255   // Drop duplicate instructions and those with uses.
256   for (unsigned i = 0, e = DeadInsts.size()-1; i < e; ++i) {
257     Instruction *I = DeadInsts[i];
258     if (!I->use_empty()) DeadInsts[i] = 0;
259     while (i != e && DeadInsts[i+1] == I)
260       DeadInsts[++i] = 0;
261   }
262   
263   while (!DeadInsts.empty()) {
264     Instruction *I = DeadInsts.back();
265     DeadInsts.pop_back();
266     
267     if (I == 0 || !isInstructionTriviallyDead(I))
268       continue;
269
270     SE->deleteValueFromRecords(I);
271
272     for (User::op_iterator OI = I->op_begin(), E = I->op_end(); OI != E; ++OI) {
273       if (Instruction *U = dyn_cast<Instruction>(*OI)) {
274         *OI = 0;
275         if (U->use_empty())
276           DeadInsts.push_back(U);
277       }
278     }
279     
280     I->eraseFromParent();
281     Changed = true;
282   }
283 }
284
285
286 /// GetExpressionSCEV - Compute and return the SCEV for the specified
287 /// instruction.
288 SCEVHandle LoopStrengthReduce::GetExpressionSCEV(Instruction *Exp) {
289   // Pointer to pointer bitcast instructions return the same value as their
290   // operand.
291   if (BitCastInst *BCI = dyn_cast<BitCastInst>(Exp)) {
292     if (SE->hasSCEV(BCI) || !isa<Instruction>(BCI->getOperand(0)))
293       return SE->getSCEV(BCI);
294     SCEVHandle R = GetExpressionSCEV(cast<Instruction>(BCI->getOperand(0)));
295     SE->setSCEV(BCI, R);
296     return R;
297   }
298
299   // Scalar Evolutions doesn't know how to compute SCEV's for GEP instructions.
300   // If this is a GEP that SE doesn't know about, compute it now and insert it.
301   // If this is not a GEP, or if we have already done this computation, just let
302   // SE figure it out.
303   GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Exp);
304   if (!GEP || SE->hasSCEV(GEP))
305     return SE->getSCEV(Exp);
306     
307   // Analyze all of the subscripts of this getelementptr instruction, looking
308   // for uses that are determined by the trip count of the loop.  First, skip
309   // all operands the are not dependent on the IV.
310
311   // Build up the base expression.  Insert an LLVM cast of the pointer to
312   // uintptr_t first.
313   SCEVHandle GEPVal = SE->getUnknown(
314       getCastedVersionOf(Instruction::PtrToInt, GEP->getOperand(0)));
315
316   gep_type_iterator GTI = gep_type_begin(GEP);
317   
318   for (User::op_iterator i = GEP->op_begin() + 1, e = GEP->op_end();
319        i != e; ++i, ++GTI) {
320     // If this is a use of a recurrence that we can analyze, and it comes before
321     // Op does in the GEP operand list, we will handle this when we process this
322     // operand.
323     if (const StructType *STy = dyn_cast<StructType>(*GTI)) {
324       const StructLayout *SL = TD->getStructLayout(STy);
325       unsigned Idx = cast<ConstantInt>(*i)->getZExtValue();
326       uint64_t Offset = SL->getElementOffset(Idx);
327       GEPVal = SE->getAddExpr(GEPVal,
328                              SE->getIntegerSCEV(Offset, UIntPtrTy));
329     } else {
330       unsigned GEPOpiBits = 
331         (*i)->getType()->getPrimitiveSizeInBits();
332       unsigned IntPtrBits = UIntPtrTy->getPrimitiveSizeInBits();
333       Instruction::CastOps opcode = (GEPOpiBits < IntPtrBits ? 
334           Instruction::SExt : (GEPOpiBits > IntPtrBits ? Instruction::Trunc :
335             Instruction::BitCast));
336       Value *OpVal = getCastedVersionOf(opcode, *i);
337       SCEVHandle Idx = SE->getSCEV(OpVal);
338
339       uint64_t TypeSize = TD->getTypePaddedSize(GTI.getIndexedType());
340       if (TypeSize != 1)
341         Idx = SE->getMulExpr(Idx,
342                             SE->getConstant(ConstantInt::get(UIntPtrTy,
343                                                              TypeSize)));
344       GEPVal = SE->getAddExpr(GEPVal, Idx);
345     }
346   }
347
348   SE->setSCEV(GEP, GEPVal);
349   GEPlist.push_back(GEP);
350   return GEPVal;
351 }
352
353 /// containsAddRecFromDifferentLoop - Determine whether expression S involves a 
354 /// subexpression that is an AddRec from a loop other than L.  An outer loop 
355 /// of L is OK, but not an inner loop nor a disjoint loop.
356 static bool containsAddRecFromDifferentLoop(SCEVHandle S, Loop *L) {
357   // This is very common, put it first.
358   if (isa<SCEVConstant>(S))
359     return false;
360   if (SCEVCommutativeExpr *AE = dyn_cast<SCEVCommutativeExpr>(S)) {
361     for (unsigned int i=0; i< AE->getNumOperands(); i++)
362       if (containsAddRecFromDifferentLoop(AE->getOperand(i), L))
363         return true;
364     return false;
365   }
366   if (SCEVAddRecExpr *AE = dyn_cast<SCEVAddRecExpr>(S)) {
367     if (const Loop *newLoop = AE->getLoop()) {
368       if (newLoop == L)
369         return false;
370       // if newLoop is an outer loop of L, this is OK.
371       if (!LoopInfoBase<BasicBlock>::isNotAlreadyContainedIn(L, newLoop))
372         return false;
373     }
374     return true;
375   }
376   if (SCEVUDivExpr *DE = dyn_cast<SCEVUDivExpr>(S))
377     return containsAddRecFromDifferentLoop(DE->getLHS(), L) ||
378            containsAddRecFromDifferentLoop(DE->getRHS(), L);
379 #if 0
380   // SCEVSDivExpr has been backed out temporarily, but will be back; we'll 
381   // need this when it is.
382   if (SCEVSDivExpr *DE = dyn_cast<SCEVSDivExpr>(S))
383     return containsAddRecFromDifferentLoop(DE->getLHS(), L) ||
384            containsAddRecFromDifferentLoop(DE->getRHS(), L);
385 #endif
386   if (SCEVTruncateExpr *TE = dyn_cast<SCEVTruncateExpr>(S))
387     return containsAddRecFromDifferentLoop(TE->getOperand(), L);
388   if (SCEVZeroExtendExpr *ZE = dyn_cast<SCEVZeroExtendExpr>(S))
389     return containsAddRecFromDifferentLoop(ZE->getOperand(), L);
390   if (SCEVSignExtendExpr *SE = dyn_cast<SCEVSignExtendExpr>(S))
391     return containsAddRecFromDifferentLoop(SE->getOperand(), L);
392   return false;
393 }
394
395 /// getSCEVStartAndStride - Compute the start and stride of this expression,
396 /// returning false if the expression is not a start/stride pair, or true if it
397 /// is.  The stride must be a loop invariant expression, but the start may be
398 /// a mix of loop invariant and loop variant expressions.  The start cannot,
399 /// however, contain an AddRec from a different loop, unless that loop is an
400 /// outer loop of the current loop.
401 static bool getSCEVStartAndStride(const SCEVHandle &SH, Loop *L,
402                                   SCEVHandle &Start, SCEVHandle &Stride,
403                                   ScalarEvolution *SE, DominatorTree *DT) {
404   SCEVHandle TheAddRec = Start;   // Initialize to zero.
405
406   // If the outer level is an AddExpr, the operands are all start values except
407   // for a nested AddRecExpr.
408   if (SCEVAddExpr *AE = dyn_cast<SCEVAddExpr>(SH)) {
409     for (unsigned i = 0, e = AE->getNumOperands(); i != e; ++i)
410       if (SCEVAddRecExpr *AddRec =
411              dyn_cast<SCEVAddRecExpr>(AE->getOperand(i))) {
412         if (AddRec->getLoop() == L)
413           TheAddRec = SE->getAddExpr(AddRec, TheAddRec);
414         else
415           return false;  // Nested IV of some sort?
416       } else {
417         Start = SE->getAddExpr(Start, AE->getOperand(i));
418       }
419         
420   } else if (isa<SCEVAddRecExpr>(SH)) {
421     TheAddRec = SH;
422   } else {
423     return false;  // not analyzable.
424   }
425   
426   SCEVAddRecExpr *AddRec = dyn_cast<SCEVAddRecExpr>(TheAddRec);
427   if (!AddRec || AddRec->getLoop() != L) return false;
428   
429   // FIXME: Generalize to non-affine IV's.
430   if (!AddRec->isAffine()) return false;
431
432   // If Start contains an SCEVAddRecExpr from a different loop, other than an
433   // outer loop of the current loop, reject it.  SCEV has no concept of 
434   // operating on one loop at a time so don't confuse it with such expressions.
435   if (containsAddRecFromDifferentLoop(AddRec->getOperand(0), L))
436     return false;
437
438   Start = SE->getAddExpr(Start, AddRec->getOperand(0));
439   
440   if (!isa<SCEVConstant>(AddRec->getOperand(1))) {
441     // If stride is an instruction, make sure it dominates the loop preheader.
442     // Otherwise we could end up with a use before def situation.
443     BasicBlock *Preheader = L->getLoopPreheader();
444     if (!AddRec->getOperand(1)->dominates(Preheader, DT))
445       return false;
446
447     DOUT << "[" << L->getHeader()->getName()
448          << "] Variable stride: " << *AddRec << "\n";
449   }
450
451   Stride = AddRec->getOperand(1);
452   return true;
453 }
454
455 /// IVUseShouldUsePostIncValue - We have discovered a "User" of an IV expression
456 /// and now we need to decide whether the user should use the preinc or post-inc
457 /// value.  If this user should use the post-inc version of the IV, return true.
458 ///
459 /// Choosing wrong here can break dominance properties (if we choose to use the
460 /// post-inc value when we cannot) or it can end up adding extra live-ranges to
461 /// the loop, resulting in reg-reg copies (if we use the pre-inc value when we
462 /// should use the post-inc value).
463 static bool IVUseShouldUsePostIncValue(Instruction *User, Instruction *IV,
464                                        Loop *L, DominatorTree *DT, Pass *P,
465                                       SmallVectorImpl<Instruction*> &DeadInsts){
466   // If the user is in the loop, use the preinc value.
467   if (L->contains(User->getParent())) return false;
468   
469   BasicBlock *LatchBlock = L->getLoopLatch();
470   
471   // Ok, the user is outside of the loop.  If it is dominated by the latch
472   // block, use the post-inc value.
473   if (DT->dominates(LatchBlock, User->getParent()))
474     return true;
475
476   // There is one case we have to be careful of: PHI nodes.  These little guys
477   // can live in blocks that do not dominate the latch block, but (since their
478   // uses occur in the predecessor block, not the block the PHI lives in) should
479   // still use the post-inc value.  Check for this case now.
480   PHINode *PN = dyn_cast<PHINode>(User);
481   if (!PN) return false;  // not a phi, not dominated by latch block.
482   
483   // Look at all of the uses of IV by the PHI node.  If any use corresponds to
484   // a block that is not dominated by the latch block, give up and use the
485   // preincremented value.
486   unsigned NumUses = 0;
487   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
488     if (PN->getIncomingValue(i) == IV) {
489       ++NumUses;
490       if (!DT->dominates(LatchBlock, PN->getIncomingBlock(i)))
491         return false;
492     }
493
494   // Okay, all uses of IV by PN are in predecessor blocks that really are
495   // dominated by the latch block.  Split the critical edges and use the
496   // post-incremented value.
497   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
498     if (PN->getIncomingValue(i) == IV) {
499       SplitCriticalEdge(PN->getIncomingBlock(i), PN->getParent(), P, false);
500       // Splitting the critical edge can reduce the number of entries in this
501       // PHI.
502       e = PN->getNumIncomingValues();
503       if (--NumUses == 0) break;
504     }
505
506   // PHI node might have become a constant value after SplitCriticalEdge.
507   DeadInsts.push_back(User);
508   
509   return true;
510 }
511
512 /// isAddressUse - Returns true if the specified instruction is using the
513 /// specified value as an address.
514 static bool isAddressUse(Instruction *Inst, Value *OperandVal) {
515   bool isAddress = isa<LoadInst>(Inst);
516   if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
517     if (SI->getOperand(1) == OperandVal)
518       isAddress = true;
519   } else if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) {
520     // Addressing modes can also be folded into prefetches and a variety
521     // of intrinsics.
522     switch (II->getIntrinsicID()) {
523       default: break;
524       case Intrinsic::prefetch:
525       case Intrinsic::x86_sse2_loadu_dq:
526       case Intrinsic::x86_sse2_loadu_pd:
527       case Intrinsic::x86_sse_loadu_ps:
528       case Intrinsic::x86_sse_storeu_ps:
529       case Intrinsic::x86_sse2_storeu_pd:
530       case Intrinsic::x86_sse2_storeu_dq:
531       case Intrinsic::x86_sse2_storel_dq:
532         if (II->getOperand(1) == OperandVal)
533           isAddress = true;
534         break;
535     }
536   }
537   return isAddress;
538 }
539
540 /// AddUsersIfInteresting - Inspect the specified instruction.  If it is a
541 /// reducible SCEV, recursively add its users to the IVUsesByStride set and
542 /// return true.  Otherwise, return false.
543 bool LoopStrengthReduce::AddUsersIfInteresting(Instruction *I, Loop *L,
544                                       SmallPtrSet<Instruction*,16> &Processed) {
545   if (!I->getType()->isInteger() && !isa<PointerType>(I->getType()))
546     return false;   // Void and FP expressions cannot be reduced.
547   if (!Processed.insert(I))
548     return true;    // Instruction already handled.
549   
550   // Get the symbolic expression for this instruction.
551   SCEVHandle ISE = GetExpressionSCEV(I);
552   if (isa<SCEVCouldNotCompute>(ISE)) return false;
553   
554   // Get the start and stride for this expression.
555   SCEVHandle Start = SE->getIntegerSCEV(0, ISE->getType());
556   SCEVHandle Stride = Start;
557   if (!getSCEVStartAndStride(ISE, L, Start, Stride, SE, DT))
558     return false;  // Non-reducible symbolic expression, bail out.
559
560   std::vector<Instruction *> IUsers;
561   // Collect all I uses now because IVUseShouldUsePostIncValue may 
562   // invalidate use_iterator.
563   for (Value::use_iterator UI = I->use_begin(), E = I->use_end(); UI != E; ++UI)
564     IUsers.push_back(cast<Instruction>(*UI));
565
566   for (unsigned iused_index = 0, iused_size = IUsers.size(); 
567        iused_index != iused_size; ++iused_index) {
568
569     Instruction *User = IUsers[iused_index];
570
571     // Do not infinitely recurse on PHI nodes.
572     if (isa<PHINode>(User) && Processed.count(User))
573       continue;
574
575     // Descend recursively, but not into PHI nodes outside the current loop.
576     // It's important to see the entire expression outside the loop to get
577     // choices that depend on addressing mode use right, although we won't
578     // consider references ouside the loop in all cases.
579     // If User is already in Processed, we don't want to recurse into it again,
580     // but do want to record a second reference in the same instruction.
581     bool AddUserToIVUsers = false;
582     if (LI->getLoopFor(User->getParent()) != L) {
583       if (isa<PHINode>(User) || Processed.count(User) ||
584           !AddUsersIfInteresting(User, L, Processed)) {
585         DOUT << "FOUND USER in other loop: " << *User
586              << "   OF SCEV: " << *ISE << "\n";
587         AddUserToIVUsers = true;
588       }
589     } else if (Processed.count(User) || 
590                !AddUsersIfInteresting(User, L, Processed)) {
591       DOUT << "FOUND USER: " << *User
592            << "   OF SCEV: " << *ISE << "\n";
593       AddUserToIVUsers = true;
594     }
595
596     if (AddUserToIVUsers) {
597       IVUsersOfOneStride &StrideUses = IVUsesByStride[Stride];
598       if (StrideUses.Users.empty())     // First occurrence of this stride?
599         StrideOrder.push_back(Stride);
600       
601       // Okay, we found a user that we cannot reduce.  Analyze the instruction
602       // and decide what to do with it.  If we are a use inside of the loop, use
603       // the value before incrementation, otherwise use it after incrementation.
604       if (IVUseShouldUsePostIncValue(User, I, L, DT, this, DeadInsts)) {
605         // The value used will be incremented by the stride more than we are
606         // expecting, so subtract this off.
607         SCEVHandle NewStart = SE->getMinusSCEV(Start, Stride);
608         StrideUses.addUser(NewStart, User, I);
609         StrideUses.Users.back().isUseOfPostIncrementedValue = true;
610         DOUT << "   USING POSTINC SCEV, START=" << *NewStart<< "\n";
611       } else {        
612         StrideUses.addUser(Start, User, I);
613       }
614     }
615   }
616   return true;
617 }
618
619 namespace {
620   /// BasedUser - For a particular base value, keep information about how we've
621   /// partitioned the expression so far.
622   struct BasedUser {
623     /// SE - The current ScalarEvolution object.
624     ScalarEvolution *SE;
625
626     /// Base - The Base value for the PHI node that needs to be inserted for
627     /// this use.  As the use is processed, information gets moved from this
628     /// field to the Imm field (below).  BasedUser values are sorted by this
629     /// field.
630     SCEVHandle Base;
631     
632     /// Inst - The instruction using the induction variable.
633     Instruction *Inst;
634
635     /// OperandValToReplace - The operand value of Inst to replace with the
636     /// EmittedBase.
637     Value *OperandValToReplace;
638
639     /// Imm - The immediate value that should be added to the base immediately
640     /// before Inst, because it will be folded into the imm field of the
641     /// instruction.
642     SCEVHandle Imm;
643
644     // isUseOfPostIncrementedValue - True if this should use the
645     // post-incremented version of this IV, not the preincremented version.
646     // This can only be set in special cases, such as the terminating setcc
647     // instruction for a loop and uses outside the loop that are dominated by
648     // the loop.
649     bool isUseOfPostIncrementedValue;
650     
651     BasedUser(IVStrideUse &IVSU, ScalarEvolution *se)
652       : SE(se), Base(IVSU.Offset), Inst(IVSU.User), 
653         OperandValToReplace(IVSU.OperandValToReplace), 
654         Imm(SE->getIntegerSCEV(0, Base->getType())), 
655         isUseOfPostIncrementedValue(IVSU.isUseOfPostIncrementedValue) {}
656
657     // Once we rewrite the code to insert the new IVs we want, update the
658     // operands of Inst to use the new expression 'NewBase', with 'Imm' added
659     // to it.
660     void RewriteInstructionToUseNewBase(const SCEVHandle &NewBase,
661                                         Instruction *InsertPt,
662                                        SCEVExpander &Rewriter, Loop *L, Pass *P,
663                                       SmallVectorImpl<Instruction*> &DeadInsts);
664     
665     Value *InsertCodeForBaseAtPosition(const SCEVHandle &NewBase, 
666                                        SCEVExpander &Rewriter,
667                                        Instruction *IP, Loop *L);
668     void dump() const;
669   };
670 }
671
672 void BasedUser::dump() const {
673   cerr << " Base=" << *Base;
674   cerr << " Imm=" << *Imm;
675   cerr << "   Inst: " << *Inst;
676 }
677
678 Value *BasedUser::InsertCodeForBaseAtPosition(const SCEVHandle &NewBase, 
679                                               SCEVExpander &Rewriter,
680                                               Instruction *IP, Loop *L) {
681   // Figure out where we *really* want to insert this code.  In particular, if
682   // the user is inside of a loop that is nested inside of L, we really don't
683   // want to insert this expression before the user, we'd rather pull it out as
684   // many loops as possible.
685   LoopInfo &LI = Rewriter.getLoopInfo();
686   Instruction *BaseInsertPt = IP;
687   
688   // Figure out the most-nested loop that IP is in.
689   Loop *InsertLoop = LI.getLoopFor(IP->getParent());
690   
691   // If InsertLoop is not L, and InsertLoop is nested inside of L, figure out
692   // the preheader of the outer-most loop where NewBase is not loop invariant.
693   if (L->contains(IP->getParent()))
694     while (InsertLoop && NewBase->isLoopInvariant(InsertLoop)) {
695       BaseInsertPt = InsertLoop->getLoopPreheader()->getTerminator();
696       InsertLoop = InsertLoop->getParentLoop();
697     }
698   
699   Value *Base = Rewriter.expandCodeFor(NewBase, BaseInsertPt);
700
701   // If there is no immediate value, skip the next part.
702   if (Imm->isZero())
703     return Base;
704
705   // If we are inserting the base and imm values in the same block, make sure to
706   // adjust the IP position if insertion reused a result.
707   if (IP == BaseInsertPt)
708     IP = Rewriter.getInsertionPoint();
709   
710   // Always emit the immediate (if non-zero) into the same block as the user.
711   SCEVHandle NewValSCEV = SE->getAddExpr(SE->getUnknown(Base), Imm);
712   return Rewriter.expandCodeFor(NewValSCEV, IP);
713   
714 }
715
716
717 // Once we rewrite the code to insert the new IVs we want, update the
718 // operands of Inst to use the new expression 'NewBase', with 'Imm' added
719 // to it. NewBasePt is the last instruction which contributes to the
720 // value of NewBase in the case that it's a diffferent instruction from
721 // the PHI that NewBase is computed from, or null otherwise.
722 //
723 void BasedUser::RewriteInstructionToUseNewBase(const SCEVHandle &NewBase,
724                                                Instruction *NewBasePt,
725                                       SCEVExpander &Rewriter, Loop *L, Pass *P,
726                                       SmallVectorImpl<Instruction*> &DeadInsts){
727   if (!isa<PHINode>(Inst)) {
728     // By default, insert code at the user instruction.
729     BasicBlock::iterator InsertPt = Inst;
730     
731     // However, if the Operand is itself an instruction, the (potentially
732     // complex) inserted code may be shared by many users.  Because of this, we
733     // want to emit code for the computation of the operand right before its old
734     // computation.  This is usually safe, because we obviously used to use the
735     // computation when it was computed in its current block.  However, in some
736     // cases (e.g. use of a post-incremented induction variable) the NewBase
737     // value will be pinned to live somewhere after the original computation.
738     // In this case, we have to back off.
739     //
740     // If this is a use outside the loop (which means after, since it is based
741     // on a loop indvar) we use the post-incremented value, so that we don't
742     // artificially make the preinc value live out the bottom of the loop. 
743     if (!isUseOfPostIncrementedValue && L->contains(Inst->getParent())) {
744       if (NewBasePt && isa<PHINode>(OperandValToReplace)) {
745         InsertPt = NewBasePt;
746         ++InsertPt;
747       } else if (Instruction *OpInst
748                  = dyn_cast<Instruction>(OperandValToReplace)) {
749         InsertPt = OpInst;
750         while (isa<PHINode>(InsertPt)) ++InsertPt;
751       }
752     }
753     Value *NewVal = InsertCodeForBaseAtPosition(NewBase, Rewriter, InsertPt, L);
754     // Adjust the type back to match the Inst. Note that we can't use InsertPt
755     // here because the SCEVExpander may have inserted the instructions after
756     // that point, in its efforts to avoid inserting redundant expressions.
757     if (isa<PointerType>(OperandValToReplace->getType())) {
758       NewVal = SCEVExpander::InsertCastOfTo(Instruction::IntToPtr,
759                                             NewVal,
760                                             OperandValToReplace->getType());
761     }
762     // Replace the use of the operand Value with the new Phi we just created.
763     Inst->replaceUsesOfWith(OperandValToReplace, NewVal);
764
765 #ifndef NDEBUG
766     DOUT << "      Replacing with ";
767     WriteAsOperand(*DOUT, NewVal, /*PrintType=*/false);
768     DOUT << ", which has value " << *NewBase << " plus IMM " << *Imm << "\n";
769 #endif
770     return;
771   }
772
773   // PHI nodes are more complex.  We have to insert one copy of the NewBase+Imm
774   // expression into each operand block that uses it.  Note that PHI nodes can
775   // have multiple entries for the same predecessor.  We use a map to make sure
776   // that a PHI node only has a single Value* for each predecessor (which also
777   // prevents us from inserting duplicate code in some blocks).
778   DenseMap<BasicBlock*, Value*> InsertedCode;
779   PHINode *PN = cast<PHINode>(Inst);
780   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
781     if (PN->getIncomingValue(i) == OperandValToReplace) {
782       // If the original expression is outside the loop, put the replacement
783       // code in the same place as the original expression,
784       // which need not be an immediate predecessor of this PHI.  This way we 
785       // need only one copy of it even if it is referenced multiple times in
786       // the PHI.  We don't do this when the original expression is inside the
787       // loop because multiple copies sometimes do useful sinking of code in
788       // that case(?).
789       Instruction *OldLoc = dyn_cast<Instruction>(OperandValToReplace);
790       if (L->contains(OldLoc->getParent())) {
791         // If this is a critical edge, split the edge so that we do not insert
792         // the code on all predecessor/successor paths.  We do this unless this
793         // is the canonical backedge for this loop, as this can make some
794         // inserted code be in an illegal position.
795         BasicBlock *PHIPred = PN->getIncomingBlock(i);
796         if (e != 1 && PHIPred->getTerminator()->getNumSuccessors() > 1 &&
797             (PN->getParent() != L->getHeader() || !L->contains(PHIPred))) {
798
799           // First step, split the critical edge.
800           SplitCriticalEdge(PHIPred, PN->getParent(), P, false);
801
802           // Next step: move the basic block.  In particular, if the PHI node
803           // is outside of the loop, and PredTI is in the loop, we want to
804           // move the block to be immediately before the PHI block, not
805           // immediately after PredTI.
806           if (L->contains(PHIPred) && !L->contains(PN->getParent())) {
807             BasicBlock *NewBB = PN->getIncomingBlock(i);
808             NewBB->moveBefore(PN->getParent());
809           }
810
811           // Splitting the edge can reduce the number of PHI entries we have.
812           e = PN->getNumIncomingValues();
813         }
814       }
815       Value *&Code = InsertedCode[PN->getIncomingBlock(i)];
816       if (!Code) {
817         // Insert the code into the end of the predecessor block.
818         Instruction *InsertPt = (L->contains(OldLoc->getParent())) ?
819                                 PN->getIncomingBlock(i)->getTerminator() :
820                                 OldLoc->getParent()->getTerminator();
821         Code = InsertCodeForBaseAtPosition(NewBase, Rewriter, InsertPt, L);
822
823         // Adjust the type back to match the PHI. Note that we can't use
824         // InsertPt here because the SCEVExpander may have inserted its
825         // instructions after that point, in its efforts to avoid inserting
826         // redundant expressions.
827         if (isa<PointerType>(PN->getType())) {
828           Code = SCEVExpander::InsertCastOfTo(Instruction::IntToPtr,
829                                               Code,
830                                               PN->getType());
831         }
832
833 #ifndef NDEBUG
834         DOUT << "      Changing PHI use to ";
835         WriteAsOperand(*DOUT, Code, /*PrintType=*/false);
836         DOUT << ", which has value " << *NewBase << " plus IMM " << *Imm << "\n";
837 #endif
838       }
839
840       // Replace the use of the operand Value with the new Phi we just created.
841       PN->setIncomingValue(i, Code);
842       Rewriter.clear();
843     }
844   }
845
846   // PHI node might have become a constant value after SplitCriticalEdge.
847   DeadInsts.push_back(Inst);
848 }
849
850
851 /// fitsInAddressMode - Return true if V can be subsumed within an addressing
852 /// mode, and does not need to be put in a register first.
853 static bool fitsInAddressMode(const SCEVHandle &V, const Type *UseTy,
854                              const TargetLowering *TLI, bool HasBaseReg) {
855   if (SCEVConstant *SC = dyn_cast<SCEVConstant>(V)) {
856     int64_t VC = SC->getValue()->getSExtValue();
857     if (TLI) {
858       TargetLowering::AddrMode AM;
859       AM.BaseOffs = VC;
860       AM.HasBaseReg = HasBaseReg;
861       return TLI->isLegalAddressingMode(AM, UseTy);
862     } else {
863       // Defaults to PPC. PPC allows a sign-extended 16-bit immediate field.
864       return (VC > -(1 << 16) && VC < (1 << 16)-1);
865     }
866   }
867
868   if (SCEVUnknown *SU = dyn_cast<SCEVUnknown>(V))
869     if (ConstantExpr *CE = dyn_cast<ConstantExpr>(SU->getValue()))
870       if (TLI && CE->getOpcode() == Instruction::PtrToInt) {
871         Constant *Op0 = CE->getOperand(0);
872         if (GlobalValue *GV = dyn_cast<GlobalValue>(Op0)) {
873           TargetLowering::AddrMode AM;
874           AM.BaseGV = GV;
875           AM.HasBaseReg = HasBaseReg;
876           return TLI->isLegalAddressingMode(AM, UseTy);
877         }
878       }
879   return false;
880 }
881
882 /// MoveLoopVariantsToImmediateField - Move any subexpressions from Val that are
883 /// loop varying to the Imm operand.
884 static void MoveLoopVariantsToImmediateField(SCEVHandle &Val, SCEVHandle &Imm,
885                                             Loop *L, ScalarEvolution *SE) {
886   if (Val->isLoopInvariant(L)) return;  // Nothing to do.
887   
888   if (SCEVAddExpr *SAE = dyn_cast<SCEVAddExpr>(Val)) {
889     std::vector<SCEVHandle> NewOps;
890     NewOps.reserve(SAE->getNumOperands());
891     
892     for (unsigned i = 0; i != SAE->getNumOperands(); ++i)
893       if (!SAE->getOperand(i)->isLoopInvariant(L)) {
894         // If this is a loop-variant expression, it must stay in the immediate
895         // field of the expression.
896         Imm = SE->getAddExpr(Imm, SAE->getOperand(i));
897       } else {
898         NewOps.push_back(SAE->getOperand(i));
899       }
900
901     if (NewOps.empty())
902       Val = SE->getIntegerSCEV(0, Val->getType());
903     else
904       Val = SE->getAddExpr(NewOps);
905   } else if (SCEVAddRecExpr *SARE = dyn_cast<SCEVAddRecExpr>(Val)) {
906     // Try to pull immediates out of the start value of nested addrec's.
907     SCEVHandle Start = SARE->getStart();
908     MoveLoopVariantsToImmediateField(Start, Imm, L, SE);
909     
910     std::vector<SCEVHandle> Ops(SARE->op_begin(), SARE->op_end());
911     Ops[0] = Start;
912     Val = SE->getAddRecExpr(Ops, SARE->getLoop());
913   } else {
914     // Otherwise, all of Val is variant, move the whole thing over.
915     Imm = SE->getAddExpr(Imm, Val);
916     Val = SE->getIntegerSCEV(0, Val->getType());
917   }
918 }
919
920
921 /// MoveImmediateValues - Look at Val, and pull out any additions of constants
922 /// that can fit into the immediate field of instructions in the target.
923 /// Accumulate these immediate values into the Imm value.
924 static void MoveImmediateValues(const TargetLowering *TLI,
925                                 Instruction *User,
926                                 SCEVHandle &Val, SCEVHandle &Imm,
927                                 bool isAddress, Loop *L,
928                                 ScalarEvolution *SE) {
929   const Type *UseTy = User->getType();
930   if (StoreInst *SI = dyn_cast<StoreInst>(User))
931     UseTy = SI->getOperand(0)->getType();
932
933   if (SCEVAddExpr *SAE = dyn_cast<SCEVAddExpr>(Val)) {
934     std::vector<SCEVHandle> NewOps;
935     NewOps.reserve(SAE->getNumOperands());
936     
937     for (unsigned i = 0; i != SAE->getNumOperands(); ++i) {
938       SCEVHandle NewOp = SAE->getOperand(i);
939       MoveImmediateValues(TLI, User, NewOp, Imm, isAddress, L, SE);
940       
941       if (!NewOp->isLoopInvariant(L)) {
942         // If this is a loop-variant expression, it must stay in the immediate
943         // field of the expression.
944         Imm = SE->getAddExpr(Imm, NewOp);
945       } else {
946         NewOps.push_back(NewOp);
947       }
948     }
949
950     if (NewOps.empty())
951       Val = SE->getIntegerSCEV(0, Val->getType());
952     else
953       Val = SE->getAddExpr(NewOps);
954     return;
955   } else if (SCEVAddRecExpr *SARE = dyn_cast<SCEVAddRecExpr>(Val)) {
956     // Try to pull immediates out of the start value of nested addrec's.
957     SCEVHandle Start = SARE->getStart();
958     MoveImmediateValues(TLI, User, Start, Imm, isAddress, L, SE);
959     
960     if (Start != SARE->getStart()) {
961       std::vector<SCEVHandle> Ops(SARE->op_begin(), SARE->op_end());
962       Ops[0] = Start;
963       Val = SE->getAddRecExpr(Ops, SARE->getLoop());
964     }
965     return;
966   } else if (SCEVMulExpr *SME = dyn_cast<SCEVMulExpr>(Val)) {
967     // Transform "8 * (4 + v)" -> "32 + 8*V" if "32" fits in the immed field.
968     if (isAddress && fitsInAddressMode(SME->getOperand(0), UseTy, TLI, false) &&
969         SME->getNumOperands() == 2 && SME->isLoopInvariant(L)) {
970
971       SCEVHandle SubImm = SE->getIntegerSCEV(0, Val->getType());
972       SCEVHandle NewOp = SME->getOperand(1);
973       MoveImmediateValues(TLI, User, NewOp, SubImm, isAddress, L, SE);
974       
975       // If we extracted something out of the subexpressions, see if we can 
976       // simplify this!
977       if (NewOp != SME->getOperand(1)) {
978         // Scale SubImm up by "8".  If the result is a target constant, we are
979         // good.
980         SubImm = SE->getMulExpr(SubImm, SME->getOperand(0));
981         if (fitsInAddressMode(SubImm, UseTy, TLI, false)) {
982           // Accumulate the immediate.
983           Imm = SE->getAddExpr(Imm, SubImm);
984           
985           // Update what is left of 'Val'.
986           Val = SE->getMulExpr(SME->getOperand(0), NewOp);
987           return;
988         }
989       }
990     }
991   }
992
993   // Loop-variant expressions must stay in the immediate field of the
994   // expression.
995   if ((isAddress && fitsInAddressMode(Val, UseTy, TLI, false)) ||
996       !Val->isLoopInvariant(L)) {
997     Imm = SE->getAddExpr(Imm, Val);
998     Val = SE->getIntegerSCEV(0, Val->getType());
999     return;
1000   }
1001
1002   // Otherwise, no immediates to move.
1003 }
1004
1005
1006 /// SeparateSubExprs - Decompose Expr into all of the subexpressions that are
1007 /// added together.  This is used to reassociate common addition subexprs
1008 /// together for maximal sharing when rewriting bases.
1009 static void SeparateSubExprs(std::vector<SCEVHandle> &SubExprs,
1010                              SCEVHandle Expr,
1011                              ScalarEvolution *SE) {
1012   if (SCEVAddExpr *AE = dyn_cast<SCEVAddExpr>(Expr)) {
1013     for (unsigned j = 0, e = AE->getNumOperands(); j != e; ++j)
1014       SeparateSubExprs(SubExprs, AE->getOperand(j), SE);
1015   } else if (SCEVAddRecExpr *SARE = dyn_cast<SCEVAddRecExpr>(Expr)) {
1016     SCEVHandle Zero = SE->getIntegerSCEV(0, Expr->getType());
1017     if (SARE->getOperand(0) == Zero) {
1018       SubExprs.push_back(Expr);
1019     } else {
1020       // Compute the addrec with zero as its base.
1021       std::vector<SCEVHandle> Ops(SARE->op_begin(), SARE->op_end());
1022       Ops[0] = Zero;   // Start with zero base.
1023       SubExprs.push_back(SE->getAddRecExpr(Ops, SARE->getLoop()));
1024       
1025
1026       SeparateSubExprs(SubExprs, SARE->getOperand(0), SE);
1027     }
1028   } else if (!Expr->isZero()) {
1029     // Do not add zero.
1030     SubExprs.push_back(Expr);
1031   }
1032 }
1033
1034 // This is logically local to the following function, but C++ says we have 
1035 // to make it file scope.
1036 struct SubExprUseData { unsigned Count; bool notAllUsesAreFree; };
1037
1038 /// RemoveCommonExpressionsFromUseBases - Look through all of the Bases of all
1039 /// the Uses, removing any common subexpressions, except that if all such
1040 /// subexpressions can be folded into an addressing mode for all uses inside
1041 /// the loop (this case is referred to as "free" in comments herein) we do
1042 /// not remove anything.  This looks for things like (a+b+c) and
1043 /// (a+c+d) and computes the common (a+c) subexpression.  The common expression
1044 /// is *removed* from the Bases and returned.
1045 static SCEVHandle 
1046 RemoveCommonExpressionsFromUseBases(std::vector<BasedUser> &Uses,
1047                                     ScalarEvolution *SE, Loop *L,
1048                                     const TargetLowering *TLI) {
1049   unsigned NumUses = Uses.size();
1050
1051   // Only one use?  This is a very common case, so we handle it specially and
1052   // cheaply.
1053   SCEVHandle Zero = SE->getIntegerSCEV(0, Uses[0].Base->getType());
1054   SCEVHandle Result = Zero;
1055   SCEVHandle FreeResult = Zero;
1056   if (NumUses == 1) {
1057     // If the use is inside the loop, use its base, regardless of what it is:
1058     // it is clearly shared across all the IV's.  If the use is outside the loop
1059     // (which means after it) we don't want to factor anything *into* the loop,
1060     // so just use 0 as the base.
1061     if (L->contains(Uses[0].Inst->getParent()))
1062       std::swap(Result, Uses[0].Base);
1063     return Result;
1064   }
1065
1066   // To find common subexpressions, count how many of Uses use each expression.
1067   // If any subexpressions are used Uses.size() times, they are common.
1068   // Also track whether all uses of each expression can be moved into an
1069   // an addressing mode "for free"; such expressions are left within the loop.
1070   // struct SubExprUseData { unsigned Count; bool notAllUsesAreFree; };
1071   std::map<SCEVHandle, SubExprUseData> SubExpressionUseData;
1072   
1073   // UniqueSubExprs - Keep track of all of the subexpressions we see in the
1074   // order we see them.
1075   std::vector<SCEVHandle> UniqueSubExprs;
1076
1077   std::vector<SCEVHandle> SubExprs;
1078   unsigned NumUsesInsideLoop = 0;
1079   for (unsigned i = 0; i != NumUses; ++i) {
1080     // If the user is outside the loop, just ignore it for base computation.
1081     // Since the user is outside the loop, it must be *after* the loop (if it
1082     // were before, it could not be based on the loop IV).  We don't want users
1083     // after the loop to affect base computation of values *inside* the loop,
1084     // because we can always add their offsets to the result IV after the loop
1085     // is done, ensuring we get good code inside the loop.
1086     if (!L->contains(Uses[i].Inst->getParent()))
1087       continue;
1088     NumUsesInsideLoop++;
1089     
1090     // If the base is zero (which is common), return zero now, there are no
1091     // CSEs we can find.
1092     if (Uses[i].Base == Zero) return Zero;
1093
1094     // If this use is as an address we may be able to put CSEs in the addressing
1095     // mode rather than hoisting them.
1096     bool isAddrUse = isAddressUse(Uses[i].Inst, Uses[i].OperandValToReplace);
1097     // We may need the UseTy below, but only when isAddrUse, so compute it
1098     // only in that case.
1099     const Type *UseTy = 0;
1100     if (isAddrUse) {
1101       UseTy  = Uses[i].Inst->getType();
1102       if (StoreInst *SI = dyn_cast<StoreInst>(Uses[i].Inst))
1103         UseTy = SI->getOperand(0)->getType();
1104     }
1105
1106     // Split the expression into subexprs.
1107     SeparateSubExprs(SubExprs, Uses[i].Base, SE);
1108     // Add one to SubExpressionUseData.Count for each subexpr present, and
1109     // if the subexpr is not a valid immediate within an addressing mode use,
1110     // set SubExpressionUseData.notAllUsesAreFree.  We definitely want to
1111     // hoist these out of the loop (if they are common to all uses).
1112     for (unsigned j = 0, e = SubExprs.size(); j != e; ++j) {
1113       if (++SubExpressionUseData[SubExprs[j]].Count == 1)
1114         UniqueSubExprs.push_back(SubExprs[j]);
1115       if (!isAddrUse || !fitsInAddressMode(SubExprs[j], UseTy, TLI, false))
1116         SubExpressionUseData[SubExprs[j]].notAllUsesAreFree = true;
1117     }
1118     SubExprs.clear();
1119   }
1120
1121   // Now that we know how many times each is used, build Result.  Iterate over
1122   // UniqueSubexprs so that we have a stable ordering.
1123   for (unsigned i = 0, e = UniqueSubExprs.size(); i != e; ++i) {
1124     std::map<SCEVHandle, SubExprUseData>::iterator I = 
1125        SubExpressionUseData.find(UniqueSubExprs[i]);
1126     assert(I != SubExpressionUseData.end() && "Entry not found?");
1127     if (I->second.Count == NumUsesInsideLoop) { // Found CSE! 
1128       if (I->second.notAllUsesAreFree)
1129         Result = SE->getAddExpr(Result, I->first);
1130       else 
1131         FreeResult = SE->getAddExpr(FreeResult, I->first);
1132     } else
1133       // Remove non-cse's from SubExpressionUseData.
1134       SubExpressionUseData.erase(I);
1135   }
1136
1137   if (FreeResult != Zero) {
1138     // We have some subexpressions that can be subsumed into addressing
1139     // modes in every use inside the loop.  However, it's possible that
1140     // there are so many of them that the combined FreeResult cannot
1141     // be subsumed, or that the target cannot handle both a FreeResult
1142     // and a Result in the same instruction (for example because it would
1143     // require too many registers).  Check this.
1144     for (unsigned i=0; i<NumUses; ++i) {
1145       if (!L->contains(Uses[i].Inst->getParent()))
1146         continue;
1147       // We know this is an addressing mode use; if there are any uses that
1148       // are not, FreeResult would be Zero.
1149       const Type *UseTy = Uses[i].Inst->getType();
1150       if (StoreInst *SI = dyn_cast<StoreInst>(Uses[i].Inst))
1151         UseTy = SI->getOperand(0)->getType();
1152       if (!fitsInAddressMode(FreeResult, UseTy, TLI, Result!=Zero)) {
1153         // FIXME:  could split up FreeResult into pieces here, some hoisted
1154         // and some not.  There is no obvious advantage to this.
1155         Result = SE->getAddExpr(Result, FreeResult);
1156         FreeResult = Zero;
1157         break;
1158       }
1159     }
1160   }
1161
1162   // If we found no CSE's, return now.
1163   if (Result == Zero) return Result;
1164   
1165   // If we still have a FreeResult, remove its subexpressions from
1166   // SubExpressionUseData.  This means they will remain in the use Bases.
1167   if (FreeResult != Zero) {
1168     SeparateSubExprs(SubExprs, FreeResult, SE);
1169     for (unsigned j = 0, e = SubExprs.size(); j != e; ++j) {
1170       std::map<SCEVHandle, SubExprUseData>::iterator I = 
1171          SubExpressionUseData.find(SubExprs[j]);
1172       SubExpressionUseData.erase(I);
1173     }
1174     SubExprs.clear();
1175   }
1176
1177   // Otherwise, remove all of the CSE's we found from each of the base values.
1178   for (unsigned i = 0; i != NumUses; ++i) {
1179     // Uses outside the loop don't necessarily include the common base, but
1180     // the final IV value coming into those uses does.  Instead of trying to
1181     // remove the pieces of the common base, which might not be there,
1182     // subtract off the base to compensate for this.
1183     if (!L->contains(Uses[i].Inst->getParent())) {
1184       Uses[i].Base = SE->getMinusSCEV(Uses[i].Base, Result);
1185       continue;
1186     }
1187
1188     // Split the expression into subexprs.
1189     SeparateSubExprs(SubExprs, Uses[i].Base, SE);
1190
1191     // Remove any common subexpressions.
1192     for (unsigned j = 0, e = SubExprs.size(); j != e; ++j)
1193       if (SubExpressionUseData.count(SubExprs[j])) {
1194         SubExprs.erase(SubExprs.begin()+j);
1195         --j; --e;
1196       }
1197     
1198     // Finally, add the non-shared expressions together.
1199     if (SubExprs.empty())
1200       Uses[i].Base = Zero;
1201     else
1202       Uses[i].Base = SE->getAddExpr(SubExprs);
1203     SubExprs.clear();
1204   }
1205  
1206   return Result;
1207 }
1208
1209 /// ValidStride - Check whether the given Scale is valid for all loads and 
1210 /// stores in UsersToProcess.
1211 ///
1212 bool LoopStrengthReduce::ValidStride(bool HasBaseReg,
1213                                int64_t Scale, 
1214                                const std::vector<BasedUser>& UsersToProcess) {
1215   if (!TLI)
1216     return true;
1217
1218   for (unsigned i=0, e = UsersToProcess.size(); i!=e; ++i) {
1219     // If this is a load or other access, pass the type of the access in.
1220     const Type *AccessTy = Type::VoidTy;
1221     if (StoreInst *SI = dyn_cast<StoreInst>(UsersToProcess[i].Inst))
1222       AccessTy = SI->getOperand(0)->getType();
1223     else if (LoadInst *LI = dyn_cast<LoadInst>(UsersToProcess[i].Inst))
1224       AccessTy = LI->getType();
1225     else if (isa<PHINode>(UsersToProcess[i].Inst))
1226       continue;
1227     
1228     TargetLowering::AddrMode AM;
1229     if (SCEVConstant *SC = dyn_cast<SCEVConstant>(UsersToProcess[i].Imm))
1230       AM.BaseOffs = SC->getValue()->getSExtValue();
1231     AM.HasBaseReg = HasBaseReg || !UsersToProcess[i].Base->isZero();
1232     AM.Scale = Scale;
1233
1234     // If load[imm+r*scale] is illegal, bail out.
1235     if (!TLI->isLegalAddressingMode(AM, AccessTy))
1236       return false;
1237   }
1238   return true;
1239 }
1240
1241 /// RequiresTypeConversion - Returns true if converting Ty1 to Ty2 is not
1242 /// a nop.
1243 bool LoopStrengthReduce::RequiresTypeConversion(const Type *Ty1,
1244                                                 const Type *Ty2) {
1245   if (Ty1 == Ty2)
1246     return false;
1247   if (Ty1->canLosslesslyBitCastTo(Ty2))
1248     return false;
1249   if (TLI && TLI->isTruncateFree(Ty1, Ty2))
1250     return false;
1251   if (isa<PointerType>(Ty2) && Ty1->canLosslesslyBitCastTo(UIntPtrTy))
1252     return false;
1253   if (isa<PointerType>(Ty1) && Ty2->canLosslesslyBitCastTo(UIntPtrTy))
1254     return false;
1255   return true;
1256 }
1257
1258 /// CheckForIVReuse - Returns the multiple if the stride is the multiple
1259 /// of a previous stride and it is a legal value for the target addressing
1260 /// mode scale component and optional base reg. This allows the users of
1261 /// this stride to be rewritten as prev iv * factor. It returns 0 if no
1262 /// reuse is possible.  Factors can be negative on same targets, e.g. ARM.
1263 ///
1264 /// If all uses are outside the loop, we don't require that all multiplies
1265 /// be folded into the addressing mode, nor even that the factor be constant; 
1266 /// a multiply (executed once) outside the loop is better than another IV 
1267 /// within.  Well, usually.
1268 SCEVHandle LoopStrengthReduce::CheckForIVReuse(bool HasBaseReg,
1269                                 bool AllUsesAreAddresses,
1270                                 bool AllUsesAreOutsideLoop,
1271                                 const SCEVHandle &Stride, 
1272                                 IVExpr &IV, const Type *Ty,
1273                                 const std::vector<BasedUser>& UsersToProcess) {
1274   if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Stride)) {
1275     int64_t SInt = SC->getValue()->getSExtValue();
1276     for (unsigned NewStride = 0, e = StrideOrder.size(); NewStride != e;
1277          ++NewStride) {
1278       std::map<SCEVHandle, IVsOfOneStride>::iterator SI = 
1279                 IVsByStride.find(StrideOrder[NewStride]);
1280       if (SI == IVsByStride.end() || !isa<SCEVConstant>(SI->first))
1281         continue;
1282       int64_t SSInt = cast<SCEVConstant>(SI->first)->getValue()->getSExtValue();
1283       if (SI->first != Stride &&
1284           (unsigned(abs(SInt)) < SSInt || (SInt % SSInt) != 0))
1285         continue;
1286       int64_t Scale = SInt / SSInt;
1287       // Check that this stride is valid for all the types used for loads and
1288       // stores; if it can be used for some and not others, we might as well use
1289       // the original stride everywhere, since we have to create the IV for it
1290       // anyway. If the scale is 1, then we don't need to worry about folding
1291       // multiplications.
1292       if (Scale == 1 ||
1293           (AllUsesAreAddresses &&
1294            ValidStride(HasBaseReg, Scale, UsersToProcess)))
1295         for (std::vector<IVExpr>::iterator II = SI->second.IVs.begin(),
1296                IE = SI->second.IVs.end(); II != IE; ++II)
1297           // FIXME: Only handle base == 0 for now.
1298           // Only reuse previous IV if it would not require a type conversion.
1299           if (II->Base->isZero() &&
1300               !RequiresTypeConversion(II->Base->getType(), Ty)) {
1301             IV = *II;
1302             return SE->getIntegerSCEV(Scale, Stride->getType());
1303           }
1304     }
1305   } else if (AllUsesAreOutsideLoop) {
1306     // Accept nonconstant strides here; it is really really right to substitute
1307     // an existing IV if we can.
1308     for (unsigned NewStride = 0, e = StrideOrder.size(); NewStride != e;
1309          ++NewStride) {
1310       std::map<SCEVHandle, IVsOfOneStride>::iterator SI = 
1311                 IVsByStride.find(StrideOrder[NewStride]);
1312       if (SI == IVsByStride.end() || !isa<SCEVConstant>(SI->first))
1313         continue;
1314       int64_t SSInt = cast<SCEVConstant>(SI->first)->getValue()->getSExtValue();
1315       if (SI->first != Stride && SSInt != 1)
1316         continue;
1317       for (std::vector<IVExpr>::iterator II = SI->second.IVs.begin(),
1318              IE = SI->second.IVs.end(); II != IE; ++II)
1319         // Accept nonzero base here.
1320         // Only reuse previous IV if it would not require a type conversion.
1321         if (!RequiresTypeConversion(II->Base->getType(), Ty)) {
1322           IV = *II;
1323           return Stride;
1324         }
1325     }
1326     // Special case, old IV is -1*x and this one is x.  Can treat this one as
1327     // -1*old.
1328     for (unsigned NewStride = 0, e = StrideOrder.size(); NewStride != e;
1329          ++NewStride) {
1330       std::map<SCEVHandle, IVsOfOneStride>::iterator SI = 
1331                 IVsByStride.find(StrideOrder[NewStride]);
1332       if (SI == IVsByStride.end()) 
1333         continue;
1334       if (SCEVMulExpr *ME = dyn_cast<SCEVMulExpr>(SI->first))
1335         if (SCEVConstant *SC = dyn_cast<SCEVConstant>(ME->getOperand(0)))
1336           if (Stride == ME->getOperand(1) &&
1337               SC->getValue()->getSExtValue() == -1LL)
1338             for (std::vector<IVExpr>::iterator II = SI->second.IVs.begin(),
1339                    IE = SI->second.IVs.end(); II != IE; ++II)
1340               // Accept nonzero base here.
1341               // Only reuse previous IV if it would not require type conversion.
1342               if (!RequiresTypeConversion(II->Base->getType(), Ty)) {
1343                 IV = *II;
1344                 return SE->getIntegerSCEV(-1LL, Stride->getType());
1345               }
1346     }
1347   }
1348   return SE->getIntegerSCEV(0, Stride->getType());
1349 }
1350
1351 /// PartitionByIsUseOfPostIncrementedValue - Simple boolean predicate that
1352 /// returns true if Val's isUseOfPostIncrementedValue is true.
1353 static bool PartitionByIsUseOfPostIncrementedValue(const BasedUser &Val) {
1354   return Val.isUseOfPostIncrementedValue;
1355 }
1356
1357 /// isNonConstantNegative - Return true if the specified scev is negated, but
1358 /// not a constant.
1359 static bool isNonConstantNegative(const SCEVHandle &Expr) {
1360   SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(Expr);
1361   if (!Mul) return false;
1362   
1363   // If there is a constant factor, it will be first.
1364   SCEVConstant *SC = dyn_cast<SCEVConstant>(Mul->getOperand(0));
1365   if (!SC) return false;
1366   
1367   // Return true if the value is negative, this matches things like (-42 * V).
1368   return SC->getValue()->getValue().isNegative();
1369 }
1370
1371 // CollectIVUsers - Transform our list of users and offsets to a bit more
1372 // complex table. In this new vector, each 'BasedUser' contains 'Base', the base
1373 // of the strided accesses, as well as the old information from Uses. We
1374 // progressively move information from the Base field to the Imm field, until
1375 // we eventually have the full access expression to rewrite the use.
1376 SCEVHandle LoopStrengthReduce::CollectIVUsers(const SCEVHandle &Stride,
1377                                               IVUsersOfOneStride &Uses,
1378                                               Loop *L,
1379                                               bool &AllUsesAreAddresses,
1380                                               bool &AllUsesAreOutsideLoop,
1381                                        std::vector<BasedUser> &UsersToProcess) {
1382   UsersToProcess.reserve(Uses.Users.size());
1383   for (unsigned i = 0, e = Uses.Users.size(); i != e; ++i) {
1384     UsersToProcess.push_back(BasedUser(Uses.Users[i], SE));
1385     
1386     // Move any loop variant operands from the offset field to the immediate
1387     // field of the use, so that we don't try to use something before it is
1388     // computed.
1389     MoveLoopVariantsToImmediateField(UsersToProcess.back().Base,
1390                                     UsersToProcess.back().Imm, L, SE);
1391     assert(UsersToProcess.back().Base->isLoopInvariant(L) &&
1392            "Base value is not loop invariant!");
1393   }
1394
1395   // We now have a whole bunch of uses of like-strided induction variables, but
1396   // they might all have different bases.  We want to emit one PHI node for this
1397   // stride which we fold as many common expressions (between the IVs) into as
1398   // possible.  Start by identifying the common expressions in the base values 
1399   // for the strides (e.g. if we have "A+C+B" and "A+B+D" as our bases, find
1400   // "A+B"), emit it to the preheader, then remove the expression from the
1401   // UsersToProcess base values.
1402   SCEVHandle CommonExprs =
1403     RemoveCommonExpressionsFromUseBases(UsersToProcess, SE, L, TLI);
1404
1405   // Next, figure out what we can represent in the immediate fields of
1406   // instructions.  If we can represent anything there, move it to the imm
1407   // fields of the BasedUsers.  We do this so that it increases the commonality
1408   // of the remaining uses.
1409   unsigned NumPHI = 0;
1410   for (unsigned i = 0, e = UsersToProcess.size(); i != e; ++i) {
1411     // If the user is not in the current loop, this means it is using the exit
1412     // value of the IV.  Do not put anything in the base, make sure it's all in
1413     // the immediate field to allow as much factoring as possible.
1414     if (!L->contains(UsersToProcess[i].Inst->getParent())) {
1415       UsersToProcess[i].Imm = SE->getAddExpr(UsersToProcess[i].Imm,
1416                                              UsersToProcess[i].Base);
1417       UsersToProcess[i].Base = 
1418         SE->getIntegerSCEV(0, UsersToProcess[i].Base->getType());
1419     } else {
1420
1421       // Addressing modes can be folded into loads and stores.  Be careful that
1422       // the store is through the expression, not of the expression though.
1423       bool isPHI = false;
1424       bool isAddress = isAddressUse(UsersToProcess[i].Inst,
1425                                     UsersToProcess[i].OperandValToReplace);
1426       if (isa<PHINode>(UsersToProcess[i].Inst)) {
1427         isPHI = true;
1428         ++NumPHI;
1429       }
1430
1431       // Not all uses are outside the loop.
1432       AllUsesAreOutsideLoop = false; 
1433      
1434       // If this use isn't an address, then not all uses are addresses.
1435       if (!isAddress && !isPHI)
1436         AllUsesAreAddresses = false;
1437       
1438       MoveImmediateValues(TLI, UsersToProcess[i].Inst, UsersToProcess[i].Base,
1439                           UsersToProcess[i].Imm, isAddress, L, SE);
1440     }
1441   }
1442
1443   // If one of the use if a PHI node and all other uses are addresses, still
1444   // allow iv reuse. Essentially we are trading one constant multiplication
1445   // for one fewer iv.
1446   if (NumPHI > 1)
1447     AllUsesAreAddresses = false;
1448
1449   return CommonExprs;
1450 }
1451
1452 /// StrengthReduceStridedIVUsers - Strength reduce all of the users of a single
1453 /// stride of IV.  All of the users may have different starting values, and this
1454 /// may not be the only stride (we know it is if isOnlyStride is true).
1455 void LoopStrengthReduce::StrengthReduceStridedIVUsers(const SCEVHandle &Stride,
1456                                                       IVUsersOfOneStride &Uses,
1457                                                       Loop *L,
1458                                                       bool isOnlyStride) {
1459   // If all the users are moved to another stride, then there is nothing to do.
1460   if (Uses.Users.empty())
1461     return;
1462
1463   // Keep track if every use in UsersToProcess is an address. If they all are,
1464   // we may be able to rewrite the entire collection of them in terms of a
1465   // smaller-stride IV.
1466   bool AllUsesAreAddresses = true;
1467
1468   // Keep track if every use of a single stride is outside the loop.  If so,
1469   // we want to be more aggressive about reusing a smaller-stride IV; a
1470   // multiply outside the loop is better than another IV inside.  Well, usually.
1471   bool AllUsesAreOutsideLoop = true;
1472
1473   // Transform our list of users and offsets to a bit more complex table.  In
1474   // this new vector, each 'BasedUser' contains 'Base' the base of the
1475   // strided accessas well as the old information from Uses.  We progressively
1476   // move information from the Base field to the Imm field, until we eventually
1477   // have the full access expression to rewrite the use.
1478   std::vector<BasedUser> UsersToProcess;
1479   SCEVHandle CommonExprs = CollectIVUsers(Stride, Uses, L, AllUsesAreAddresses,
1480                                           AllUsesAreOutsideLoop,
1481                                           UsersToProcess);
1482
1483   // If we managed to find some expressions in common, we'll need to carry
1484   // their value in a register and add it in for each use. This will take up
1485   // a register operand, which potentially restricts what stride values are
1486   // valid.
1487   bool HaveCommonExprs = !CommonExprs->isZero();
1488   
1489   // If all uses are addresses, check if it is possible to reuse an IV with a
1490   // stride that is a factor of this stride. And that the multiple is a number
1491   // that can be encoded in the scale field of the target addressing mode. And
1492   // that we will have a valid instruction after this substition, including the
1493   // immediate field, if any.
1494   PHINode *NewPHI = NULL;
1495   Value   *IncV   = NULL;
1496   IVExpr   ReuseIV(SE->getIntegerSCEV(0, Type::Int32Ty),
1497                    SE->getIntegerSCEV(0, Type::Int32Ty),
1498                    0, 0);
1499   SCEVHandle RewriteFactor = 
1500                   CheckForIVReuse(HaveCommonExprs, AllUsesAreAddresses,
1501                                   AllUsesAreOutsideLoop,
1502                                   Stride, ReuseIV, CommonExprs->getType(),
1503                                   UsersToProcess);
1504   const Type *ReplacedTy = CommonExprs->getType();
1505   
1506   // Now that we know what we need to do, insert the PHI node itself.
1507   //
1508   DOUT << "LSR: Examining IVs of TYPE " << *ReplacedTy << " of STRIDE "
1509        << *Stride << ":\n"
1510        << "  Common base: " << *CommonExprs << "\n";
1511
1512   SCEVExpander Rewriter(*SE, *LI);
1513   SCEVExpander PreheaderRewriter(*SE, *LI);
1514   
1515   BasicBlock  *Preheader = L->getLoopPreheader();
1516   Instruction *PreInsertPt = Preheader->getTerminator();
1517   Instruction *PhiInsertBefore = L->getHeader()->begin();
1518   BasicBlock *LatchBlock = L->getLoopLatch();
1519
1520   // Emit the initial base value into the loop preheader.
1521   Value *CommonBaseV
1522     = PreheaderRewriter.expandCodeFor(CommonExprs, PreInsertPt);
1523
1524   if (isa<SCEVConstant>(RewriteFactor) &&
1525       cast<SCEVConstant>(RewriteFactor)->isZero()) {
1526     // Create a new Phi for this base, and stick it in the loop header.
1527     NewPHI = PHINode::Create(ReplacedTy, "iv.", PhiInsertBefore);
1528     ++NumInserted;
1529   
1530     // Add common base to the new Phi node.
1531     NewPHI->addIncoming(CommonBaseV, Preheader);
1532
1533     // If the stride is negative, insert a sub instead of an add for the
1534     // increment.
1535     bool isNegative = isNonConstantNegative(Stride);
1536     SCEVHandle IncAmount = Stride;
1537     if (isNegative)
1538       IncAmount = SE->getNegativeSCEV(Stride);
1539     
1540     // Insert the stride into the preheader.
1541     Value *StrideV = PreheaderRewriter.expandCodeFor(IncAmount, PreInsertPt);
1542     if (!isa<ConstantInt>(StrideV)) ++NumVariable;
1543
1544     // Emit the increment of the base value before the terminator of the loop
1545     // latch block, and add it to the Phi node.
1546     SCEVHandle IncExp = SE->getUnknown(StrideV);
1547     if (isNegative)
1548       IncExp = SE->getNegativeSCEV(IncExp);
1549     IncExp = SE->getAddExpr(SE->getUnknown(NewPHI), IncExp);
1550   
1551     IncV = Rewriter.expandCodeFor(IncExp, LatchBlock->getTerminator());
1552     IncV->setName(NewPHI->getName()+".inc");
1553     NewPHI->addIncoming(IncV, LatchBlock);
1554
1555     // Remember this in case a later stride is multiple of this.
1556     IVsByStride[Stride].addIV(Stride, CommonExprs, NewPHI, IncV);
1557
1558 #ifndef NDEBUG
1559     DOUT << "  Inserted new PHI: IV=";
1560     WriteAsOperand(*DOUT, NewPHI, /*PrintType=*/false);
1561     DOUT << ", INC=";
1562     WriteAsOperand(*DOUT, IncV, /*PrintType=*/false);
1563     DOUT << "\n";
1564 #endif
1565   } else {
1566     DOUT << "  Rewriting in terms of existing IV of STRIDE " << *ReuseIV.Stride
1567          << " and BASE " << *ReuseIV.Base << "\n";
1568     NewPHI = ReuseIV.PHI;
1569     IncV   = ReuseIV.IncV;
1570
1571     Constant *C = dyn_cast<Constant>(CommonBaseV);
1572     if (!C ||
1573         (!C->isNullValue() &&
1574          !fitsInAddressMode(SE->getUnknown(CommonBaseV), ReplacedTy, 
1575                            TLI, false)))
1576       // We want the common base emitted into the preheader! This is just
1577       // using cast as a copy so BitCast (no-op cast) is appropriate
1578       CommonBaseV = new BitCastInst(CommonBaseV, CommonBaseV->getType(), 
1579                                     "commonbase", PreInsertPt);
1580   }
1581
1582   // We want to emit code for users inside the loop first.  To do this, we
1583   // rearrange BasedUser so that the entries at the end have
1584   // isUseOfPostIncrementedValue = false, because we pop off the end of the
1585   // vector (so we handle them first).
1586   std::partition(UsersToProcess.begin(), UsersToProcess.end(),
1587                  PartitionByIsUseOfPostIncrementedValue);
1588   
1589   // Sort this by base, so that things with the same base are handled
1590   // together.  By partitioning first and stable-sorting later, we are
1591   // guaranteed that within each base we will pop off users from within the
1592   // loop before users outside of the loop with a particular base.
1593   //
1594   // We would like to use stable_sort here, but we can't.  The problem is that
1595   // SCEVHandle's don't have a deterministic ordering w.r.t to each other, so
1596   // we don't have anything to do a '<' comparison on.  Because we think the
1597   // number of uses is small, do a horrible bubble sort which just relies on
1598   // ==.
1599   for (unsigned i = 0, e = UsersToProcess.size(); i != e; ++i) {
1600     // Get a base value.
1601     SCEVHandle Base = UsersToProcess[i].Base;
1602     
1603     // Compact everything with this base to be consecutive with this one.
1604     for (unsigned j = i+1; j != e; ++j) {
1605       if (UsersToProcess[j].Base == Base) {
1606         std::swap(UsersToProcess[i+1], UsersToProcess[j]);
1607         ++i;
1608       }
1609     }
1610   }
1611
1612   // Process all the users now.  This outer loop handles all bases, the inner
1613   // loop handles all users of a particular base.
1614   while (!UsersToProcess.empty()) {
1615     SCEVHandle Base = UsersToProcess.back().Base;
1616     Instruction *Inst = UsersToProcess.back().Inst;
1617
1618     // Emit the code for Base into the preheader.
1619     Value *BaseV = PreheaderRewriter.expandCodeFor(Base, PreInsertPt);
1620
1621 #ifndef NDEBUG
1622     DOUT << "  Examining uses with BASE ";
1623     WriteAsOperand(*DOUT, BaseV, /*PrintType=*/false);
1624     DOUT << ":\n";
1625 #endif
1626
1627     // If BaseV is a constant other than 0, make sure that it gets inserted into
1628     // the preheader, instead of being forward substituted into the uses.  We do
1629     // this by forcing a BitCast (noop cast) to be inserted into the preheader 
1630     // in this case.
1631     if (Constant *C = dyn_cast<Constant>(BaseV)) {
1632       if (!C->isNullValue() && !fitsInAddressMode(Base, ReplacedTy, 
1633                                                  TLI, false)) {
1634         // We want this constant emitted into the preheader! This is just
1635         // using cast as a copy so BitCast (no-op cast) is appropriate
1636         BaseV = new BitCastInst(BaseV, BaseV->getType(), "preheaderinsert",
1637                                 PreInsertPt);       
1638       }
1639     }
1640
1641     // Emit the code to add the immediate offset to the Phi value, just before
1642     // the instructions that we identified as using this stride and base.
1643     do {
1644       // FIXME: Use emitted users to emit other users.
1645       BasedUser &User = UsersToProcess.back();
1646
1647 #ifndef NDEBUG
1648       DOUT << "    Examining use ";
1649       WriteAsOperand(*DOUT, UsersToProcess.back().OperandValToReplace,
1650                      /*PrintType=*/false);
1651       DOUT << " in Inst: " << *Inst;
1652 #endif
1653
1654       // If this instruction wants to use the post-incremented value, move it
1655       // after the post-inc and use its value instead of the PHI.
1656       Value *RewriteOp = NewPHI;
1657       if (User.isUseOfPostIncrementedValue) {
1658         RewriteOp = IncV;
1659
1660         // If this user is in the loop, make sure it is the last thing in the
1661         // loop to ensure it is dominated by the increment.
1662         if (L->contains(User.Inst->getParent()))
1663           User.Inst->moveBefore(LatchBlock->getTerminator());
1664       }
1665       if (RewriteOp->getType() != ReplacedTy) {
1666         Instruction::CastOps opcode = Instruction::Trunc;
1667         if (ReplacedTy->getPrimitiveSizeInBits() ==
1668             RewriteOp->getType()->getPrimitiveSizeInBits())
1669           opcode = Instruction::BitCast;
1670         RewriteOp = SCEVExpander::InsertCastOfTo(opcode, RewriteOp, ReplacedTy);
1671       }
1672
1673       SCEVHandle RewriteExpr = SE->getUnknown(RewriteOp);
1674
1675       // If we had to insert new instructions for RewriteOp, we have to
1676       // consider that they may not have been able to end up immediately
1677       // next to RewriteOp, because non-PHI instructions may never precede
1678       // PHI instructions in a block. In this case, remember where the last
1679       // instruction was inserted so that if we're replacing a different
1680       // PHI node, we can use the later point to expand the final
1681       // RewriteExpr.
1682       Instruction *NewBasePt = dyn_cast<Instruction>(RewriteOp);
1683       if (RewriteOp == NewPHI) NewBasePt = 0;
1684
1685       // Clear the SCEVExpander's expression map so that we are guaranteed
1686       // to have the code emitted where we expect it.
1687       Rewriter.clear();
1688
1689       // If we are reusing the iv, then it must be multiplied by a constant
1690       // factor to take advantage of the addressing mode scale component.
1691       if (!isa<SCEVConstant>(RewriteFactor) ||
1692           !cast<SCEVConstant>(RewriteFactor)->isZero()) {
1693         // If we're reusing an IV with a nonzero base (currently this happens
1694         // only when all reuses are outside the loop) subtract that base here.
1695         // The base has been used to initialize the PHI node but we don't want
1696         // it here.
1697         if (!ReuseIV.Base->isZero()) {
1698           SCEVHandle typedBase = ReuseIV.Base;
1699           if (RewriteExpr->getType()->getPrimitiveSizeInBits() !=
1700               ReuseIV.Base->getType()->getPrimitiveSizeInBits()) {
1701             // It's possible the original IV is a larger type than the new IV,
1702             // in which case we have to truncate the Base.  We checked in
1703             // RequiresTypeConversion that this is valid.
1704             assert (RewriteExpr->getType()->getPrimitiveSizeInBits() <
1705                     ReuseIV.Base->getType()->getPrimitiveSizeInBits() &&
1706                     "Unexpected lengthening conversion!");
1707             typedBase = SE->getTruncateExpr(ReuseIV.Base, 
1708                                             RewriteExpr->getType());
1709           }
1710           RewriteExpr = SE->getMinusSCEV(RewriteExpr, typedBase);
1711         }
1712
1713         // Multiply old variable, with base removed, by new scale factor.
1714         RewriteExpr = SE->getMulExpr(RewriteFactor,
1715                                      RewriteExpr);
1716
1717         // The common base is emitted in the loop preheader. But since we
1718         // are reusing an IV, it has not been used to initialize the PHI node.
1719         // Add it to the expression used to rewrite the uses.
1720         // When this use is outside the loop, we earlier subtracted the
1721         // common base, and are adding it back here.  Use the same expression
1722         // as before, rather than CommonBaseV, so DAGCombiner will zap it.
1723         if (!isa<ConstantInt>(CommonBaseV) ||
1724             !cast<ConstantInt>(CommonBaseV)->isZero()) {
1725           if (L->contains(User.Inst->getParent()))
1726             RewriteExpr = SE->getAddExpr(RewriteExpr,
1727                                        SE->getUnknown(CommonBaseV));
1728           else
1729             RewriteExpr = SE->getAddExpr(RewriteExpr, CommonExprs);
1730         }
1731       }
1732
1733       // Now that we know what we need to do, insert code before User for the
1734       // immediate and any loop-variant expressions.
1735       if (!isa<ConstantInt>(BaseV) || !cast<ConstantInt>(BaseV)->isZero())
1736         // Add BaseV to the PHI value if needed.
1737         RewriteExpr = SE->getAddExpr(RewriteExpr, SE->getUnknown(BaseV));
1738
1739       User.RewriteInstructionToUseNewBase(RewriteExpr, NewBasePt,
1740                                           Rewriter, L, this,
1741                                           DeadInsts);
1742
1743       // Mark old value we replaced as possibly dead, so that it is eliminated
1744       // if we just replaced the last use of that value.
1745       DeadInsts.push_back(cast<Instruction>(User.OperandValToReplace));
1746
1747       UsersToProcess.pop_back();
1748       ++NumReduced;
1749
1750       // If there are any more users to process with the same base, process them
1751       // now.  We sorted by base above, so we just have to check the last elt.
1752     } while (!UsersToProcess.empty() && UsersToProcess.back().Base == Base);
1753     // TODO: Next, find out which base index is the most common, pull it out.
1754   }
1755
1756   // IMPORTANT TODO: Figure out how to partition the IV's with this stride, but
1757   // different starting values, into different PHIs.
1758 }
1759
1760 /// FindIVUserForCond - If Cond has an operand that is an expression of an IV,
1761 /// set the IV user and stride information and return true, otherwise return
1762 /// false.
1763 bool LoopStrengthReduce::FindIVUserForCond(ICmpInst *Cond, IVStrideUse *&CondUse,
1764                                        const SCEVHandle *&CondStride) {
1765   for (unsigned Stride = 0, e = StrideOrder.size(); Stride != e && !CondUse;
1766        ++Stride) {
1767     std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
1768     IVUsesByStride.find(StrideOrder[Stride]);
1769     assert(SI != IVUsesByStride.end() && "Stride doesn't exist!");
1770     
1771     for (std::vector<IVStrideUse>::iterator UI = SI->second.Users.begin(),
1772          E = SI->second.Users.end(); UI != E; ++UI)
1773       if (UI->User == Cond) {
1774         // NOTE: we could handle setcc instructions with multiple uses here, but
1775         // InstCombine does it as well for simple uses, it's not clear that it
1776         // occurs enough in real life to handle.
1777         CondUse = &*UI;
1778         CondStride = &SI->first;
1779         return true;
1780       }
1781   }
1782   return false;
1783 }    
1784
1785 namespace {
1786   // Constant strides come first which in turns are sorted by their absolute
1787   // values. If absolute values are the same, then positive strides comes first.
1788   // e.g.
1789   // 4, -1, X, 1, 2 ==> 1, -1, 2, 4, X
1790   struct StrideCompare {
1791     bool operator()(const SCEVHandle &LHS, const SCEVHandle &RHS) {
1792       SCEVConstant *LHSC = dyn_cast<SCEVConstant>(LHS);
1793       SCEVConstant *RHSC = dyn_cast<SCEVConstant>(RHS);
1794       if (LHSC && RHSC) {
1795         int64_t  LV = LHSC->getValue()->getSExtValue();
1796         int64_t  RV = RHSC->getValue()->getSExtValue();
1797         uint64_t ALV = (LV < 0) ? -LV : LV;
1798         uint64_t ARV = (RV < 0) ? -RV : RV;
1799         if (ALV == ARV) {
1800           if (LV != RV)
1801             return LV > RV;
1802         } else {
1803           return ALV < ARV;
1804         }
1805
1806         // If it's the same value but different type, sort by bit width so
1807         // that we emit larger induction variables before smaller
1808         // ones, letting the smaller be re-written in terms of larger ones.
1809         return RHS->getBitWidth() < LHS->getBitWidth();
1810       }
1811       return LHSC && !RHSC;
1812     }
1813   };
1814 }
1815
1816 /// ChangeCompareStride - If a loop termination compare instruction is the
1817 /// only use of its stride, and the compaison is against a constant value,
1818 /// try eliminate the stride by moving the compare instruction to another
1819 /// stride and change its constant operand accordingly. e.g.
1820 ///
1821 /// loop:
1822 /// ...
1823 /// v1 = v1 + 3
1824 /// v2 = v2 + 1
1825 /// if (v2 < 10) goto loop
1826 /// =>
1827 /// loop:
1828 /// ...
1829 /// v1 = v1 + 3
1830 /// if (v1 < 30) goto loop
1831 ICmpInst *LoopStrengthReduce::ChangeCompareStride(Loop *L, ICmpInst *Cond,
1832                                                 IVStrideUse* &CondUse,
1833                                                 const SCEVHandle* &CondStride) {
1834   if (StrideOrder.size() < 2 ||
1835       IVUsesByStride[*CondStride].Users.size() != 1)
1836     return Cond;
1837   const SCEVConstant *SC = dyn_cast<SCEVConstant>(*CondStride);
1838   if (!SC) return Cond;
1839   ConstantInt *C = dyn_cast<ConstantInt>(Cond->getOperand(1));
1840   if (!C) return Cond;
1841
1842   ICmpInst::Predicate Predicate = Cond->getPredicate();
1843   int64_t CmpSSInt = SC->getValue()->getSExtValue();
1844   int64_t CmpVal = C->getValue().getSExtValue();
1845   unsigned BitWidth = C->getValue().getBitWidth();
1846   uint64_t SignBit = 1ULL << (BitWidth-1);
1847   const Type *CmpTy = C->getType();
1848   const Type *NewCmpTy = NULL;
1849   unsigned TyBits = CmpTy->getPrimitiveSizeInBits();
1850   unsigned NewTyBits = 0;
1851   int64_t NewCmpVal = CmpVal;
1852   SCEVHandle *NewStride = NULL;
1853   Value *NewIncV = NULL;
1854   int64_t Scale = 1;
1855
1856   // Check stride constant and the comparision constant signs to detect
1857   // overflow.
1858   if ((CmpVal & SignBit) != (CmpSSInt & SignBit))
1859     return Cond;
1860
1861   // Look for a suitable stride / iv as replacement.
1862   std::stable_sort(StrideOrder.begin(), StrideOrder.end(), StrideCompare());
1863   for (unsigned i = 0, e = StrideOrder.size(); i != e; ++i) {
1864     std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
1865       IVUsesByStride.find(StrideOrder[i]);
1866     if (!isa<SCEVConstant>(SI->first))
1867       continue;
1868     int64_t SSInt = cast<SCEVConstant>(SI->first)->getValue()->getSExtValue();
1869     if (abs(SSInt) <= abs(CmpSSInt) || (SSInt % CmpSSInt) != 0)
1870       continue;
1871
1872     Scale = SSInt / CmpSSInt;
1873     NewCmpVal = CmpVal * Scale;
1874     APInt Mul = APInt(BitWidth, NewCmpVal);
1875     // Check for overflow.
1876     if (Mul.getSExtValue() != NewCmpVal) {
1877       NewCmpVal = CmpVal;
1878       continue;
1879     }
1880
1881     // Watch out for overflow.
1882     if (ICmpInst::isSignedPredicate(Predicate) &&
1883         (CmpVal & SignBit) != (NewCmpVal & SignBit))
1884       NewCmpVal = CmpVal;
1885
1886     if (NewCmpVal != CmpVal) {
1887       // Pick the best iv to use trying to avoid a cast.
1888       NewIncV = NULL;
1889       for (std::vector<IVStrideUse>::iterator UI = SI->second.Users.begin(),
1890              E = SI->second.Users.end(); UI != E; ++UI) {
1891         NewIncV = UI->OperandValToReplace;
1892         if (NewIncV->getType() == CmpTy)
1893           break;
1894       }
1895       if (!NewIncV) {
1896         NewCmpVal = CmpVal;
1897         continue;
1898       }
1899
1900       NewCmpTy = NewIncV->getType();
1901       NewTyBits = isa<PointerType>(NewCmpTy)
1902         ? UIntPtrTy->getPrimitiveSizeInBits()
1903         : NewCmpTy->getPrimitiveSizeInBits();
1904       if (RequiresTypeConversion(NewCmpTy, CmpTy)) {
1905         // Check if it is possible to rewrite it using
1906         // an iv / stride of a smaller integer type.
1907         bool TruncOk = false;
1908         if (NewCmpTy->isInteger()) {
1909           unsigned Bits = NewTyBits;
1910           if (ICmpInst::isSignedPredicate(Predicate))
1911             --Bits;
1912           uint64_t Mask = (1ULL << Bits) - 1;
1913           if (((uint64_t)NewCmpVal & Mask) == (uint64_t)NewCmpVal)
1914             TruncOk = true;
1915         }
1916         if (!TruncOk) {
1917           NewCmpVal = CmpVal;
1918           continue;
1919         }
1920       }
1921
1922       // Don't rewrite if use offset is non-constant and the new type is
1923       // of a different type.
1924       // FIXME: too conservative?
1925       if (NewTyBits != TyBits && !isa<SCEVConstant>(CondUse->Offset)) {
1926         NewCmpVal = CmpVal;
1927         continue;
1928       }
1929
1930       bool AllUsesAreAddresses = true;
1931       bool AllUsesAreOutsideLoop = true;
1932       std::vector<BasedUser> UsersToProcess;
1933       SCEVHandle CommonExprs = CollectIVUsers(SI->first, SI->second, L,
1934                                               AllUsesAreAddresses,
1935                                               AllUsesAreOutsideLoop,
1936                                               UsersToProcess);
1937       // Avoid rewriting the compare instruction with an iv of new stride
1938       // if it's likely the new stride uses will be rewritten using the
1939       // stride of the compare instruction.
1940       if (AllUsesAreAddresses &&
1941           ValidStride(!CommonExprs->isZero(), Scale, UsersToProcess)) {
1942         NewCmpVal = CmpVal;
1943         continue;
1944       }
1945
1946       // If scale is negative, use swapped predicate unless it's testing
1947       // for equality.
1948       if (Scale < 0 && !Cond->isEquality())
1949         Predicate = ICmpInst::getSwappedPredicate(Predicate);
1950
1951       NewStride = &StrideOrder[i];
1952       break;
1953     }
1954   }
1955
1956   // Forgo this transformation if it the increment happens to be
1957   // unfortunately positioned after the condition, and the condition
1958   // has multiple uses which prevent it from being moved immediately
1959   // before the branch. See
1960   // test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-*.ll
1961   // for an example of this situation.
1962   if (!Cond->hasOneUse()) {
1963     for (BasicBlock::iterator I = Cond, E = Cond->getParent()->end();
1964          I != E; ++I)
1965       if (I == NewIncV)
1966         return Cond;
1967   }
1968
1969   if (NewCmpVal != CmpVal) {
1970     // Create a new compare instruction using new stride / iv.
1971     ICmpInst *OldCond = Cond;
1972     Value *RHS;
1973     if (!isa<PointerType>(NewCmpTy))
1974       RHS = ConstantInt::get(NewCmpTy, NewCmpVal);
1975     else {
1976       RHS = ConstantInt::get(UIntPtrTy, NewCmpVal);
1977       RHS = SCEVExpander::InsertCastOfTo(Instruction::IntToPtr, RHS, NewCmpTy);
1978     }
1979     // Insert new compare instruction.
1980     Cond = new ICmpInst(Predicate, NewIncV, RHS,
1981                         L->getHeader()->getName() + ".termcond",
1982                         OldCond);
1983
1984     // Remove the old compare instruction. The old indvar is probably dead too.
1985     DeadInsts.push_back(cast<Instruction>(CondUse->OperandValToReplace));
1986     SE->deleteValueFromRecords(OldCond);
1987     OldCond->replaceAllUsesWith(Cond);
1988     OldCond->eraseFromParent();
1989
1990     IVUsesByStride[*CondStride].Users.pop_back();
1991     SCEVHandle NewOffset = TyBits == NewTyBits
1992       ? SE->getMulExpr(CondUse->Offset,
1993                        SE->getConstant(ConstantInt::get(CmpTy, Scale)))
1994       : SE->getConstant(ConstantInt::get(NewCmpTy,
1995         cast<SCEVConstant>(CondUse->Offset)->getValue()->getSExtValue()*Scale));
1996     IVUsesByStride[*NewStride].addUser(NewOffset, Cond, NewIncV);
1997     CondUse = &IVUsesByStride[*NewStride].Users.back();
1998     CondStride = NewStride;
1999     ++NumEliminated;
2000   }
2001
2002   return Cond;
2003 }
2004
2005 /// OptimizeSMax - Rewrite the loop's terminating condition if it uses
2006 /// an smax computation.
2007 ///
2008 /// This is a narrow solution to a specific, but acute, problem. For loops
2009 /// like this:
2010 ///
2011 ///   i = 0;
2012 ///   do {
2013 ///     p[i] = 0.0;
2014 ///   } while (++i < n);
2015 ///
2016 /// where the comparison is signed, the trip count isn't just 'n', because
2017 /// 'n' could be negative. And unfortunately this can come up even for loops
2018 /// where the user didn't use a C do-while loop. For example, seemingly
2019 /// well-behaved top-test loops will commonly be lowered like this:
2020 //
2021 ///   if (n > 0) {
2022 ///     i = 0;
2023 ///     do {
2024 ///       p[i] = 0.0;
2025 ///     } while (++i < n);
2026 ///   }
2027 ///
2028 /// and then it's possible for subsequent optimization to obscure the if
2029 /// test in such a way that indvars can't find it.
2030 ///
2031 /// When indvars can't find the if test in loops like this, it creates a
2032 /// signed-max expression, which allows it to give the loop a canonical
2033 /// induction variable:
2034 ///
2035 ///   i = 0;
2036 ///   smax = n < 1 ? 1 : n;
2037 ///   do {
2038 ///     p[i] = 0.0;
2039 ///   } while (++i != smax);
2040 ///
2041 /// Canonical induction variables are necessary because the loop passes
2042 /// are designed around them. The most obvious example of this is the
2043 /// LoopInfo analysis, which doesn't remember trip count values. It
2044 /// expects to be able to rediscover the trip count each time it is
2045 /// needed, and it does this using a simple analyis that only succeeds if
2046 /// the loop has a canonical induction variable.
2047 ///
2048 /// However, when it comes time to generate code, the maximum operation
2049 /// can be quite costly, especially if it's inside of an outer loop.
2050 ///
2051 /// This function solves this problem by detecting this type of loop and
2052 /// rewriting their conditions from ICMP_NE back to ICMP_SLT, and deleting
2053 /// the instructions for the maximum computation.
2054 ///
2055 ICmpInst *LoopStrengthReduce::OptimizeSMax(Loop *L, ICmpInst *Cond,
2056                                            IVStrideUse* &CondUse) {
2057   // Check that the loop matches the pattern we're looking for.
2058   if (Cond->getPredicate() != CmpInst::ICMP_EQ &&
2059       Cond->getPredicate() != CmpInst::ICMP_NE)
2060     return Cond;
2061
2062   SelectInst *Sel = dyn_cast<SelectInst>(Cond->getOperand(1));
2063   if (!Sel || !Sel->hasOneUse()) return Cond;
2064
2065   SCEVHandle IterationCount = SE->getIterationCount(L);
2066   if (isa<SCEVCouldNotCompute>(IterationCount))
2067     return Cond;
2068   SCEVHandle One = SE->getIntegerSCEV(1, IterationCount->getType());
2069
2070   // Adjust for an annoying getIterationCount quirk.
2071   IterationCount = SE->getAddExpr(IterationCount, One);
2072
2073   // Check for a max calculation that matches the pattern.
2074   SCEVSMaxExpr *SMax = dyn_cast<SCEVSMaxExpr>(IterationCount);
2075   if (!SMax || SMax != SE->getSCEV(Sel)) return Cond;
2076
2077   SCEVHandle SMaxLHS = SMax->getOperand(0);
2078   SCEVHandle SMaxRHS = SMax->getOperand(1);
2079   if (!SMaxLHS || SMaxLHS != One) return Cond;
2080
2081   // Check the relevant induction variable for conformance to
2082   // the pattern.
2083   SCEVHandle IV = SE->getSCEV(Cond->getOperand(0));
2084   SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(IV);
2085   if (!AR || !AR->isAffine() ||
2086       AR->getStart() != One ||
2087       AR->getStepRecurrence(*SE) != One)
2088     return Cond;
2089
2090   // Check the right operand of the select, and remember it, as it will
2091   // be used in the new comparison instruction.
2092   Value *NewRHS = 0;
2093   if (SE->getSCEV(Sel->getOperand(1)) == SMaxRHS)
2094     NewRHS = Sel->getOperand(1);
2095   else if (SE->getSCEV(Sel->getOperand(2)) == SMaxRHS)
2096     NewRHS = Sel->getOperand(2);
2097   if (!NewRHS) return Cond;
2098
2099   // Ok, everything looks ok to change the condition into an SLT or SGE and
2100   // delete the max calculation.
2101   ICmpInst *NewCond =
2102     new ICmpInst(Cond->getPredicate() == CmpInst::ICMP_NE ?
2103                    CmpInst::ICMP_SLT :
2104                    CmpInst::ICMP_SGE,
2105                  Cond->getOperand(0), NewRHS, "scmp", Cond);
2106
2107   // Delete the max calculation instructions.
2108   SE->deleteValueFromRecords(Cond);
2109   Cond->replaceAllUsesWith(NewCond);
2110   Cond->eraseFromParent();
2111   Instruction *Cmp = cast<Instruction>(Sel->getOperand(0));
2112   SE->deleteValueFromRecords(Sel);
2113   Sel->eraseFromParent();
2114   if (Cmp->use_empty()) {
2115     SE->deleteValueFromRecords(Cmp);
2116     Cmp->eraseFromParent();
2117   }
2118   CondUse->User = NewCond;
2119   return NewCond;
2120 }
2121
2122 /// OptimizeShadowIV - If IV is used in a int-to-float cast
2123 /// inside the loop then try to eliminate the cast opeation.
2124 void LoopStrengthReduce::OptimizeShadowIV(Loop *L) {
2125
2126   SCEVHandle IterationCount = SE->getIterationCount(L);
2127   if (isa<SCEVCouldNotCompute>(IterationCount))
2128     return;
2129
2130   for (unsigned Stride = 0, e = StrideOrder.size(); Stride != e;
2131        ++Stride) {
2132     std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
2133       IVUsesByStride.find(StrideOrder[Stride]);
2134     assert(SI != IVUsesByStride.end() && "Stride doesn't exist!");
2135     if (!isa<SCEVConstant>(SI->first))
2136       continue;
2137
2138     for (std::vector<IVStrideUse>::iterator UI = SI->second.Users.begin(),
2139            E = SI->second.Users.end(); UI != E; /* empty */) {
2140       std::vector<IVStrideUse>::iterator CandidateUI = UI;
2141       ++UI;
2142       Instruction *ShadowUse = CandidateUI->User;
2143       const Type *DestTy = NULL;
2144
2145       /* If shadow use is a int->float cast then insert a second IV
2146          to eliminate this cast.
2147
2148            for (unsigned i = 0; i < n; ++i) 
2149              foo((double)i);
2150
2151          is transformed into
2152
2153            double d = 0.0;
2154            for (unsigned i = 0; i < n; ++i, ++d) 
2155              foo(d);
2156       */
2157       if (UIToFPInst *UCast = dyn_cast<UIToFPInst>(CandidateUI->User))
2158         DestTy = UCast->getDestTy();
2159       else if (SIToFPInst *SCast = dyn_cast<SIToFPInst>(CandidateUI->User))
2160         DestTy = SCast->getDestTy();
2161       if (!DestTy) continue;
2162
2163       if (TLI) {
2164         /* If target does not support DestTy natively then do not apply
2165            this transformation. */
2166         MVT DVT = TLI->getValueType(DestTy);
2167         if (!TLI->isTypeLegal(DVT)) continue;
2168       }
2169
2170       PHINode *PH = dyn_cast<PHINode>(ShadowUse->getOperand(0));
2171       if (!PH) continue;
2172       if (PH->getNumIncomingValues() != 2) continue;
2173
2174       const Type *SrcTy = PH->getType();
2175       int Mantissa = DestTy->getFPMantissaWidth();
2176       if (Mantissa == -1) continue; 
2177       if ((int)TD->getTypeSizeInBits(SrcTy) > Mantissa)
2178         continue;
2179
2180       unsigned Entry, Latch;
2181       if (PH->getIncomingBlock(0) == L->getLoopPreheader()) {
2182         Entry = 0;
2183         Latch = 1;
2184       } else {
2185         Entry = 1;
2186         Latch = 0;
2187       }
2188         
2189       ConstantInt *Init = dyn_cast<ConstantInt>(PH->getIncomingValue(Entry));
2190       if (!Init) continue;
2191       ConstantFP *NewInit = ConstantFP::get(DestTy, Init->getZExtValue());
2192
2193       BinaryOperator *Incr = 
2194         dyn_cast<BinaryOperator>(PH->getIncomingValue(Latch));
2195       if (!Incr) continue;
2196       if (Incr->getOpcode() != Instruction::Add
2197           && Incr->getOpcode() != Instruction::Sub)
2198         continue;
2199
2200       /* Initialize new IV, double d = 0.0 in above example. */
2201       ConstantInt *C = NULL;
2202       if (Incr->getOperand(0) == PH)
2203         C = dyn_cast<ConstantInt>(Incr->getOperand(1));
2204       else if (Incr->getOperand(1) == PH)
2205         C = dyn_cast<ConstantInt>(Incr->getOperand(0));
2206       else
2207         continue;
2208
2209       if (!C) continue;
2210
2211       /* Add new PHINode. */
2212       PHINode *NewPH = PHINode::Create(DestTy, "IV.S.", PH);
2213
2214       /* create new increment. '++d' in above example. */
2215       ConstantFP *CFP = ConstantFP::get(DestTy, C->getZExtValue());
2216       BinaryOperator *NewIncr = 
2217         BinaryOperator::Create(Incr->getOpcode(),
2218                                NewPH, CFP, "IV.S.next.", Incr);
2219
2220       NewPH->addIncoming(NewInit, PH->getIncomingBlock(Entry));
2221       NewPH->addIncoming(NewIncr, PH->getIncomingBlock(Latch));
2222
2223       /* Remove cast operation */
2224       SE->deleteValueFromRecords(ShadowUse);
2225       ShadowUse->replaceAllUsesWith(NewPH);
2226       ShadowUse->eraseFromParent();
2227       SI->second.Users.erase(CandidateUI);
2228       NumShadow++;
2229       break;
2230     }
2231   }
2232 }
2233
2234 // OptimizeIndvars - Now that IVUsesByStride is set up with all of the indvar
2235 // uses in the loop, look to see if we can eliminate some, in favor of using
2236 // common indvars for the different uses.
2237 void LoopStrengthReduce::OptimizeIndvars(Loop *L) {
2238   // TODO: implement optzns here.
2239
2240   OptimizeShadowIV(L);
2241
2242   // Finally, get the terminating condition for the loop if possible.  If we
2243   // can, we want to change it to use a post-incremented version of its
2244   // induction variable, to allow coalescing the live ranges for the IV into
2245   // one register value.
2246   PHINode *SomePHI = cast<PHINode>(L->getHeader()->begin());
2247   BasicBlock  *Preheader = L->getLoopPreheader();
2248   BasicBlock *LatchBlock =
2249    SomePHI->getIncomingBlock(SomePHI->getIncomingBlock(0) == Preheader);
2250   BranchInst *TermBr = dyn_cast<BranchInst>(LatchBlock->getTerminator());
2251   if (!TermBr || TermBr->isUnconditional() || 
2252       !isa<ICmpInst>(TermBr->getCondition()))
2253     return;
2254   ICmpInst *Cond = cast<ICmpInst>(TermBr->getCondition());
2255
2256   // Search IVUsesByStride to find Cond's IVUse if there is one.
2257   IVStrideUse *CondUse = 0;
2258   const SCEVHandle *CondStride = 0;
2259
2260   if (!FindIVUserForCond(Cond, CondUse, CondStride))
2261     return; // setcc doesn't use the IV.
2262
2263   // If the trip count is computed in terms of an smax (due to ScalarEvolution
2264   // being unable to find a sufficient guard, for example), change the loop
2265   // comparison to use SLT instead of NE.
2266   Cond = OptimizeSMax(L, Cond, CondUse);
2267
2268   // If possible, change stride and operands of the compare instruction to
2269   // eliminate one stride.
2270   Cond = ChangeCompareStride(L, Cond, CondUse, CondStride);
2271
2272   // It's possible for the setcc instruction to be anywhere in the loop, and
2273   // possible for it to have multiple users.  If it is not immediately before
2274   // the latch block branch, move it.
2275   if (&*++BasicBlock::iterator(Cond) != (Instruction*)TermBr) {
2276     if (Cond->hasOneUse()) {   // Condition has a single use, just move it.
2277       Cond->moveBefore(TermBr);
2278     } else {
2279       // Otherwise, clone the terminating condition and insert into the loopend.
2280       Cond = cast<ICmpInst>(Cond->clone());
2281       Cond->setName(L->getHeader()->getName() + ".termcond");
2282       LatchBlock->getInstList().insert(TermBr, Cond);
2283       
2284       // Clone the IVUse, as the old use still exists!
2285       IVUsesByStride[*CondStride].addUser(CondUse->Offset, Cond,
2286                                          CondUse->OperandValToReplace);
2287       CondUse = &IVUsesByStride[*CondStride].Users.back();
2288     }
2289   }
2290
2291   // If we get to here, we know that we can transform the setcc instruction to
2292   // use the post-incremented version of the IV, allowing us to coalesce the
2293   // live ranges for the IV correctly.
2294   CondUse->Offset = SE->getMinusSCEV(CondUse->Offset, *CondStride);
2295   CondUse->isUseOfPostIncrementedValue = true;
2296   Changed = true;
2297 }
2298
2299 bool LoopStrengthReduce::runOnLoop(Loop *L, LPPassManager &LPM) {
2300
2301   LI = &getAnalysis<LoopInfo>();
2302   DT = &getAnalysis<DominatorTree>();
2303   SE = &getAnalysis<ScalarEvolution>();
2304   TD = &getAnalysis<TargetData>();
2305   UIntPtrTy = TD->getIntPtrType();
2306   Changed = false;
2307
2308   // Find all uses of induction variables in this loop, and categorize
2309   // them by stride.  Start by finding all of the PHI nodes in the header for
2310   // this loop.  If they are induction variables, inspect their uses.
2311   SmallPtrSet<Instruction*,16> Processed;   // Don't reprocess instructions.
2312   for (BasicBlock::iterator I = L->getHeader()->begin(); isa<PHINode>(I); ++I)
2313     AddUsersIfInteresting(I, L, Processed);
2314
2315   if (!IVUsesByStride.empty()) {
2316     // Optimize induction variables.  Some indvar uses can be transformed to use
2317     // strides that will be needed for other purposes.  A common example of this
2318     // is the exit test for the loop, which can often be rewritten to use the
2319     // computation of some other indvar to decide when to terminate the loop.
2320     OptimizeIndvars(L);
2321
2322     // FIXME: We can widen subreg IV's here for RISC targets.  e.g. instead of
2323     // doing computation in byte values, promote to 32-bit values if safe.
2324
2325     // FIXME: Attempt to reuse values across multiple IV's.  In particular, we
2326     // could have something like "for(i) { foo(i*8); bar(i*16) }", which should
2327     // be codegened as "for (j = 0;; j+=8) { foo(j); bar(j+j); }" on X86/PPC.
2328     // Need to be careful that IV's are all the same type.  Only works for
2329     // intptr_t indvars.
2330
2331     // If we only have one stride, we can more aggressively eliminate some
2332     // things.
2333     bool HasOneStride = IVUsesByStride.size() == 1;
2334
2335 #ifndef NDEBUG
2336     DOUT << "\nLSR on ";
2337     DEBUG(L->dump());
2338 #endif
2339
2340     // IVsByStride keeps IVs for one particular loop.
2341     assert(IVsByStride.empty() && "Stale entries in IVsByStride?");
2342
2343     // Sort the StrideOrder so we process larger strides first.
2344     std::stable_sort(StrideOrder.begin(), StrideOrder.end(), StrideCompare());
2345
2346     // Note: this processes each stride/type pair individually.  All users
2347     // passed into StrengthReduceStridedIVUsers have the same type AND stride.
2348     // Also, note that we iterate over IVUsesByStride indirectly by using
2349     // StrideOrder. This extra layer of indirection makes the ordering of
2350     // strides deterministic - not dependent on map order.
2351     for (unsigned Stride = 0, e = StrideOrder.size(); Stride != e; ++Stride) {
2352       std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
2353         IVUsesByStride.find(StrideOrder[Stride]);
2354       assert(SI != IVUsesByStride.end() && "Stride doesn't exist!");
2355       StrengthReduceStridedIVUsers(SI->first, SI->second, L, HasOneStride);
2356     }
2357   }
2358
2359   // We're done analyzing this loop; release all the state we built up for it.
2360   CastedPointers.clear();
2361   IVUsesByStride.clear();
2362   IVsByStride.clear();
2363   StrideOrder.clear();
2364   for (unsigned i=0; i<GEPlist.size(); i++)
2365     SE->deleteValueFromRecords(GEPlist[i]);
2366   GEPlist.clear();  
2367
2368   // Clean up after ourselves
2369   if (!DeadInsts.empty()) {
2370     DeleteTriviallyDeadInstructions();
2371
2372     BasicBlock::iterator I = L->getHeader()->begin();
2373     while (PHINode *PN = dyn_cast<PHINode>(I++)) {
2374       // At this point, we know that we have killed one or more IV users.
2375       // It is worth checking to see if the cannonical indvar is also
2376       // dead, so that we can remove it as well.
2377       //
2378       // We can remove a PHI if it is on a cycle in the def-use graph
2379       // where each node in the cycle has degree one, i.e. only one use,
2380       // and is an instruction with no side effects.
2381       //
2382       // FIXME: this needs to eliminate an induction variable even if it's being
2383       // compared against some value to decide loop termination.
2384       if (!PN->hasOneUse())
2385         continue;
2386       
2387       SmallPtrSet<PHINode *, 4> PHIs;
2388       for (Instruction *J = dyn_cast<Instruction>(*PN->use_begin());
2389            J && J->hasOneUse() && !J->mayWriteToMemory();
2390            J = dyn_cast<Instruction>(*J->use_begin())) {
2391         // If we find the original PHI, we've discovered a cycle.
2392         if (J == PN) {
2393           // Break the cycle and mark the PHI for deletion.
2394           SE->deleteValueFromRecords(PN);
2395           PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
2396           DeadInsts.push_back(PN);
2397           Changed = true;
2398           break;
2399         }
2400         // If we find a PHI more than once, we're on a cycle that
2401         // won't prove fruitful.
2402         if (isa<PHINode>(J) && !PHIs.insert(cast<PHINode>(J)))
2403           break;
2404       }
2405     }
2406     DeleteTriviallyDeadInstructions();
2407   }
2408   return Changed;
2409 }