Use DEBUG() instead of passing *DOUT to WriteAsOperand,
[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     DOUT << "      Replacing with ";
766     DEBUG(WriteAsOperand(*DOUT, NewVal, /*PrintType=*/false));
767     DOUT << ", which has value " << *NewBase << " plus IMM " << *Imm << "\n";
768     return;
769   }
770
771   // PHI nodes are more complex.  We have to insert one copy of the NewBase+Imm
772   // expression into each operand block that uses it.  Note that PHI nodes can
773   // have multiple entries for the same predecessor.  We use a map to make sure
774   // that a PHI node only has a single Value* for each predecessor (which also
775   // prevents us from inserting duplicate code in some blocks).
776   DenseMap<BasicBlock*, Value*> InsertedCode;
777   PHINode *PN = cast<PHINode>(Inst);
778   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
779     if (PN->getIncomingValue(i) == OperandValToReplace) {
780       // If the original expression is outside the loop, put the replacement
781       // code in the same place as the original expression,
782       // which need not be an immediate predecessor of this PHI.  This way we 
783       // need only one copy of it even if it is referenced multiple times in
784       // the PHI.  We don't do this when the original expression is inside the
785       // loop because multiple copies sometimes do useful sinking of code in
786       // that case(?).
787       Instruction *OldLoc = dyn_cast<Instruction>(OperandValToReplace);
788       if (L->contains(OldLoc->getParent())) {
789         // If this is a critical edge, split the edge so that we do not insert
790         // the code on all predecessor/successor paths.  We do this unless this
791         // is the canonical backedge for this loop, as this can make some
792         // inserted code be in an illegal position.
793         BasicBlock *PHIPred = PN->getIncomingBlock(i);
794         if (e != 1 && PHIPred->getTerminator()->getNumSuccessors() > 1 &&
795             (PN->getParent() != L->getHeader() || !L->contains(PHIPred))) {
796
797           // First step, split the critical edge.
798           SplitCriticalEdge(PHIPred, PN->getParent(), P, false);
799
800           // Next step: move the basic block.  In particular, if the PHI node
801           // is outside of the loop, and PredTI is in the loop, we want to
802           // move the block to be immediately before the PHI block, not
803           // immediately after PredTI.
804           if (L->contains(PHIPred) && !L->contains(PN->getParent())) {
805             BasicBlock *NewBB = PN->getIncomingBlock(i);
806             NewBB->moveBefore(PN->getParent());
807           }
808
809           // Splitting the edge can reduce the number of PHI entries we have.
810           e = PN->getNumIncomingValues();
811         }
812       }
813       Value *&Code = InsertedCode[PN->getIncomingBlock(i)];
814       if (!Code) {
815         // Insert the code into the end of the predecessor block.
816         Instruction *InsertPt = (L->contains(OldLoc->getParent())) ?
817                                 PN->getIncomingBlock(i)->getTerminator() :
818                                 OldLoc->getParent()->getTerminator();
819         Code = InsertCodeForBaseAtPosition(NewBase, Rewriter, InsertPt, L);
820
821         // Adjust the type back to match the PHI. Note that we can't use
822         // InsertPt here because the SCEVExpander may have inserted its
823         // instructions after that point, in its efforts to avoid inserting
824         // redundant expressions.
825         if (isa<PointerType>(PN->getType())) {
826           Code = SCEVExpander::InsertCastOfTo(Instruction::IntToPtr,
827                                               Code,
828                                               PN->getType());
829         }
830
831         DOUT << "      Changing PHI use to ";
832         DEBUG(WriteAsOperand(*DOUT, Code, /*PrintType=*/false));
833         DOUT << ", which has value " << *NewBase << " plus IMM " << *Imm << "\n";
834       }
835
836       // Replace the use of the operand Value with the new Phi we just created.
837       PN->setIncomingValue(i, Code);
838       Rewriter.clear();
839     }
840   }
841
842   // PHI node might have become a constant value after SplitCriticalEdge.
843   DeadInsts.push_back(Inst);
844 }
845
846
847 /// fitsInAddressMode - Return true if V can be subsumed within an addressing
848 /// mode, and does not need to be put in a register first.
849 static bool fitsInAddressMode(const SCEVHandle &V, const Type *UseTy,
850                              const TargetLowering *TLI, bool HasBaseReg) {
851   if (SCEVConstant *SC = dyn_cast<SCEVConstant>(V)) {
852     int64_t VC = SC->getValue()->getSExtValue();
853     if (TLI) {
854       TargetLowering::AddrMode AM;
855       AM.BaseOffs = VC;
856       AM.HasBaseReg = HasBaseReg;
857       return TLI->isLegalAddressingMode(AM, UseTy);
858     } else {
859       // Defaults to PPC. PPC allows a sign-extended 16-bit immediate field.
860       return (VC > -(1 << 16) && VC < (1 << 16)-1);
861     }
862   }
863
864   if (SCEVUnknown *SU = dyn_cast<SCEVUnknown>(V))
865     if (ConstantExpr *CE = dyn_cast<ConstantExpr>(SU->getValue()))
866       if (TLI && CE->getOpcode() == Instruction::PtrToInt) {
867         Constant *Op0 = CE->getOperand(0);
868         if (GlobalValue *GV = dyn_cast<GlobalValue>(Op0)) {
869           TargetLowering::AddrMode AM;
870           AM.BaseGV = GV;
871           AM.HasBaseReg = HasBaseReg;
872           return TLI->isLegalAddressingMode(AM, UseTy);
873         }
874       }
875   return false;
876 }
877
878 /// MoveLoopVariantsToImmediateField - Move any subexpressions from Val that are
879 /// loop varying to the Imm operand.
880 static void MoveLoopVariantsToImmediateField(SCEVHandle &Val, SCEVHandle &Imm,
881                                             Loop *L, ScalarEvolution *SE) {
882   if (Val->isLoopInvariant(L)) return;  // Nothing to do.
883   
884   if (SCEVAddExpr *SAE = dyn_cast<SCEVAddExpr>(Val)) {
885     std::vector<SCEVHandle> NewOps;
886     NewOps.reserve(SAE->getNumOperands());
887     
888     for (unsigned i = 0; i != SAE->getNumOperands(); ++i)
889       if (!SAE->getOperand(i)->isLoopInvariant(L)) {
890         // If this is a loop-variant expression, it must stay in the immediate
891         // field of the expression.
892         Imm = SE->getAddExpr(Imm, SAE->getOperand(i));
893       } else {
894         NewOps.push_back(SAE->getOperand(i));
895       }
896
897     if (NewOps.empty())
898       Val = SE->getIntegerSCEV(0, Val->getType());
899     else
900       Val = SE->getAddExpr(NewOps);
901   } else if (SCEVAddRecExpr *SARE = dyn_cast<SCEVAddRecExpr>(Val)) {
902     // Try to pull immediates out of the start value of nested addrec's.
903     SCEVHandle Start = SARE->getStart();
904     MoveLoopVariantsToImmediateField(Start, Imm, L, SE);
905     
906     std::vector<SCEVHandle> Ops(SARE->op_begin(), SARE->op_end());
907     Ops[0] = Start;
908     Val = SE->getAddRecExpr(Ops, SARE->getLoop());
909   } else {
910     // Otherwise, all of Val is variant, move the whole thing over.
911     Imm = SE->getAddExpr(Imm, Val);
912     Val = SE->getIntegerSCEV(0, Val->getType());
913   }
914 }
915
916
917 /// MoveImmediateValues - Look at Val, and pull out any additions of constants
918 /// that can fit into the immediate field of instructions in the target.
919 /// Accumulate these immediate values into the Imm value.
920 static void MoveImmediateValues(const TargetLowering *TLI,
921                                 Instruction *User,
922                                 SCEVHandle &Val, SCEVHandle &Imm,
923                                 bool isAddress, Loop *L,
924                                 ScalarEvolution *SE) {
925   const Type *UseTy = User->getType();
926   if (StoreInst *SI = dyn_cast<StoreInst>(User))
927     UseTy = SI->getOperand(0)->getType();
928
929   if (SCEVAddExpr *SAE = dyn_cast<SCEVAddExpr>(Val)) {
930     std::vector<SCEVHandle> NewOps;
931     NewOps.reserve(SAE->getNumOperands());
932     
933     for (unsigned i = 0; i != SAE->getNumOperands(); ++i) {
934       SCEVHandle NewOp = SAE->getOperand(i);
935       MoveImmediateValues(TLI, User, NewOp, Imm, isAddress, L, SE);
936       
937       if (!NewOp->isLoopInvariant(L)) {
938         // If this is a loop-variant expression, it must stay in the immediate
939         // field of the expression.
940         Imm = SE->getAddExpr(Imm, NewOp);
941       } else {
942         NewOps.push_back(NewOp);
943       }
944     }
945
946     if (NewOps.empty())
947       Val = SE->getIntegerSCEV(0, Val->getType());
948     else
949       Val = SE->getAddExpr(NewOps);
950     return;
951   } else if (SCEVAddRecExpr *SARE = dyn_cast<SCEVAddRecExpr>(Val)) {
952     // Try to pull immediates out of the start value of nested addrec's.
953     SCEVHandle Start = SARE->getStart();
954     MoveImmediateValues(TLI, User, Start, Imm, isAddress, L, SE);
955     
956     if (Start != SARE->getStart()) {
957       std::vector<SCEVHandle> Ops(SARE->op_begin(), SARE->op_end());
958       Ops[0] = Start;
959       Val = SE->getAddRecExpr(Ops, SARE->getLoop());
960     }
961     return;
962   } else if (SCEVMulExpr *SME = dyn_cast<SCEVMulExpr>(Val)) {
963     // Transform "8 * (4 + v)" -> "32 + 8*V" if "32" fits in the immed field.
964     if (isAddress && fitsInAddressMode(SME->getOperand(0), UseTy, TLI, false) &&
965         SME->getNumOperands() == 2 && SME->isLoopInvariant(L)) {
966
967       SCEVHandle SubImm = SE->getIntegerSCEV(0, Val->getType());
968       SCEVHandle NewOp = SME->getOperand(1);
969       MoveImmediateValues(TLI, User, NewOp, SubImm, isAddress, L, SE);
970       
971       // If we extracted something out of the subexpressions, see if we can 
972       // simplify this!
973       if (NewOp != SME->getOperand(1)) {
974         // Scale SubImm up by "8".  If the result is a target constant, we are
975         // good.
976         SubImm = SE->getMulExpr(SubImm, SME->getOperand(0));
977         if (fitsInAddressMode(SubImm, UseTy, TLI, false)) {
978           // Accumulate the immediate.
979           Imm = SE->getAddExpr(Imm, SubImm);
980           
981           // Update what is left of 'Val'.
982           Val = SE->getMulExpr(SME->getOperand(0), NewOp);
983           return;
984         }
985       }
986     }
987   }
988
989   // Loop-variant expressions must stay in the immediate field of the
990   // expression.
991   if ((isAddress && fitsInAddressMode(Val, UseTy, TLI, false)) ||
992       !Val->isLoopInvariant(L)) {
993     Imm = SE->getAddExpr(Imm, Val);
994     Val = SE->getIntegerSCEV(0, Val->getType());
995     return;
996   }
997
998   // Otherwise, no immediates to move.
999 }
1000
1001
1002 /// SeparateSubExprs - Decompose Expr into all of the subexpressions that are
1003 /// added together.  This is used to reassociate common addition subexprs
1004 /// together for maximal sharing when rewriting bases.
1005 static void SeparateSubExprs(std::vector<SCEVHandle> &SubExprs,
1006                              SCEVHandle Expr,
1007                              ScalarEvolution *SE) {
1008   if (SCEVAddExpr *AE = dyn_cast<SCEVAddExpr>(Expr)) {
1009     for (unsigned j = 0, e = AE->getNumOperands(); j != e; ++j)
1010       SeparateSubExprs(SubExprs, AE->getOperand(j), SE);
1011   } else if (SCEVAddRecExpr *SARE = dyn_cast<SCEVAddRecExpr>(Expr)) {
1012     SCEVHandle Zero = SE->getIntegerSCEV(0, Expr->getType());
1013     if (SARE->getOperand(0) == Zero) {
1014       SubExprs.push_back(Expr);
1015     } else {
1016       // Compute the addrec with zero as its base.
1017       std::vector<SCEVHandle> Ops(SARE->op_begin(), SARE->op_end());
1018       Ops[0] = Zero;   // Start with zero base.
1019       SubExprs.push_back(SE->getAddRecExpr(Ops, SARE->getLoop()));
1020       
1021
1022       SeparateSubExprs(SubExprs, SARE->getOperand(0), SE);
1023     }
1024   } else if (!Expr->isZero()) {
1025     // Do not add zero.
1026     SubExprs.push_back(Expr);
1027   }
1028 }
1029
1030 // This is logically local to the following function, but C++ says we have 
1031 // to make it file scope.
1032 struct SubExprUseData { unsigned Count; bool notAllUsesAreFree; };
1033
1034 /// RemoveCommonExpressionsFromUseBases - Look through all of the Bases of all
1035 /// the Uses, removing any common subexpressions, except that if all such
1036 /// subexpressions can be folded into an addressing mode for all uses inside
1037 /// the loop (this case is referred to as "free" in comments herein) we do
1038 /// not remove anything.  This looks for things like (a+b+c) and
1039 /// (a+c+d) and computes the common (a+c) subexpression.  The common expression
1040 /// is *removed* from the Bases and returned.
1041 static SCEVHandle 
1042 RemoveCommonExpressionsFromUseBases(std::vector<BasedUser> &Uses,
1043                                     ScalarEvolution *SE, Loop *L,
1044                                     const TargetLowering *TLI) {
1045   unsigned NumUses = Uses.size();
1046
1047   // Only one use?  This is a very common case, so we handle it specially and
1048   // cheaply.
1049   SCEVHandle Zero = SE->getIntegerSCEV(0, Uses[0].Base->getType());
1050   SCEVHandle Result = Zero;
1051   SCEVHandle FreeResult = Zero;
1052   if (NumUses == 1) {
1053     // If the use is inside the loop, use its base, regardless of what it is:
1054     // it is clearly shared across all the IV's.  If the use is outside the loop
1055     // (which means after it) we don't want to factor anything *into* the loop,
1056     // so just use 0 as the base.
1057     if (L->contains(Uses[0].Inst->getParent()))
1058       std::swap(Result, Uses[0].Base);
1059     return Result;
1060   }
1061
1062   // To find common subexpressions, count how many of Uses use each expression.
1063   // If any subexpressions are used Uses.size() times, they are common.
1064   // Also track whether all uses of each expression can be moved into an
1065   // an addressing mode "for free"; such expressions are left within the loop.
1066   // struct SubExprUseData { unsigned Count; bool notAllUsesAreFree; };
1067   std::map<SCEVHandle, SubExprUseData> SubExpressionUseData;
1068   
1069   // UniqueSubExprs - Keep track of all of the subexpressions we see in the
1070   // order we see them.
1071   std::vector<SCEVHandle> UniqueSubExprs;
1072
1073   std::vector<SCEVHandle> SubExprs;
1074   unsigned NumUsesInsideLoop = 0;
1075   for (unsigned i = 0; i != NumUses; ++i) {
1076     // If the user is outside the loop, just ignore it for base computation.
1077     // Since the user is outside the loop, it must be *after* the loop (if it
1078     // were before, it could not be based on the loop IV).  We don't want users
1079     // after the loop to affect base computation of values *inside* the loop,
1080     // because we can always add their offsets to the result IV after the loop
1081     // is done, ensuring we get good code inside the loop.
1082     if (!L->contains(Uses[i].Inst->getParent()))
1083       continue;
1084     NumUsesInsideLoop++;
1085     
1086     // If the base is zero (which is common), return zero now, there are no
1087     // CSEs we can find.
1088     if (Uses[i].Base == Zero) return Zero;
1089
1090     // If this use is as an address we may be able to put CSEs in the addressing
1091     // mode rather than hoisting them.
1092     bool isAddrUse = isAddressUse(Uses[i].Inst, Uses[i].OperandValToReplace);
1093     // We may need the UseTy below, but only when isAddrUse, so compute it
1094     // only in that case.
1095     const Type *UseTy = 0;
1096     if (isAddrUse) {
1097       UseTy  = Uses[i].Inst->getType();
1098       if (StoreInst *SI = dyn_cast<StoreInst>(Uses[i].Inst))
1099         UseTy = SI->getOperand(0)->getType();
1100     }
1101
1102     // Split the expression into subexprs.
1103     SeparateSubExprs(SubExprs, Uses[i].Base, SE);
1104     // Add one to SubExpressionUseData.Count for each subexpr present, and
1105     // if the subexpr is not a valid immediate within an addressing mode use,
1106     // set SubExpressionUseData.notAllUsesAreFree.  We definitely want to
1107     // hoist these out of the loop (if they are common to all uses).
1108     for (unsigned j = 0, e = SubExprs.size(); j != e; ++j) {
1109       if (++SubExpressionUseData[SubExprs[j]].Count == 1)
1110         UniqueSubExprs.push_back(SubExprs[j]);
1111       if (!isAddrUse || !fitsInAddressMode(SubExprs[j], UseTy, TLI, false))
1112         SubExpressionUseData[SubExprs[j]].notAllUsesAreFree = true;
1113     }
1114     SubExprs.clear();
1115   }
1116
1117   // Now that we know how many times each is used, build Result.  Iterate over
1118   // UniqueSubexprs so that we have a stable ordering.
1119   for (unsigned i = 0, e = UniqueSubExprs.size(); i != e; ++i) {
1120     std::map<SCEVHandle, SubExprUseData>::iterator I = 
1121        SubExpressionUseData.find(UniqueSubExprs[i]);
1122     assert(I != SubExpressionUseData.end() && "Entry not found?");
1123     if (I->second.Count == NumUsesInsideLoop) { // Found CSE! 
1124       if (I->second.notAllUsesAreFree)
1125         Result = SE->getAddExpr(Result, I->first);
1126       else 
1127         FreeResult = SE->getAddExpr(FreeResult, I->first);
1128     } else
1129       // Remove non-cse's from SubExpressionUseData.
1130       SubExpressionUseData.erase(I);
1131   }
1132
1133   if (FreeResult != Zero) {
1134     // We have some subexpressions that can be subsumed into addressing
1135     // modes in every use inside the loop.  However, it's possible that
1136     // there are so many of them that the combined FreeResult cannot
1137     // be subsumed, or that the target cannot handle both a FreeResult
1138     // and a Result in the same instruction (for example because it would
1139     // require too many registers).  Check this.
1140     for (unsigned i=0; i<NumUses; ++i) {
1141       if (!L->contains(Uses[i].Inst->getParent()))
1142         continue;
1143       // We know this is an addressing mode use; if there are any uses that
1144       // are not, FreeResult would be Zero.
1145       const Type *UseTy = Uses[i].Inst->getType();
1146       if (StoreInst *SI = dyn_cast<StoreInst>(Uses[i].Inst))
1147         UseTy = SI->getOperand(0)->getType();
1148       if (!fitsInAddressMode(FreeResult, UseTy, TLI, Result!=Zero)) {
1149         // FIXME:  could split up FreeResult into pieces here, some hoisted
1150         // and some not.  There is no obvious advantage to this.
1151         Result = SE->getAddExpr(Result, FreeResult);
1152         FreeResult = Zero;
1153         break;
1154       }
1155     }
1156   }
1157
1158   // If we found no CSE's, return now.
1159   if (Result == Zero) return Result;
1160   
1161   // If we still have a FreeResult, remove its subexpressions from
1162   // SubExpressionUseData.  This means they will remain in the use Bases.
1163   if (FreeResult != Zero) {
1164     SeparateSubExprs(SubExprs, FreeResult, SE);
1165     for (unsigned j = 0, e = SubExprs.size(); j != e; ++j) {
1166       std::map<SCEVHandle, SubExprUseData>::iterator I = 
1167          SubExpressionUseData.find(SubExprs[j]);
1168       SubExpressionUseData.erase(I);
1169     }
1170     SubExprs.clear();
1171   }
1172
1173   // Otherwise, remove all of the CSE's we found from each of the base values.
1174   for (unsigned i = 0; i != NumUses; ++i) {
1175     // Uses outside the loop don't necessarily include the common base, but
1176     // the final IV value coming into those uses does.  Instead of trying to
1177     // remove the pieces of the common base, which might not be there,
1178     // subtract off the base to compensate for this.
1179     if (!L->contains(Uses[i].Inst->getParent())) {
1180       Uses[i].Base = SE->getMinusSCEV(Uses[i].Base, Result);
1181       continue;
1182     }
1183
1184     // Split the expression into subexprs.
1185     SeparateSubExprs(SubExprs, Uses[i].Base, SE);
1186
1187     // Remove any common subexpressions.
1188     for (unsigned j = 0, e = SubExprs.size(); j != e; ++j)
1189       if (SubExpressionUseData.count(SubExprs[j])) {
1190         SubExprs.erase(SubExprs.begin()+j);
1191         --j; --e;
1192       }
1193     
1194     // Finally, add the non-shared expressions together.
1195     if (SubExprs.empty())
1196       Uses[i].Base = Zero;
1197     else
1198       Uses[i].Base = SE->getAddExpr(SubExprs);
1199     SubExprs.clear();
1200   }
1201  
1202   return Result;
1203 }
1204
1205 /// ValidStride - Check whether the given Scale is valid for all loads and 
1206 /// stores in UsersToProcess.
1207 ///
1208 bool LoopStrengthReduce::ValidStride(bool HasBaseReg,
1209                                int64_t Scale, 
1210                                const std::vector<BasedUser>& UsersToProcess) {
1211   if (!TLI)
1212     return true;
1213
1214   for (unsigned i=0, e = UsersToProcess.size(); i!=e; ++i) {
1215     // If this is a load or other access, pass the type of the access in.
1216     const Type *AccessTy = Type::VoidTy;
1217     if (StoreInst *SI = dyn_cast<StoreInst>(UsersToProcess[i].Inst))
1218       AccessTy = SI->getOperand(0)->getType();
1219     else if (LoadInst *LI = dyn_cast<LoadInst>(UsersToProcess[i].Inst))
1220       AccessTy = LI->getType();
1221     else if (isa<PHINode>(UsersToProcess[i].Inst))
1222       continue;
1223     
1224     TargetLowering::AddrMode AM;
1225     if (SCEVConstant *SC = dyn_cast<SCEVConstant>(UsersToProcess[i].Imm))
1226       AM.BaseOffs = SC->getValue()->getSExtValue();
1227     AM.HasBaseReg = HasBaseReg || !UsersToProcess[i].Base->isZero();
1228     AM.Scale = Scale;
1229
1230     // If load[imm+r*scale] is illegal, bail out.
1231     if (!TLI->isLegalAddressingMode(AM, AccessTy))
1232       return false;
1233   }
1234   return true;
1235 }
1236
1237 /// RequiresTypeConversion - Returns true if converting Ty1 to Ty2 is not
1238 /// a nop.
1239 bool LoopStrengthReduce::RequiresTypeConversion(const Type *Ty1,
1240                                                 const Type *Ty2) {
1241   if (Ty1 == Ty2)
1242     return false;
1243   if (Ty1->canLosslesslyBitCastTo(Ty2))
1244     return false;
1245   if (TLI && TLI->isTruncateFree(Ty1, Ty2))
1246     return false;
1247   if (isa<PointerType>(Ty2) && Ty1->canLosslesslyBitCastTo(UIntPtrTy))
1248     return false;
1249   if (isa<PointerType>(Ty1) && Ty2->canLosslesslyBitCastTo(UIntPtrTy))
1250     return false;
1251   return true;
1252 }
1253
1254 /// CheckForIVReuse - Returns the multiple if the stride is the multiple
1255 /// of a previous stride and it is a legal value for the target addressing
1256 /// mode scale component and optional base reg. This allows the users of
1257 /// this stride to be rewritten as prev iv * factor. It returns 0 if no
1258 /// reuse is possible.  Factors can be negative on same targets, e.g. ARM.
1259 ///
1260 /// If all uses are outside the loop, we don't require that all multiplies
1261 /// be folded into the addressing mode, nor even that the factor be constant; 
1262 /// a multiply (executed once) outside the loop is better than another IV 
1263 /// within.  Well, usually.
1264 SCEVHandle LoopStrengthReduce::CheckForIVReuse(bool HasBaseReg,
1265                                 bool AllUsesAreAddresses,
1266                                 bool AllUsesAreOutsideLoop,
1267                                 const SCEVHandle &Stride, 
1268                                 IVExpr &IV, const Type *Ty,
1269                                 const std::vector<BasedUser>& UsersToProcess) {
1270   if (SCEVConstant *SC = dyn_cast<SCEVConstant>(Stride)) {
1271     int64_t SInt = SC->getValue()->getSExtValue();
1272     for (unsigned NewStride = 0, e = StrideOrder.size(); NewStride != e;
1273          ++NewStride) {
1274       std::map<SCEVHandle, IVsOfOneStride>::iterator SI = 
1275                 IVsByStride.find(StrideOrder[NewStride]);
1276       if (SI == IVsByStride.end() || !isa<SCEVConstant>(SI->first))
1277         continue;
1278       int64_t SSInt = cast<SCEVConstant>(SI->first)->getValue()->getSExtValue();
1279       if (SI->first != Stride &&
1280           (unsigned(abs(SInt)) < SSInt || (SInt % SSInt) != 0))
1281         continue;
1282       int64_t Scale = SInt / SSInt;
1283       // Check that this stride is valid for all the types used for loads and
1284       // stores; if it can be used for some and not others, we might as well use
1285       // the original stride everywhere, since we have to create the IV for it
1286       // anyway. If the scale is 1, then we don't need to worry about folding
1287       // multiplications.
1288       if (Scale == 1 ||
1289           (AllUsesAreAddresses &&
1290            ValidStride(HasBaseReg, Scale, UsersToProcess)))
1291         for (std::vector<IVExpr>::iterator II = SI->second.IVs.begin(),
1292                IE = SI->second.IVs.end(); II != IE; ++II)
1293           // FIXME: Only handle base == 0 for now.
1294           // Only reuse previous IV if it would not require a type conversion.
1295           if (II->Base->isZero() &&
1296               !RequiresTypeConversion(II->Base->getType(), Ty)) {
1297             IV = *II;
1298             return SE->getIntegerSCEV(Scale, Stride->getType());
1299           }
1300     }
1301   } else if (AllUsesAreOutsideLoop) {
1302     // Accept nonconstant strides here; it is really really right to substitute
1303     // an existing IV if we can.
1304     for (unsigned NewStride = 0, e = StrideOrder.size(); NewStride != e;
1305          ++NewStride) {
1306       std::map<SCEVHandle, IVsOfOneStride>::iterator SI = 
1307                 IVsByStride.find(StrideOrder[NewStride]);
1308       if (SI == IVsByStride.end() || !isa<SCEVConstant>(SI->first))
1309         continue;
1310       int64_t SSInt = cast<SCEVConstant>(SI->first)->getValue()->getSExtValue();
1311       if (SI->first != Stride && SSInt != 1)
1312         continue;
1313       for (std::vector<IVExpr>::iterator II = SI->second.IVs.begin(),
1314              IE = SI->second.IVs.end(); II != IE; ++II)
1315         // Accept nonzero base here.
1316         // Only reuse previous IV if it would not require a type conversion.
1317         if (!RequiresTypeConversion(II->Base->getType(), Ty)) {
1318           IV = *II;
1319           return Stride;
1320         }
1321     }
1322     // Special case, old IV is -1*x and this one is x.  Can treat this one as
1323     // -1*old.
1324     for (unsigned NewStride = 0, e = StrideOrder.size(); NewStride != e;
1325          ++NewStride) {
1326       std::map<SCEVHandle, IVsOfOneStride>::iterator SI = 
1327                 IVsByStride.find(StrideOrder[NewStride]);
1328       if (SI == IVsByStride.end()) 
1329         continue;
1330       if (SCEVMulExpr *ME = dyn_cast<SCEVMulExpr>(SI->first))
1331         if (SCEVConstant *SC = dyn_cast<SCEVConstant>(ME->getOperand(0)))
1332           if (Stride == ME->getOperand(1) &&
1333               SC->getValue()->getSExtValue() == -1LL)
1334             for (std::vector<IVExpr>::iterator II = SI->second.IVs.begin(),
1335                    IE = SI->second.IVs.end(); II != IE; ++II)
1336               // Accept nonzero base here.
1337               // Only reuse previous IV if it would not require type conversion.
1338               if (!RequiresTypeConversion(II->Base->getType(), Ty)) {
1339                 IV = *II;
1340                 return SE->getIntegerSCEV(-1LL, Stride->getType());
1341               }
1342     }
1343   }
1344   return SE->getIntegerSCEV(0, Stride->getType());
1345 }
1346
1347 /// PartitionByIsUseOfPostIncrementedValue - Simple boolean predicate that
1348 /// returns true if Val's isUseOfPostIncrementedValue is true.
1349 static bool PartitionByIsUseOfPostIncrementedValue(const BasedUser &Val) {
1350   return Val.isUseOfPostIncrementedValue;
1351 }
1352
1353 /// isNonConstantNegative - Return true if the specified scev is negated, but
1354 /// not a constant.
1355 static bool isNonConstantNegative(const SCEVHandle &Expr) {
1356   SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(Expr);
1357   if (!Mul) return false;
1358   
1359   // If there is a constant factor, it will be first.
1360   SCEVConstant *SC = dyn_cast<SCEVConstant>(Mul->getOperand(0));
1361   if (!SC) return false;
1362   
1363   // Return true if the value is negative, this matches things like (-42 * V).
1364   return SC->getValue()->getValue().isNegative();
1365 }
1366
1367 // CollectIVUsers - Transform our list of users and offsets to a bit more
1368 // complex table. In this new vector, each 'BasedUser' contains 'Base', the base
1369 // of the strided accesses, as well as the old information from Uses. We
1370 // progressively move information from the Base field to the Imm field, until
1371 // we eventually have the full access expression to rewrite the use.
1372 SCEVHandle LoopStrengthReduce::CollectIVUsers(const SCEVHandle &Stride,
1373                                               IVUsersOfOneStride &Uses,
1374                                               Loop *L,
1375                                               bool &AllUsesAreAddresses,
1376                                               bool &AllUsesAreOutsideLoop,
1377                                        std::vector<BasedUser> &UsersToProcess) {
1378   UsersToProcess.reserve(Uses.Users.size());
1379   for (unsigned i = 0, e = Uses.Users.size(); i != e; ++i) {
1380     UsersToProcess.push_back(BasedUser(Uses.Users[i], SE));
1381     
1382     // Move any loop variant operands from the offset field to the immediate
1383     // field of the use, so that we don't try to use something before it is
1384     // computed.
1385     MoveLoopVariantsToImmediateField(UsersToProcess.back().Base,
1386                                     UsersToProcess.back().Imm, L, SE);
1387     assert(UsersToProcess.back().Base->isLoopInvariant(L) &&
1388            "Base value is not loop invariant!");
1389   }
1390
1391   // We now have a whole bunch of uses of like-strided induction variables, but
1392   // they might all have different bases.  We want to emit one PHI node for this
1393   // stride which we fold as many common expressions (between the IVs) into as
1394   // possible.  Start by identifying the common expressions in the base values 
1395   // for the strides (e.g. if we have "A+C+B" and "A+B+D" as our bases, find
1396   // "A+B"), emit it to the preheader, then remove the expression from the
1397   // UsersToProcess base values.
1398   SCEVHandle CommonExprs =
1399     RemoveCommonExpressionsFromUseBases(UsersToProcess, SE, L, TLI);
1400
1401   // Next, figure out what we can represent in the immediate fields of
1402   // instructions.  If we can represent anything there, move it to the imm
1403   // fields of the BasedUsers.  We do this so that it increases the commonality
1404   // of the remaining uses.
1405   unsigned NumPHI = 0;
1406   for (unsigned i = 0, e = UsersToProcess.size(); i != e; ++i) {
1407     // If the user is not in the current loop, this means it is using the exit
1408     // value of the IV.  Do not put anything in the base, make sure it's all in
1409     // the immediate field to allow as much factoring as possible.
1410     if (!L->contains(UsersToProcess[i].Inst->getParent())) {
1411       UsersToProcess[i].Imm = SE->getAddExpr(UsersToProcess[i].Imm,
1412                                              UsersToProcess[i].Base);
1413       UsersToProcess[i].Base = 
1414         SE->getIntegerSCEV(0, UsersToProcess[i].Base->getType());
1415     } else {
1416
1417       // Addressing modes can be folded into loads and stores.  Be careful that
1418       // the store is through the expression, not of the expression though.
1419       bool isPHI = false;
1420       bool isAddress = isAddressUse(UsersToProcess[i].Inst,
1421                                     UsersToProcess[i].OperandValToReplace);
1422       if (isa<PHINode>(UsersToProcess[i].Inst)) {
1423         isPHI = true;
1424         ++NumPHI;
1425       }
1426
1427       // Not all uses are outside the loop.
1428       AllUsesAreOutsideLoop = false; 
1429      
1430       // If this use isn't an address, then not all uses are addresses.
1431       if (!isAddress && !isPHI)
1432         AllUsesAreAddresses = false;
1433       
1434       MoveImmediateValues(TLI, UsersToProcess[i].Inst, UsersToProcess[i].Base,
1435                           UsersToProcess[i].Imm, isAddress, L, SE);
1436     }
1437   }
1438
1439   // If one of the use if a PHI node and all other uses are addresses, still
1440   // allow iv reuse. Essentially we are trading one constant multiplication
1441   // for one fewer iv.
1442   if (NumPHI > 1)
1443     AllUsesAreAddresses = false;
1444
1445   return CommonExprs;
1446 }
1447
1448 /// StrengthReduceStridedIVUsers - Strength reduce all of the users of a single
1449 /// stride of IV.  All of the users may have different starting values, and this
1450 /// may not be the only stride (we know it is if isOnlyStride is true).
1451 void LoopStrengthReduce::StrengthReduceStridedIVUsers(const SCEVHandle &Stride,
1452                                                       IVUsersOfOneStride &Uses,
1453                                                       Loop *L,
1454                                                       bool isOnlyStride) {
1455   // If all the users are moved to another stride, then there is nothing to do.
1456   if (Uses.Users.empty())
1457     return;
1458
1459   // Keep track if every use in UsersToProcess is an address. If they all are,
1460   // we may be able to rewrite the entire collection of them in terms of a
1461   // smaller-stride IV.
1462   bool AllUsesAreAddresses = true;
1463
1464   // Keep track if every use of a single stride is outside the loop.  If so,
1465   // we want to be more aggressive about reusing a smaller-stride IV; a
1466   // multiply outside the loop is better than another IV inside.  Well, usually.
1467   bool AllUsesAreOutsideLoop = true;
1468
1469   // Transform our list of users and offsets to a bit more complex table.  In
1470   // this new vector, each 'BasedUser' contains 'Base' the base of the
1471   // strided accessas well as the old information from Uses.  We progressively
1472   // move information from the Base field to the Imm field, until we eventually
1473   // have the full access expression to rewrite the use.
1474   std::vector<BasedUser> UsersToProcess;
1475   SCEVHandle CommonExprs = CollectIVUsers(Stride, Uses, L, AllUsesAreAddresses,
1476                                           AllUsesAreOutsideLoop,
1477                                           UsersToProcess);
1478
1479   // If we managed to find some expressions in common, we'll need to carry
1480   // their value in a register and add it in for each use. This will take up
1481   // a register operand, which potentially restricts what stride values are
1482   // valid.
1483   bool HaveCommonExprs = !CommonExprs->isZero();
1484   
1485   // If all uses are addresses, check if it is possible to reuse an IV with a
1486   // stride that is a factor of this stride. And that the multiple is a number
1487   // that can be encoded in the scale field of the target addressing mode. And
1488   // that we will have a valid instruction after this substition, including the
1489   // immediate field, if any.
1490   PHINode *NewPHI = NULL;
1491   Value   *IncV   = NULL;
1492   IVExpr   ReuseIV(SE->getIntegerSCEV(0, Type::Int32Ty),
1493                    SE->getIntegerSCEV(0, Type::Int32Ty),
1494                    0, 0);
1495   SCEVHandle RewriteFactor = 
1496                   CheckForIVReuse(HaveCommonExprs, AllUsesAreAddresses,
1497                                   AllUsesAreOutsideLoop,
1498                                   Stride, ReuseIV, CommonExprs->getType(),
1499                                   UsersToProcess);
1500   const Type *ReplacedTy = CommonExprs->getType();
1501   
1502   // Now that we know what we need to do, insert the PHI node itself.
1503   //
1504   DOUT << "LSR: Examining IVs of TYPE " << *ReplacedTy << " of STRIDE "
1505        << *Stride << ":\n"
1506        << "  Common base: " << *CommonExprs << "\n";
1507
1508   SCEVExpander Rewriter(*SE, *LI);
1509   SCEVExpander PreheaderRewriter(*SE, *LI);
1510   
1511   BasicBlock  *Preheader = L->getLoopPreheader();
1512   Instruction *PreInsertPt = Preheader->getTerminator();
1513   Instruction *PhiInsertBefore = L->getHeader()->begin();
1514   BasicBlock *LatchBlock = L->getLoopLatch();
1515
1516   // Emit the initial base value into the loop preheader.
1517   Value *CommonBaseV
1518     = PreheaderRewriter.expandCodeFor(CommonExprs, PreInsertPt);
1519
1520   if (isa<SCEVConstant>(RewriteFactor) &&
1521       cast<SCEVConstant>(RewriteFactor)->isZero()) {
1522     // Create a new Phi for this base, and stick it in the loop header.
1523     NewPHI = PHINode::Create(ReplacedTy, "iv.", PhiInsertBefore);
1524     ++NumInserted;
1525   
1526     // Add common base to the new Phi node.
1527     NewPHI->addIncoming(CommonBaseV, Preheader);
1528
1529     // If the stride is negative, insert a sub instead of an add for the
1530     // increment.
1531     bool isNegative = isNonConstantNegative(Stride);
1532     SCEVHandle IncAmount = Stride;
1533     if (isNegative)
1534       IncAmount = SE->getNegativeSCEV(Stride);
1535     
1536     // Insert the stride into the preheader.
1537     Value *StrideV = PreheaderRewriter.expandCodeFor(IncAmount, PreInsertPt);
1538     if (!isa<ConstantInt>(StrideV)) ++NumVariable;
1539
1540     // Emit the increment of the base value before the terminator of the loop
1541     // latch block, and add it to the Phi node.
1542     SCEVHandle IncExp = SE->getUnknown(StrideV);
1543     if (isNegative)
1544       IncExp = SE->getNegativeSCEV(IncExp);
1545     IncExp = SE->getAddExpr(SE->getUnknown(NewPHI), IncExp);
1546   
1547     IncV = Rewriter.expandCodeFor(IncExp, LatchBlock->getTerminator());
1548     IncV->setName(NewPHI->getName()+".inc");
1549     NewPHI->addIncoming(IncV, LatchBlock);
1550
1551     // Remember this in case a later stride is multiple of this.
1552     IVsByStride[Stride].addIV(Stride, CommonExprs, NewPHI, IncV);
1553
1554     DOUT << "  Inserted new PHI: IV=";
1555     DEBUG(WriteAsOperand(*DOUT, NewPHI, /*PrintType=*/false));
1556     DOUT << ", INC=";
1557     DEBUG(WriteAsOperand(*DOUT, IncV, /*PrintType=*/false));
1558     DOUT << "\n";
1559   } else {
1560     DOUT << "  Rewriting in terms of existing IV of STRIDE " << *ReuseIV.Stride
1561          << " and BASE " << *ReuseIV.Base << "\n";
1562     NewPHI = ReuseIV.PHI;
1563     IncV   = ReuseIV.IncV;
1564
1565     Constant *C = dyn_cast<Constant>(CommonBaseV);
1566     if (!C ||
1567         (!C->isNullValue() &&
1568          !fitsInAddressMode(SE->getUnknown(CommonBaseV), ReplacedTy, 
1569                            TLI, false)))
1570       // We want the common base emitted into the preheader! This is just
1571       // using cast as a copy so BitCast (no-op cast) is appropriate
1572       CommonBaseV = new BitCastInst(CommonBaseV, CommonBaseV->getType(), 
1573                                     "commonbase", PreInsertPt);
1574   }
1575
1576   // We want to emit code for users inside the loop first.  To do this, we
1577   // rearrange BasedUser so that the entries at the end have
1578   // isUseOfPostIncrementedValue = false, because we pop off the end of the
1579   // vector (so we handle them first).
1580   std::partition(UsersToProcess.begin(), UsersToProcess.end(),
1581                  PartitionByIsUseOfPostIncrementedValue);
1582   
1583   // Sort this by base, so that things with the same base are handled
1584   // together.  By partitioning first and stable-sorting later, we are
1585   // guaranteed that within each base we will pop off users from within the
1586   // loop before users outside of the loop with a particular base.
1587   //
1588   // We would like to use stable_sort here, but we can't.  The problem is that
1589   // SCEVHandle's don't have a deterministic ordering w.r.t to each other, so
1590   // we don't have anything to do a '<' comparison on.  Because we think the
1591   // number of uses is small, do a horrible bubble sort which just relies on
1592   // ==.
1593   for (unsigned i = 0, e = UsersToProcess.size(); i != e; ++i) {
1594     // Get a base value.
1595     SCEVHandle Base = UsersToProcess[i].Base;
1596     
1597     // Compact everything with this base to be consecutive with this one.
1598     for (unsigned j = i+1; j != e; ++j) {
1599       if (UsersToProcess[j].Base == Base) {
1600         std::swap(UsersToProcess[i+1], UsersToProcess[j]);
1601         ++i;
1602       }
1603     }
1604   }
1605
1606   // Process all the users now.  This outer loop handles all bases, the inner
1607   // loop handles all users of a particular base.
1608   while (!UsersToProcess.empty()) {
1609     SCEVHandle Base = UsersToProcess.back().Base;
1610     Instruction *Inst = UsersToProcess.back().Inst;
1611
1612     // Emit the code for Base into the preheader.
1613     Value *BaseV = PreheaderRewriter.expandCodeFor(Base, PreInsertPt);
1614
1615     DOUT << "  Examining uses with BASE ";
1616     DEBUG(WriteAsOperand(*DOUT, BaseV, /*PrintType=*/false));
1617     DOUT << ":\n";
1618
1619     // If BaseV is a constant other than 0, make sure that it gets inserted into
1620     // the preheader, instead of being forward substituted into the uses.  We do
1621     // this by forcing a BitCast (noop cast) to be inserted into the preheader 
1622     // in this case.
1623     if (Constant *C = dyn_cast<Constant>(BaseV)) {
1624       if (!C->isNullValue() && !fitsInAddressMode(Base, ReplacedTy, 
1625                                                  TLI, false)) {
1626         // We want this constant emitted into the preheader! This is just
1627         // using cast as a copy so BitCast (no-op cast) is appropriate
1628         BaseV = new BitCastInst(BaseV, BaseV->getType(), "preheaderinsert",
1629                                 PreInsertPt);       
1630       }
1631     }
1632
1633     // Emit the code to add the immediate offset to the Phi value, just before
1634     // the instructions that we identified as using this stride and base.
1635     do {
1636       // FIXME: Use emitted users to emit other users.
1637       BasedUser &User = UsersToProcess.back();
1638
1639       DOUT << "    Examining use ";
1640       DEBUG(WriteAsOperand(*DOUT, UsersToProcess.back().OperandValToReplace,
1641                            /*PrintType=*/false));
1642       DOUT << " in Inst: " << *Inst;
1643
1644       // If this instruction wants to use the post-incremented value, move it
1645       // after the post-inc and use its value instead of the PHI.
1646       Value *RewriteOp = NewPHI;
1647       if (User.isUseOfPostIncrementedValue) {
1648         RewriteOp = IncV;
1649
1650         // If this user is in the loop, make sure it is the last thing in the
1651         // loop to ensure it is dominated by the increment.
1652         if (L->contains(User.Inst->getParent()))
1653           User.Inst->moveBefore(LatchBlock->getTerminator());
1654       }
1655       if (RewriteOp->getType() != ReplacedTy) {
1656         Instruction::CastOps opcode = Instruction::Trunc;
1657         if (ReplacedTy->getPrimitiveSizeInBits() ==
1658             RewriteOp->getType()->getPrimitiveSizeInBits())
1659           opcode = Instruction::BitCast;
1660         RewriteOp = SCEVExpander::InsertCastOfTo(opcode, RewriteOp, ReplacedTy);
1661       }
1662
1663       SCEVHandle RewriteExpr = SE->getUnknown(RewriteOp);
1664
1665       // If we had to insert new instructions for RewriteOp, we have to
1666       // consider that they may not have been able to end up immediately
1667       // next to RewriteOp, because non-PHI instructions may never precede
1668       // PHI instructions in a block. In this case, remember where the last
1669       // instruction was inserted so that if we're replacing a different
1670       // PHI node, we can use the later point to expand the final
1671       // RewriteExpr.
1672       Instruction *NewBasePt = dyn_cast<Instruction>(RewriteOp);
1673       if (RewriteOp == NewPHI) NewBasePt = 0;
1674
1675       // Clear the SCEVExpander's expression map so that we are guaranteed
1676       // to have the code emitted where we expect it.
1677       Rewriter.clear();
1678
1679       // If we are reusing the iv, then it must be multiplied by a constant
1680       // factor to take advantage of the addressing mode scale component.
1681       if (!isa<SCEVConstant>(RewriteFactor) ||
1682           !cast<SCEVConstant>(RewriteFactor)->isZero()) {
1683         // If we're reusing an IV with a nonzero base (currently this happens
1684         // only when all reuses are outside the loop) subtract that base here.
1685         // The base has been used to initialize the PHI node but we don't want
1686         // it here.
1687         if (!ReuseIV.Base->isZero()) {
1688           SCEVHandle typedBase = ReuseIV.Base;
1689           if (RewriteExpr->getType()->getPrimitiveSizeInBits() !=
1690               ReuseIV.Base->getType()->getPrimitiveSizeInBits()) {
1691             // It's possible the original IV is a larger type than the new IV,
1692             // in which case we have to truncate the Base.  We checked in
1693             // RequiresTypeConversion that this is valid.
1694             assert (RewriteExpr->getType()->getPrimitiveSizeInBits() <
1695                     ReuseIV.Base->getType()->getPrimitiveSizeInBits() &&
1696                     "Unexpected lengthening conversion!");
1697             typedBase = SE->getTruncateExpr(ReuseIV.Base, 
1698                                             RewriteExpr->getType());
1699           }
1700           RewriteExpr = SE->getMinusSCEV(RewriteExpr, typedBase);
1701         }
1702
1703         // Multiply old variable, with base removed, by new scale factor.
1704         RewriteExpr = SE->getMulExpr(RewriteFactor,
1705                                      RewriteExpr);
1706
1707         // The common base is emitted in the loop preheader. But since we
1708         // are reusing an IV, it has not been used to initialize the PHI node.
1709         // Add it to the expression used to rewrite the uses.
1710         // When this use is outside the loop, we earlier subtracted the
1711         // common base, and are adding it back here.  Use the same expression
1712         // as before, rather than CommonBaseV, so DAGCombiner will zap it.
1713         if (!isa<ConstantInt>(CommonBaseV) ||
1714             !cast<ConstantInt>(CommonBaseV)->isZero()) {
1715           if (L->contains(User.Inst->getParent()))
1716             RewriteExpr = SE->getAddExpr(RewriteExpr,
1717                                        SE->getUnknown(CommonBaseV));
1718           else
1719             RewriteExpr = SE->getAddExpr(RewriteExpr, CommonExprs);
1720         }
1721       }
1722
1723       // Now that we know what we need to do, insert code before User for the
1724       // immediate and any loop-variant expressions.
1725       if (!isa<ConstantInt>(BaseV) || !cast<ConstantInt>(BaseV)->isZero())
1726         // Add BaseV to the PHI value if needed.
1727         RewriteExpr = SE->getAddExpr(RewriteExpr, SE->getUnknown(BaseV));
1728
1729       User.RewriteInstructionToUseNewBase(RewriteExpr, NewBasePt,
1730                                           Rewriter, L, this,
1731                                           DeadInsts);
1732
1733       // Mark old value we replaced as possibly dead, so that it is eliminated
1734       // if we just replaced the last use of that value.
1735       DeadInsts.push_back(cast<Instruction>(User.OperandValToReplace));
1736
1737       UsersToProcess.pop_back();
1738       ++NumReduced;
1739
1740       // If there are any more users to process with the same base, process them
1741       // now.  We sorted by base above, so we just have to check the last elt.
1742     } while (!UsersToProcess.empty() && UsersToProcess.back().Base == Base);
1743     // TODO: Next, find out which base index is the most common, pull it out.
1744   }
1745
1746   // IMPORTANT TODO: Figure out how to partition the IV's with this stride, but
1747   // different starting values, into different PHIs.
1748 }
1749
1750 /// FindIVUserForCond - If Cond has an operand that is an expression of an IV,
1751 /// set the IV user and stride information and return true, otherwise return
1752 /// false.
1753 bool LoopStrengthReduce::FindIVUserForCond(ICmpInst *Cond, IVStrideUse *&CondUse,
1754                                        const SCEVHandle *&CondStride) {
1755   for (unsigned Stride = 0, e = StrideOrder.size(); Stride != e && !CondUse;
1756        ++Stride) {
1757     std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
1758     IVUsesByStride.find(StrideOrder[Stride]);
1759     assert(SI != IVUsesByStride.end() && "Stride doesn't exist!");
1760     
1761     for (std::vector<IVStrideUse>::iterator UI = SI->second.Users.begin(),
1762          E = SI->second.Users.end(); UI != E; ++UI)
1763       if (UI->User == Cond) {
1764         // NOTE: we could handle setcc instructions with multiple uses here, but
1765         // InstCombine does it as well for simple uses, it's not clear that it
1766         // occurs enough in real life to handle.
1767         CondUse = &*UI;
1768         CondStride = &SI->first;
1769         return true;
1770       }
1771   }
1772   return false;
1773 }    
1774
1775 namespace {
1776   // Constant strides come first which in turns are sorted by their absolute
1777   // values. If absolute values are the same, then positive strides comes first.
1778   // e.g.
1779   // 4, -1, X, 1, 2 ==> 1, -1, 2, 4, X
1780   struct StrideCompare {
1781     bool operator()(const SCEVHandle &LHS, const SCEVHandle &RHS) {
1782       SCEVConstant *LHSC = dyn_cast<SCEVConstant>(LHS);
1783       SCEVConstant *RHSC = dyn_cast<SCEVConstant>(RHS);
1784       if (LHSC && RHSC) {
1785         int64_t  LV = LHSC->getValue()->getSExtValue();
1786         int64_t  RV = RHSC->getValue()->getSExtValue();
1787         uint64_t ALV = (LV < 0) ? -LV : LV;
1788         uint64_t ARV = (RV < 0) ? -RV : RV;
1789         if (ALV == ARV) {
1790           if (LV != RV)
1791             return LV > RV;
1792         } else {
1793           return ALV < ARV;
1794         }
1795
1796         // If it's the same value but different type, sort by bit width so
1797         // that we emit larger induction variables before smaller
1798         // ones, letting the smaller be re-written in terms of larger ones.
1799         return RHS->getBitWidth() < LHS->getBitWidth();
1800       }
1801       return LHSC && !RHSC;
1802     }
1803   };
1804 }
1805
1806 /// ChangeCompareStride - If a loop termination compare instruction is the
1807 /// only use of its stride, and the compaison is against a constant value,
1808 /// try eliminate the stride by moving the compare instruction to another
1809 /// stride and change its constant operand accordingly. e.g.
1810 ///
1811 /// loop:
1812 /// ...
1813 /// v1 = v1 + 3
1814 /// v2 = v2 + 1
1815 /// if (v2 < 10) goto loop
1816 /// =>
1817 /// loop:
1818 /// ...
1819 /// v1 = v1 + 3
1820 /// if (v1 < 30) goto loop
1821 ICmpInst *LoopStrengthReduce::ChangeCompareStride(Loop *L, ICmpInst *Cond,
1822                                                 IVStrideUse* &CondUse,
1823                                                 const SCEVHandle* &CondStride) {
1824   if (StrideOrder.size() < 2 ||
1825       IVUsesByStride[*CondStride].Users.size() != 1)
1826     return Cond;
1827   const SCEVConstant *SC = dyn_cast<SCEVConstant>(*CondStride);
1828   if (!SC) return Cond;
1829   ConstantInt *C = dyn_cast<ConstantInt>(Cond->getOperand(1));
1830   if (!C) return Cond;
1831
1832   ICmpInst::Predicate Predicate = Cond->getPredicate();
1833   int64_t CmpSSInt = SC->getValue()->getSExtValue();
1834   int64_t CmpVal = C->getValue().getSExtValue();
1835   unsigned BitWidth = C->getValue().getBitWidth();
1836   uint64_t SignBit = 1ULL << (BitWidth-1);
1837   const Type *CmpTy = C->getType();
1838   const Type *NewCmpTy = NULL;
1839   unsigned TyBits = CmpTy->getPrimitiveSizeInBits();
1840   unsigned NewTyBits = 0;
1841   int64_t NewCmpVal = CmpVal;
1842   SCEVHandle *NewStride = NULL;
1843   Value *NewIncV = NULL;
1844   int64_t Scale = 1;
1845
1846   // Check stride constant and the comparision constant signs to detect
1847   // overflow.
1848   if ((CmpVal & SignBit) != (CmpSSInt & SignBit))
1849     return Cond;
1850
1851   // Look for a suitable stride / iv as replacement.
1852   std::stable_sort(StrideOrder.begin(), StrideOrder.end(), StrideCompare());
1853   for (unsigned i = 0, e = StrideOrder.size(); i != e; ++i) {
1854     std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
1855       IVUsesByStride.find(StrideOrder[i]);
1856     if (!isa<SCEVConstant>(SI->first))
1857       continue;
1858     int64_t SSInt = cast<SCEVConstant>(SI->first)->getValue()->getSExtValue();
1859     if (abs(SSInt) <= abs(CmpSSInt) || (SSInt % CmpSSInt) != 0)
1860       continue;
1861
1862     Scale = SSInt / CmpSSInt;
1863     NewCmpVal = CmpVal * Scale;
1864     APInt Mul = APInt(BitWidth, NewCmpVal);
1865     // Check for overflow.
1866     if (Mul.getSExtValue() != NewCmpVal) {
1867       NewCmpVal = CmpVal;
1868       continue;
1869     }
1870
1871     // Watch out for overflow.
1872     if (ICmpInst::isSignedPredicate(Predicate) &&
1873         (CmpVal & SignBit) != (NewCmpVal & SignBit))
1874       NewCmpVal = CmpVal;
1875
1876     if (NewCmpVal != CmpVal) {
1877       // Pick the best iv to use trying to avoid a cast.
1878       NewIncV = NULL;
1879       for (std::vector<IVStrideUse>::iterator UI = SI->second.Users.begin(),
1880              E = SI->second.Users.end(); UI != E; ++UI) {
1881         NewIncV = UI->OperandValToReplace;
1882         if (NewIncV->getType() == CmpTy)
1883           break;
1884       }
1885       if (!NewIncV) {
1886         NewCmpVal = CmpVal;
1887         continue;
1888       }
1889
1890       NewCmpTy = NewIncV->getType();
1891       NewTyBits = isa<PointerType>(NewCmpTy)
1892         ? UIntPtrTy->getPrimitiveSizeInBits()
1893         : NewCmpTy->getPrimitiveSizeInBits();
1894       if (RequiresTypeConversion(NewCmpTy, CmpTy)) {
1895         // Check if it is possible to rewrite it using
1896         // an iv / stride of a smaller integer type.
1897         bool TruncOk = false;
1898         if (NewCmpTy->isInteger()) {
1899           unsigned Bits = NewTyBits;
1900           if (ICmpInst::isSignedPredicate(Predicate))
1901             --Bits;
1902           uint64_t Mask = (1ULL << Bits) - 1;
1903           if (((uint64_t)NewCmpVal & Mask) == (uint64_t)NewCmpVal)
1904             TruncOk = true;
1905         }
1906         if (!TruncOk) {
1907           NewCmpVal = CmpVal;
1908           continue;
1909         }
1910       }
1911
1912       // Don't rewrite if use offset is non-constant and the new type is
1913       // of a different type.
1914       // FIXME: too conservative?
1915       if (NewTyBits != TyBits && !isa<SCEVConstant>(CondUse->Offset)) {
1916         NewCmpVal = CmpVal;
1917         continue;
1918       }
1919
1920       bool AllUsesAreAddresses = true;
1921       bool AllUsesAreOutsideLoop = true;
1922       std::vector<BasedUser> UsersToProcess;
1923       SCEVHandle CommonExprs = CollectIVUsers(SI->first, SI->second, L,
1924                                               AllUsesAreAddresses,
1925                                               AllUsesAreOutsideLoop,
1926                                               UsersToProcess);
1927       // Avoid rewriting the compare instruction with an iv of new stride
1928       // if it's likely the new stride uses will be rewritten using the
1929       // stride of the compare instruction.
1930       if (AllUsesAreAddresses &&
1931           ValidStride(!CommonExprs->isZero(), Scale, UsersToProcess)) {
1932         NewCmpVal = CmpVal;
1933         continue;
1934       }
1935
1936       // If scale is negative, use swapped predicate unless it's testing
1937       // for equality.
1938       if (Scale < 0 && !Cond->isEquality())
1939         Predicate = ICmpInst::getSwappedPredicate(Predicate);
1940
1941       NewStride = &StrideOrder[i];
1942       break;
1943     }
1944   }
1945
1946   // Forgo this transformation if it the increment happens to be
1947   // unfortunately positioned after the condition, and the condition
1948   // has multiple uses which prevent it from being moved immediately
1949   // before the branch. See
1950   // test/Transforms/LoopStrengthReduce/change-compare-stride-trickiness-*.ll
1951   // for an example of this situation.
1952   if (!Cond->hasOneUse()) {
1953     for (BasicBlock::iterator I = Cond, E = Cond->getParent()->end();
1954          I != E; ++I)
1955       if (I == NewIncV)
1956         return Cond;
1957   }
1958
1959   if (NewCmpVal != CmpVal) {
1960     // Create a new compare instruction using new stride / iv.
1961     ICmpInst *OldCond = Cond;
1962     Value *RHS;
1963     if (!isa<PointerType>(NewCmpTy))
1964       RHS = ConstantInt::get(NewCmpTy, NewCmpVal);
1965     else {
1966       RHS = ConstantInt::get(UIntPtrTy, NewCmpVal);
1967       RHS = SCEVExpander::InsertCastOfTo(Instruction::IntToPtr, RHS, NewCmpTy);
1968     }
1969     // Insert new compare instruction.
1970     Cond = new ICmpInst(Predicate, NewIncV, RHS,
1971                         L->getHeader()->getName() + ".termcond",
1972                         OldCond);
1973
1974     // Remove the old compare instruction. The old indvar is probably dead too.
1975     DeadInsts.push_back(cast<Instruction>(CondUse->OperandValToReplace));
1976     SE->deleteValueFromRecords(OldCond);
1977     OldCond->replaceAllUsesWith(Cond);
1978     OldCond->eraseFromParent();
1979
1980     IVUsesByStride[*CondStride].Users.pop_back();
1981     SCEVHandle NewOffset = TyBits == NewTyBits
1982       ? SE->getMulExpr(CondUse->Offset,
1983                        SE->getConstant(ConstantInt::get(CmpTy, Scale)))
1984       : SE->getConstant(ConstantInt::get(NewCmpTy,
1985         cast<SCEVConstant>(CondUse->Offset)->getValue()->getSExtValue()*Scale));
1986     IVUsesByStride[*NewStride].addUser(NewOffset, Cond, NewIncV);
1987     CondUse = &IVUsesByStride[*NewStride].Users.back();
1988     CondStride = NewStride;
1989     ++NumEliminated;
1990   }
1991
1992   return Cond;
1993 }
1994
1995 /// OptimizeSMax - Rewrite the loop's terminating condition if it uses
1996 /// an smax computation.
1997 ///
1998 /// This is a narrow solution to a specific, but acute, problem. For loops
1999 /// like this:
2000 ///
2001 ///   i = 0;
2002 ///   do {
2003 ///     p[i] = 0.0;
2004 ///   } while (++i < n);
2005 ///
2006 /// where the comparison is signed, the trip count isn't just 'n', because
2007 /// 'n' could be negative. And unfortunately this can come up even for loops
2008 /// where the user didn't use a C do-while loop. For example, seemingly
2009 /// well-behaved top-test loops will commonly be lowered like this:
2010 //
2011 ///   if (n > 0) {
2012 ///     i = 0;
2013 ///     do {
2014 ///       p[i] = 0.0;
2015 ///     } while (++i < n);
2016 ///   }
2017 ///
2018 /// and then it's possible for subsequent optimization to obscure the if
2019 /// test in such a way that indvars can't find it.
2020 ///
2021 /// When indvars can't find the if test in loops like this, it creates a
2022 /// signed-max expression, which allows it to give the loop a canonical
2023 /// induction variable:
2024 ///
2025 ///   i = 0;
2026 ///   smax = n < 1 ? 1 : n;
2027 ///   do {
2028 ///     p[i] = 0.0;
2029 ///   } while (++i != smax);
2030 ///
2031 /// Canonical induction variables are necessary because the loop passes
2032 /// are designed around them. The most obvious example of this is the
2033 /// LoopInfo analysis, which doesn't remember trip count values. It
2034 /// expects to be able to rediscover the trip count each time it is
2035 /// needed, and it does this using a simple analyis that only succeeds if
2036 /// the loop has a canonical induction variable.
2037 ///
2038 /// However, when it comes time to generate code, the maximum operation
2039 /// can be quite costly, especially if it's inside of an outer loop.
2040 ///
2041 /// This function solves this problem by detecting this type of loop and
2042 /// rewriting their conditions from ICMP_NE back to ICMP_SLT, and deleting
2043 /// the instructions for the maximum computation.
2044 ///
2045 ICmpInst *LoopStrengthReduce::OptimizeSMax(Loop *L, ICmpInst *Cond,
2046                                            IVStrideUse* &CondUse) {
2047   // Check that the loop matches the pattern we're looking for.
2048   if (Cond->getPredicate() != CmpInst::ICMP_EQ &&
2049       Cond->getPredicate() != CmpInst::ICMP_NE)
2050     return Cond;
2051
2052   SelectInst *Sel = dyn_cast<SelectInst>(Cond->getOperand(1));
2053   if (!Sel || !Sel->hasOneUse()) return Cond;
2054
2055   SCEVHandle IterationCount = SE->getIterationCount(L);
2056   if (isa<SCEVCouldNotCompute>(IterationCount))
2057     return Cond;
2058   SCEVHandle One = SE->getIntegerSCEV(1, IterationCount->getType());
2059
2060   // Adjust for an annoying getIterationCount quirk.
2061   IterationCount = SE->getAddExpr(IterationCount, One);
2062
2063   // Check for a max calculation that matches the pattern.
2064   SCEVSMaxExpr *SMax = dyn_cast<SCEVSMaxExpr>(IterationCount);
2065   if (!SMax || SMax != SE->getSCEV(Sel)) return Cond;
2066
2067   SCEVHandle SMaxLHS = SMax->getOperand(0);
2068   SCEVHandle SMaxRHS = SMax->getOperand(1);
2069   if (!SMaxLHS || SMaxLHS != One) return Cond;
2070
2071   // Check the relevant induction variable for conformance to
2072   // the pattern.
2073   SCEVHandle IV = SE->getSCEV(Cond->getOperand(0));
2074   SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(IV);
2075   if (!AR || !AR->isAffine() ||
2076       AR->getStart() != One ||
2077       AR->getStepRecurrence(*SE) != One)
2078     return Cond;
2079
2080   // Check the right operand of the select, and remember it, as it will
2081   // be used in the new comparison instruction.
2082   Value *NewRHS = 0;
2083   if (SE->getSCEV(Sel->getOperand(1)) == SMaxRHS)
2084     NewRHS = Sel->getOperand(1);
2085   else if (SE->getSCEV(Sel->getOperand(2)) == SMaxRHS)
2086     NewRHS = Sel->getOperand(2);
2087   if (!NewRHS) return Cond;
2088
2089   // Ok, everything looks ok to change the condition into an SLT or SGE and
2090   // delete the max calculation.
2091   ICmpInst *NewCond =
2092     new ICmpInst(Cond->getPredicate() == CmpInst::ICMP_NE ?
2093                    CmpInst::ICMP_SLT :
2094                    CmpInst::ICMP_SGE,
2095                  Cond->getOperand(0), NewRHS, "scmp", Cond);
2096
2097   // Delete the max calculation instructions.
2098   SE->deleteValueFromRecords(Cond);
2099   Cond->replaceAllUsesWith(NewCond);
2100   Cond->eraseFromParent();
2101   Instruction *Cmp = cast<Instruction>(Sel->getOperand(0));
2102   SE->deleteValueFromRecords(Sel);
2103   Sel->eraseFromParent();
2104   if (Cmp->use_empty()) {
2105     SE->deleteValueFromRecords(Cmp);
2106     Cmp->eraseFromParent();
2107   }
2108   CondUse->User = NewCond;
2109   return NewCond;
2110 }
2111
2112 /// OptimizeShadowIV - If IV is used in a int-to-float cast
2113 /// inside the loop then try to eliminate the cast opeation.
2114 void LoopStrengthReduce::OptimizeShadowIV(Loop *L) {
2115
2116   SCEVHandle IterationCount = SE->getIterationCount(L);
2117   if (isa<SCEVCouldNotCompute>(IterationCount))
2118     return;
2119
2120   for (unsigned Stride = 0, e = StrideOrder.size(); Stride != e;
2121        ++Stride) {
2122     std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
2123       IVUsesByStride.find(StrideOrder[Stride]);
2124     assert(SI != IVUsesByStride.end() && "Stride doesn't exist!");
2125     if (!isa<SCEVConstant>(SI->first))
2126       continue;
2127
2128     for (std::vector<IVStrideUse>::iterator UI = SI->second.Users.begin(),
2129            E = SI->second.Users.end(); UI != E; /* empty */) {
2130       std::vector<IVStrideUse>::iterator CandidateUI = UI;
2131       ++UI;
2132       Instruction *ShadowUse = CandidateUI->User;
2133       const Type *DestTy = NULL;
2134
2135       /* If shadow use is a int->float cast then insert a second IV
2136          to eliminate this cast.
2137
2138            for (unsigned i = 0; i < n; ++i) 
2139              foo((double)i);
2140
2141          is transformed into
2142
2143            double d = 0.0;
2144            for (unsigned i = 0; i < n; ++i, ++d) 
2145              foo(d);
2146       */
2147       if (UIToFPInst *UCast = dyn_cast<UIToFPInst>(CandidateUI->User))
2148         DestTy = UCast->getDestTy();
2149       else if (SIToFPInst *SCast = dyn_cast<SIToFPInst>(CandidateUI->User))
2150         DestTy = SCast->getDestTy();
2151       if (!DestTy) continue;
2152
2153       if (TLI) {
2154         /* If target does not support DestTy natively then do not apply
2155            this transformation. */
2156         MVT DVT = TLI->getValueType(DestTy);
2157         if (!TLI->isTypeLegal(DVT)) continue;
2158       }
2159
2160       PHINode *PH = dyn_cast<PHINode>(ShadowUse->getOperand(0));
2161       if (!PH) continue;
2162       if (PH->getNumIncomingValues() != 2) continue;
2163
2164       const Type *SrcTy = PH->getType();
2165       int Mantissa = DestTy->getFPMantissaWidth();
2166       if (Mantissa == -1) continue; 
2167       if ((int)TD->getTypeSizeInBits(SrcTy) > Mantissa)
2168         continue;
2169
2170       unsigned Entry, Latch;
2171       if (PH->getIncomingBlock(0) == L->getLoopPreheader()) {
2172         Entry = 0;
2173         Latch = 1;
2174       } else {
2175         Entry = 1;
2176         Latch = 0;
2177       }
2178         
2179       ConstantInt *Init = dyn_cast<ConstantInt>(PH->getIncomingValue(Entry));
2180       if (!Init) continue;
2181       ConstantFP *NewInit = ConstantFP::get(DestTy, Init->getZExtValue());
2182
2183       BinaryOperator *Incr = 
2184         dyn_cast<BinaryOperator>(PH->getIncomingValue(Latch));
2185       if (!Incr) continue;
2186       if (Incr->getOpcode() != Instruction::Add
2187           && Incr->getOpcode() != Instruction::Sub)
2188         continue;
2189
2190       /* Initialize new IV, double d = 0.0 in above example. */
2191       ConstantInt *C = NULL;
2192       if (Incr->getOperand(0) == PH)
2193         C = dyn_cast<ConstantInt>(Incr->getOperand(1));
2194       else if (Incr->getOperand(1) == PH)
2195         C = dyn_cast<ConstantInt>(Incr->getOperand(0));
2196       else
2197         continue;
2198
2199       if (!C) continue;
2200
2201       /* Add new PHINode. */
2202       PHINode *NewPH = PHINode::Create(DestTy, "IV.S.", PH);
2203
2204       /* create new increment. '++d' in above example. */
2205       ConstantFP *CFP = ConstantFP::get(DestTy, C->getZExtValue());
2206       BinaryOperator *NewIncr = 
2207         BinaryOperator::Create(Incr->getOpcode(),
2208                                NewPH, CFP, "IV.S.next.", Incr);
2209
2210       NewPH->addIncoming(NewInit, PH->getIncomingBlock(Entry));
2211       NewPH->addIncoming(NewIncr, PH->getIncomingBlock(Latch));
2212
2213       /* Remove cast operation */
2214       SE->deleteValueFromRecords(ShadowUse);
2215       ShadowUse->replaceAllUsesWith(NewPH);
2216       ShadowUse->eraseFromParent();
2217       SI->second.Users.erase(CandidateUI);
2218       NumShadow++;
2219       break;
2220     }
2221   }
2222 }
2223
2224 // OptimizeIndvars - Now that IVUsesByStride is set up with all of the indvar
2225 // uses in the loop, look to see if we can eliminate some, in favor of using
2226 // common indvars for the different uses.
2227 void LoopStrengthReduce::OptimizeIndvars(Loop *L) {
2228   // TODO: implement optzns here.
2229
2230   OptimizeShadowIV(L);
2231
2232   // Finally, get the terminating condition for the loop if possible.  If we
2233   // can, we want to change it to use a post-incremented version of its
2234   // induction variable, to allow coalescing the live ranges for the IV into
2235   // one register value.
2236   PHINode *SomePHI = cast<PHINode>(L->getHeader()->begin());
2237   BasicBlock  *Preheader = L->getLoopPreheader();
2238   BasicBlock *LatchBlock =
2239    SomePHI->getIncomingBlock(SomePHI->getIncomingBlock(0) == Preheader);
2240   BranchInst *TermBr = dyn_cast<BranchInst>(LatchBlock->getTerminator());
2241   if (!TermBr || TermBr->isUnconditional() || 
2242       !isa<ICmpInst>(TermBr->getCondition()))
2243     return;
2244   ICmpInst *Cond = cast<ICmpInst>(TermBr->getCondition());
2245
2246   // Search IVUsesByStride to find Cond's IVUse if there is one.
2247   IVStrideUse *CondUse = 0;
2248   const SCEVHandle *CondStride = 0;
2249
2250   if (!FindIVUserForCond(Cond, CondUse, CondStride))
2251     return; // setcc doesn't use the IV.
2252
2253   // If the trip count is computed in terms of an smax (due to ScalarEvolution
2254   // being unable to find a sufficient guard, for example), change the loop
2255   // comparison to use SLT instead of NE.
2256   Cond = OptimizeSMax(L, Cond, CondUse);
2257
2258   // If possible, change stride and operands of the compare instruction to
2259   // eliminate one stride.
2260   Cond = ChangeCompareStride(L, Cond, CondUse, CondStride);
2261
2262   // It's possible for the setcc instruction to be anywhere in the loop, and
2263   // possible for it to have multiple users.  If it is not immediately before
2264   // the latch block branch, move it.
2265   if (&*++BasicBlock::iterator(Cond) != (Instruction*)TermBr) {
2266     if (Cond->hasOneUse()) {   // Condition has a single use, just move it.
2267       Cond->moveBefore(TermBr);
2268     } else {
2269       // Otherwise, clone the terminating condition and insert into the loopend.
2270       Cond = cast<ICmpInst>(Cond->clone());
2271       Cond->setName(L->getHeader()->getName() + ".termcond");
2272       LatchBlock->getInstList().insert(TermBr, Cond);
2273       
2274       // Clone the IVUse, as the old use still exists!
2275       IVUsesByStride[*CondStride].addUser(CondUse->Offset, Cond,
2276                                          CondUse->OperandValToReplace);
2277       CondUse = &IVUsesByStride[*CondStride].Users.back();
2278     }
2279   }
2280
2281   // If we get to here, we know that we can transform the setcc instruction to
2282   // use the post-incremented version of the IV, allowing us to coalesce the
2283   // live ranges for the IV correctly.
2284   CondUse->Offset = SE->getMinusSCEV(CondUse->Offset, *CondStride);
2285   CondUse->isUseOfPostIncrementedValue = true;
2286   Changed = true;
2287 }
2288
2289 bool LoopStrengthReduce::runOnLoop(Loop *L, LPPassManager &LPM) {
2290
2291   LI = &getAnalysis<LoopInfo>();
2292   DT = &getAnalysis<DominatorTree>();
2293   SE = &getAnalysis<ScalarEvolution>();
2294   TD = &getAnalysis<TargetData>();
2295   UIntPtrTy = TD->getIntPtrType();
2296   Changed = false;
2297
2298   // Find all uses of induction variables in this loop, and categorize
2299   // them by stride.  Start by finding all of the PHI nodes in the header for
2300   // this loop.  If they are induction variables, inspect their uses.
2301   SmallPtrSet<Instruction*,16> Processed;   // Don't reprocess instructions.
2302   for (BasicBlock::iterator I = L->getHeader()->begin(); isa<PHINode>(I); ++I)
2303     AddUsersIfInteresting(I, L, Processed);
2304
2305   if (!IVUsesByStride.empty()) {
2306     // Optimize induction variables.  Some indvar uses can be transformed to use
2307     // strides that will be needed for other purposes.  A common example of this
2308     // is the exit test for the loop, which can often be rewritten to use the
2309     // computation of some other indvar to decide when to terminate the loop.
2310     OptimizeIndvars(L);
2311
2312     // FIXME: We can widen subreg IV's here for RISC targets.  e.g. instead of
2313     // doing computation in byte values, promote to 32-bit values if safe.
2314
2315     // FIXME: Attempt to reuse values across multiple IV's.  In particular, we
2316     // could have something like "for(i) { foo(i*8); bar(i*16) }", which should
2317     // be codegened as "for (j = 0;; j+=8) { foo(j); bar(j+j); }" on X86/PPC.
2318     // Need to be careful that IV's are all the same type.  Only works for
2319     // intptr_t indvars.
2320
2321     // If we only have one stride, we can more aggressively eliminate some
2322     // things.
2323     bool HasOneStride = IVUsesByStride.size() == 1;
2324
2325 #ifndef NDEBUG
2326     DOUT << "\nLSR on ";
2327     DEBUG(L->dump());
2328 #endif
2329
2330     // IVsByStride keeps IVs for one particular loop.
2331     assert(IVsByStride.empty() && "Stale entries in IVsByStride?");
2332
2333     // Sort the StrideOrder so we process larger strides first.
2334     std::stable_sort(StrideOrder.begin(), StrideOrder.end(), StrideCompare());
2335
2336     // Note: this processes each stride/type pair individually.  All users
2337     // passed into StrengthReduceStridedIVUsers have the same type AND stride.
2338     // Also, note that we iterate over IVUsesByStride indirectly by using
2339     // StrideOrder. This extra layer of indirection makes the ordering of
2340     // strides deterministic - not dependent on map order.
2341     for (unsigned Stride = 0, e = StrideOrder.size(); Stride != e; ++Stride) {
2342       std::map<SCEVHandle, IVUsersOfOneStride>::iterator SI = 
2343         IVUsesByStride.find(StrideOrder[Stride]);
2344       assert(SI != IVUsesByStride.end() && "Stride doesn't exist!");
2345       StrengthReduceStridedIVUsers(SI->first, SI->second, L, HasOneStride);
2346     }
2347   }
2348
2349   // We're done analyzing this loop; release all the state we built up for it.
2350   CastedPointers.clear();
2351   IVUsesByStride.clear();
2352   IVsByStride.clear();
2353   StrideOrder.clear();
2354   for (unsigned i=0; i<GEPlist.size(); i++)
2355     SE->deleteValueFromRecords(GEPlist[i]);
2356   GEPlist.clear();  
2357
2358   // Clean up after ourselves
2359   if (!DeadInsts.empty()) {
2360     DeleteTriviallyDeadInstructions();
2361
2362     BasicBlock::iterator I = L->getHeader()->begin();
2363     while (PHINode *PN = dyn_cast<PHINode>(I++)) {
2364       // At this point, we know that we have killed one or more IV users.
2365       // It is worth checking to see if the cannonical indvar is also
2366       // dead, so that we can remove it as well.
2367       //
2368       // We can remove a PHI if it is on a cycle in the def-use graph
2369       // where each node in the cycle has degree one, i.e. only one use,
2370       // and is an instruction with no side effects.
2371       //
2372       // FIXME: this needs to eliminate an induction variable even if it's being
2373       // compared against some value to decide loop termination.
2374       if (!PN->hasOneUse())
2375         continue;
2376       
2377       SmallPtrSet<PHINode *, 4> PHIs;
2378       for (Instruction *J = dyn_cast<Instruction>(*PN->use_begin());
2379            J && J->hasOneUse() && !J->mayWriteToMemory();
2380            J = dyn_cast<Instruction>(*J->use_begin())) {
2381         // If we find the original PHI, we've discovered a cycle.
2382         if (J == PN) {
2383           // Break the cycle and mark the PHI for deletion.
2384           SE->deleteValueFromRecords(PN);
2385           PN->replaceAllUsesWith(UndefValue::get(PN->getType()));
2386           DeadInsts.push_back(PN);
2387           Changed = true;
2388           break;
2389         }
2390         // If we find a PHI more than once, we're on a cycle that
2391         // won't prove fruitful.
2392         if (isa<PHINode>(J) && !PHIs.insert(cast<PHINode>(J)))
2393           break;
2394       }
2395     }
2396     DeleteTriviallyDeadInstructions();
2397   }
2398   return Changed;
2399 }