1 //===- LoopStrengthReduce.cpp - Strength Reduce IVs 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 transformation analyzes and transforms the induction variables (and
11 // computations derived from them) into forms suitable for efficient execution
12 // on the target.
13 //
14 // This pass performs a strength reduction on array references inside loops that
15 // have as one or more of their components the loop induction variable, it
16 // rewrites expressions to take advantage of scaled-index addressing modes
17 // available on the target, and it performs a variety of other optimizations
18 // related to loop induction variables.
19 //
20 // Terminology note: this code has a lot of handling for "post-increment" or
21 // "post-inc" users. This is not talking about post-increment addressing modes;
22 // it is instead talking about code like this:
23 //
24 //   %i = phi [ 0, %entry ], [ %i.next, %latch ]
25 //   ...
26 //   %i.next = add %i, 1
27 //   %c = icmp eq %i.next, %n
28 //
29 // The SCEV for %i is {0,+,1}<%L>. The SCEV for %i.next is {1,+,1}<%L>, however
30 // it's useful to think about these as the same register, with some uses using
31 // the value of the register before the add and some using it after. In this
32 // example, the icmp is a post-increment user, since it uses %i.next, which is
33 // the value of the induction variable after the increment. The other common
34 // case of post-increment users is users outside the loop.
35 //
36 // TODO: More sophistication in the way Formulae are generated and filtered.
37 //
38 // TODO: Handle multiple loops at a time.
39 //
40 // TODO: Should the addressing mode BaseGV be changed to a ConstantExpr instead
41 //       of a GlobalValue?
42 //
43 // TODO: When truncation is free, truncate ICmp users' operands to make it a
44 //       smaller encoding (on x86 at least).
45 //
46 // TODO: When a negated register is used by an add (such as in a list of
47 //       multiple base registers, or as the increment expression in an addrec),
48 //       we may not actually need both reg and (-1 * reg) in registers; the
49 //       negation can be implemented by using a sub instead of an add. The
50 //       lack of support for taking this into consideration when making
51 //       register pressure decisions is partly worked around by the "Special"
52 //       use kind.
53 //
54 //===----------------------------------------------------------------------===//
55 
56 #include "llvm/Transforms/Scalar/LoopStrengthReduce.h"
57 #include "llvm/ADT/DenseSet.h"
58 #include "llvm/ADT/Hashing.h"
59 #include "llvm/ADT/STLExtras.h"
60 #include "llvm/ADT/SetVector.h"
61 #include "llvm/ADT/SmallBitVector.h"
62 #include "llvm/Analysis/IVUsers.h"
63 #include "llvm/Analysis/LoopPass.h"
64 #include "llvm/Analysis/LoopPassManager.h"
65 #include "llvm/Analysis/ScalarEvolutionExpander.h"
66 #include "llvm/Analysis/TargetTransformInfo.h"
67 #include "llvm/IR/Constants.h"
68 #include "llvm/IR/DerivedTypes.h"
69 #include "llvm/IR/Dominators.h"
70 #include "llvm/IR/Instructions.h"
71 #include "llvm/IR/IntrinsicInst.h"
72 #include "llvm/IR/Module.h"
73 #include "llvm/IR/ValueHandle.h"
74 #include "llvm/Support/CommandLine.h"
75 #include "llvm/Support/Debug.h"
76 #include "llvm/Support/raw_ostream.h"
77 #include "llvm/Transforms/Scalar.h"
78 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
79 #include "llvm/Transforms/Utils/Local.h"
80 #include <algorithm>
81 using namespace llvm;
82 
83 #define DEBUG_TYPE "loop-reduce"
84 
85 /// MaxIVUsers is an arbitrary threshold that provides an early opportunitiy for
86 /// bail out. This threshold is far beyond the number of users that LSR can
87 /// conceivably solve, so it should not affect generated code, but catches the
88 /// worst cases before LSR burns too much compile time and stack space.
89 static const unsigned MaxIVUsers = 200;
90 
91 // Temporary flag to cleanup congruent phis after LSR phi expansion.
92 // It's currently disabled until we can determine whether it's truly useful or
93 // not. The flag should be removed after the v3.0 release.
94 // This is now needed for ivchains.
95 static cl::opt<bool> EnablePhiElim(
96   "enable-lsr-phielim", cl::Hidden, cl::init(true),
97   cl::desc("Enable LSR phi elimination"));
98 
99 #ifndef NDEBUG
100 // Stress test IV chain generation.
101 static cl::opt<bool> StressIVChain(
102   "stress-ivchain", cl::Hidden, cl::init(false),
103   cl::desc("Stress test LSR IV chains"));
104 #else
105 static bool StressIVChain = false;
106 #endif
107 
108 namespace {
109 
110 struct MemAccessTy {
111   /// Used in situations where the accessed memory type is unknown.
112   static const unsigned UnknownAddressSpace = ~0u;
113 
114   Type *MemTy;
115   unsigned AddrSpace;
116 
117   MemAccessTy() : MemTy(nullptr), AddrSpace(UnknownAddressSpace) {}
118 
119   MemAccessTy(Type *Ty, unsigned AS) :
120     MemTy(Ty), AddrSpace(AS) {}
121 
122   bool operator==(MemAccessTy Other) const {
123     return MemTy == Other.MemTy && AddrSpace == Other.AddrSpace;
124   }
125 
126   bool operator!=(MemAccessTy Other) const { return !(*this == Other); }
127 
128   static MemAccessTy getUnknown(LLVMContext &Ctx) {
129     return MemAccessTy(Type::getVoidTy(Ctx), UnknownAddressSpace);
130   }
131 };
132 
133 /// This class holds data which is used to order reuse candidates.
134 class RegSortData {
135 public:
136   /// This represents the set of LSRUse indices which reference
137   /// a particular register.
138   SmallBitVector UsedByIndices;
139 
140   void print(raw_ostream &OS) const;
141   void dump() const;
142 };
143 
144 }
145 
146 void RegSortData::print(raw_ostream &OS) const {
147   OS << "[NumUses=" << UsedByIndices.count() << ']';
148 }
149 
150 LLVM_DUMP_METHOD
151 void RegSortData::dump() const {
152   print(errs()); errs() << '\n';
153 }
154 
155 namespace {
156 
157 /// Map register candidates to information about how they are used.
158 class RegUseTracker {
159   typedef DenseMap<const SCEV *, RegSortData> RegUsesTy;
160 
161   RegUsesTy RegUsesMap;
162   SmallVector<const SCEV *, 16> RegSequence;
163 
164 public:
165   void countRegister(const SCEV *Reg, size_t LUIdx);
166   void dropRegister(const SCEV *Reg, size_t LUIdx);
167   void swapAndDropUse(size_t LUIdx, size_t LastLUIdx);
168 
169   bool isRegUsedByUsesOtherThan(const SCEV *Reg, size_t LUIdx) const;
170 
171   const SmallBitVector &getUsedByIndices(const SCEV *Reg) const;
172 
173   void clear();
174 
175   typedef SmallVectorImpl<const SCEV *>::iterator iterator;
176   typedef SmallVectorImpl<const SCEV *>::const_iterator const_iterator;
177   iterator begin() { return RegSequence.begin(); }
178   iterator end()   { return RegSequence.end(); }
179   const_iterator begin() const { return RegSequence.begin(); }
180   const_iterator end() const   { return RegSequence.end(); }
181 };
182 
183 }
184 
185 void
186 RegUseTracker::countRegister(const SCEV *Reg, size_t LUIdx) {
187   std::pair<RegUsesTy::iterator, bool> Pair =
188     RegUsesMap.insert(std::make_pair(Reg, RegSortData()));
189   RegSortData &RSD = Pair.first->second;
190   if (Pair.second)
191     RegSequence.push_back(Reg);
192   RSD.UsedByIndices.resize(std::max(RSD.UsedByIndices.size(), LUIdx + 1));
193   RSD.UsedByIndices.set(LUIdx);
194 }
195 
196 void
197 RegUseTracker::dropRegister(const SCEV *Reg, size_t LUIdx) {
198   RegUsesTy::iterator It = RegUsesMap.find(Reg);
199   assert(It != RegUsesMap.end());
200   RegSortData &RSD = It->second;
201   assert(RSD.UsedByIndices.size() > LUIdx);
202   RSD.UsedByIndices.reset(LUIdx);
203 }
204 
205 void
206 RegUseTracker::swapAndDropUse(size_t LUIdx, size_t LastLUIdx) {
207   assert(LUIdx <= LastLUIdx);
208 
209   // Update RegUses. The data structure is not optimized for this purpose;
210   // we must iterate through it and update each of the bit vectors.
211   for (auto &Pair : RegUsesMap) {
212     SmallBitVector &UsedByIndices = Pair.second.UsedByIndices;
213     if (LUIdx < UsedByIndices.size())
214       UsedByIndices[LUIdx] =
215         LastLUIdx < UsedByIndices.size() ? UsedByIndices[LastLUIdx] : 0;
216     UsedByIndices.resize(std::min(UsedByIndices.size(), LastLUIdx));
217   }
218 }
219 
220 bool
221 RegUseTracker::isRegUsedByUsesOtherThan(const SCEV *Reg, size_t LUIdx) const {
222   RegUsesTy::const_iterator I = RegUsesMap.find(Reg);
223   if (I == RegUsesMap.end())
224     return false;
225   const SmallBitVector &UsedByIndices = I->second.UsedByIndices;
226   int i = UsedByIndices.find_first();
227   if (i == -1) return false;
228   if ((size_t)i != LUIdx) return true;
229   return UsedByIndices.find_next(i) != -1;
230 }
231 
232 const SmallBitVector &RegUseTracker::getUsedByIndices(const SCEV *Reg) const {
233   RegUsesTy::const_iterator I = RegUsesMap.find(Reg);
234   assert(I != RegUsesMap.end() && "Unknown register!");
235   return I->second.UsedByIndices;
236 }
237 
238 void RegUseTracker::clear() {
239   RegUsesMap.clear();
240   RegSequence.clear();
241 }
242 
243 namespace {
244 
245 /// This class holds information that describes a formula for computing
246 /// satisfying a use. It may include broken-out immediates and scaled registers.
247 struct Formula {
248   /// Global base address used for complex addressing.
249   GlobalValue *BaseGV;
250 
251   /// Base offset for complex addressing.
252   int64_t BaseOffset;
253 
254   /// Whether any complex addressing has a base register.
255   bool HasBaseReg;
256 
257   /// The scale of any complex addressing.
258   int64_t Scale;
259 
260   /// The list of "base" registers for this use. When this is non-empty. The
261   /// canonical representation of a formula is
262   /// 1. BaseRegs.size > 1 implies ScaledReg != NULL and
263   /// 2. ScaledReg != NULL implies Scale != 1 || !BaseRegs.empty().
264   /// #1 enforces that the scaled register is always used when at least two
265   /// registers are needed by the formula: e.g., reg1 + reg2 is reg1 + 1 * reg2.
266   /// #2 enforces that 1 * reg is reg.
267   /// This invariant can be temporarly broken while building a formula.
268   /// However, every formula inserted into the LSRInstance must be in canonical
269   /// form.
270   SmallVector<const SCEV *, 4> BaseRegs;
271 
272   /// The 'scaled' register for this use. This should be non-null when Scale is
273   /// not zero.
274   const SCEV *ScaledReg;
275 
276   /// An additional constant offset which added near the use. This requires a
277   /// temporary register, but the offset itself can live in an add immediate
278   /// field rather than a register.
279   int64_t UnfoldedOffset;
280 
281   Formula()
282       : BaseGV(nullptr), BaseOffset(0), HasBaseReg(false), Scale(0),
283         ScaledReg(nullptr), UnfoldedOffset(0) {}
284 
285   void initialMatch(const SCEV *S, Loop *L, ScalarEvolution &SE);
286 
287   bool isCanonical() const;
288 
289   void canonicalize();
290 
291   bool unscale();
292 
293   size_t getNumRegs() const;
294   Type *getType() const;
295 
296   void deleteBaseReg(const SCEV *&S);
297 
298   bool referencesReg(const SCEV *S) const;
299   bool hasRegsUsedByUsesOtherThan(size_t LUIdx,
300                                   const RegUseTracker &RegUses) const;
301 
302   void print(raw_ostream &OS) const;
303   void dump() const;
304 };
305 
306 }
307 
308 /// Recursion helper for initialMatch.
309 static void DoInitialMatch(const SCEV *S, Loop *L,
310                            SmallVectorImpl<const SCEV *> &Good,
311                            SmallVectorImpl<const SCEV *> &Bad,
312                            ScalarEvolution &SE) {
313   // Collect expressions which properly dominate the loop header.
314   if (SE.properlyDominates(S, L->getHeader())) {
315     Good.push_back(S);
316     return;
317   }
318 
319   // Look at add operands.
320   if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(S)) {
321     for (const SCEV *S : Add->operands())
322       DoInitialMatch(S, L, Good, Bad, SE);
323     return;
324   }
325 
326   // Look at addrec operands.
327   if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S))
328     if (!AR->getStart()->isZero()) {
329       DoInitialMatch(AR->getStart(), L, Good, Bad, SE);
330       DoInitialMatch(SE.getAddRecExpr(SE.getConstant(AR->getType(), 0),
331                                       AR->getStepRecurrence(SE),
332                                       // FIXME: AR->getNoWrapFlags()
333                                       AR->getLoop(), SCEV::FlagAnyWrap),
334                      L, Good, Bad, SE);
335       return;
336     }
337 
338   // Handle a multiplication by -1 (negation) if it didn't fold.
339   if (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(S))
340     if (Mul->getOperand(0)->isAllOnesValue()) {
341       SmallVector<const SCEV *, 4> Ops(Mul->op_begin()+1, Mul->op_end());
342       const SCEV *NewMul = SE.getMulExpr(Ops);
343 
344       SmallVector<const SCEV *, 4> MyGood;
345       SmallVector<const SCEV *, 4> MyBad;
346       DoInitialMatch(NewMul, L, MyGood, MyBad, SE);
347       const SCEV *NegOne = SE.getSCEV(ConstantInt::getAllOnesValue(
348         SE.getEffectiveSCEVType(NewMul->getType())));
349       for (const SCEV *S : MyGood)
350         Good.push_back(SE.getMulExpr(NegOne, S));
351       for (const SCEV *S : MyBad)
352         Bad.push_back(SE.getMulExpr(NegOne, S));
353       return;
354     }
355 
356   // Ok, we can't do anything interesting. Just stuff the whole thing into a
357   // register and hope for the best.
358   Bad.push_back(S);
359 }
360 
361 /// Incorporate loop-variant parts of S into this Formula, attempting to keep
362 /// all loop-invariant and loop-computable values in a single base register.
363 void Formula::initialMatch(const SCEV *S, Loop *L, ScalarEvolution &SE) {
364   SmallVector<const SCEV *, 4> Good;
365   SmallVector<const SCEV *, 4> Bad;
366   DoInitialMatch(S, L, Good, Bad, SE);
367   if (!Good.empty()) {
368     const SCEV *Sum = SE.getAddExpr(Good);
369     if (!Sum->isZero())
370       BaseRegs.push_back(Sum);
371     HasBaseReg = true;
372   }
373   if (!Bad.empty()) {
374     const SCEV *Sum = SE.getAddExpr(Bad);
375     if (!Sum->isZero())
376       BaseRegs.push_back(Sum);
377     HasBaseReg = true;
378   }
379   canonicalize();
380 }
381 
382 /// \brief Check whether or not this formula statisfies the canonical
383 /// representation.
384 /// \see Formula::BaseRegs.
385 bool Formula::isCanonical() const {
386   if (ScaledReg)
387     return Scale != 1 || !BaseRegs.empty();
388   return BaseRegs.size() <= 1;
389 }
390 
391 /// \brief Helper method to morph a formula into its canonical representation.
392 /// \see Formula::BaseRegs.
393 /// Every formula having more than one base register, must use the ScaledReg
394 /// field. Otherwise, we would have to do special cases everywhere in LSR
395 /// to treat reg1 + reg2 + ... the same way as reg1 + 1*reg2 + ...
396 /// On the other hand, 1*reg should be canonicalized into reg.
397 void Formula::canonicalize() {
398   if (isCanonical())
399     return;
400   // So far we did not need this case. This is easy to implement but it is
401   // useless to maintain dead code. Beside it could hurt compile time.
402   assert(!BaseRegs.empty() && "1*reg => reg, should not be needed.");
403   // Keep the invariant sum in BaseRegs and one of the variant sum in ScaledReg.
404   ScaledReg = BaseRegs.back();
405   BaseRegs.pop_back();
406   Scale = 1;
407   size_t BaseRegsSize = BaseRegs.size();
408   size_t Try = 0;
409   // If ScaledReg is an invariant, try to find a variant expression.
410   while (Try < BaseRegsSize && !isa<SCEVAddRecExpr>(ScaledReg))
411     std::swap(ScaledReg, BaseRegs[Try++]);
412 }
413 
414 /// \brief Get rid of the scale in the formula.
415 /// In other words, this method morphes reg1 + 1*reg2 into reg1 + reg2.
416 /// \return true if it was possible to get rid of the scale, false otherwise.
417 /// \note After this operation the formula may not be in the canonical form.
418 bool Formula::unscale() {
419   if (Scale != 1)
420     return false;
421   Scale = 0;
422   BaseRegs.push_back(ScaledReg);
423   ScaledReg = nullptr;
424   return true;
425 }
426 
427 /// Return the total number of register operands used by this formula. This does
428 /// not include register uses implied by non-constant addrec strides.
429 size_t Formula::getNumRegs() const {
430   return !!ScaledReg + BaseRegs.size();
431 }
432 
433 /// Return the type of this formula, if it has one, or null otherwise. This type
434 /// is meaningless except for the bit size.
435 Type *Formula::getType() const {
436   return !BaseRegs.empty() ? BaseRegs.front()->getType() :
437          ScaledReg ? ScaledReg->getType() :
438          BaseGV ? BaseGV->getType() :
439          nullptr;
440 }
441 
442 /// Delete the given base reg from the BaseRegs list.
443 void Formula::deleteBaseReg(const SCEV *&S) {
444   if (&S != &BaseRegs.back())
445     std::swap(S, BaseRegs.back());
446   BaseRegs.pop_back();
447 }
448 
449 /// Test if this formula references the given register.
450 bool Formula::referencesReg(const SCEV *S) const {
451   return S == ScaledReg || is_contained(BaseRegs, S);
452 }
453 
454 /// Test whether this formula uses registers which are used by uses other than
455 /// the use with the given index.
456 bool Formula::hasRegsUsedByUsesOtherThan(size_t LUIdx,
457                                          const RegUseTracker &RegUses) const {
458   if (ScaledReg)
459     if (RegUses.isRegUsedByUsesOtherThan(ScaledReg, LUIdx))
460       return true;
461   for (const SCEV *BaseReg : BaseRegs)
462     if (RegUses.isRegUsedByUsesOtherThan(BaseReg, LUIdx))
463       return true;
464   return false;
465 }
466 
467 void Formula::print(raw_ostream &OS) const {
468   bool First = true;
469   if (BaseGV) {
470     if (!First) OS << " + "; else First = false;
471     BaseGV->printAsOperand(OS, /*PrintType=*/false);
472   }
473   if (BaseOffset != 0) {
474     if (!First) OS << " + "; else First = false;
475     OS << BaseOffset;
476   }
477   for (const SCEV *BaseReg : BaseRegs) {
478     if (!First) OS << " + "; else First = false;
479     OS << "reg(" << *BaseReg << ')';
480   }
481   if (HasBaseReg && BaseRegs.empty()) {
482     if (!First) OS << " + "; else First = false;
483     OS << "**error: HasBaseReg**";
484   } else if (!HasBaseReg && !BaseRegs.empty()) {
485     if (!First) OS << " + "; else First = false;
486     OS << "**error: !HasBaseReg**";
487   }
488   if (Scale != 0) {
489     if (!First) OS << " + "; else First = false;
490     OS << Scale << "*reg(";
491     if (ScaledReg)
492       OS << *ScaledReg;
493     else
494       OS << "<unknown>";
495     OS << ')';
496   }
497   if (UnfoldedOffset != 0) {
498     if (!First) OS << " + ";
499     OS << "imm(" << UnfoldedOffset << ')';
500   }
501 }
502 
503 LLVM_DUMP_METHOD
504 void Formula::dump() const {
505   print(errs()); errs() << '\n';
506 }
507 
508 /// Return true if the given addrec can be sign-extended without changing its
509 /// value.
510 static bool isAddRecSExtable(const SCEVAddRecExpr *AR, ScalarEvolution &SE) {
511   Type *WideTy =
512     IntegerType::get(SE.getContext(), SE.getTypeSizeInBits(AR->getType()) + 1);
513   return isa<SCEVAddRecExpr>(SE.getSignExtendExpr(AR, WideTy));
514 }
515 
516 /// Return true if the given add can be sign-extended without changing its
517 /// value.
518 static bool isAddSExtable(const SCEVAddExpr *A, ScalarEvolution &SE) {
519   Type *WideTy =
520     IntegerType::get(SE.getContext(), SE.getTypeSizeInBits(A->getType()) + 1);
521   return isa<SCEVAddExpr>(SE.getSignExtendExpr(A, WideTy));
522 }
523 
524 /// Return true if the given mul can be sign-extended without changing its
525 /// value.
526 static bool isMulSExtable(const SCEVMulExpr *M, ScalarEvolution &SE) {
527   Type *WideTy =
528     IntegerType::get(SE.getContext(),
529                      SE.getTypeSizeInBits(M->getType()) * M->getNumOperands());
530   return isa<SCEVMulExpr>(SE.getSignExtendExpr(M, WideTy));
531 }
532 
533 /// Return an expression for LHS /s RHS, if it can be determined and if the
534 /// remainder is known to be zero, or null otherwise. If IgnoreSignificantBits
535 /// is true, expressions like (X * Y) /s Y are simplified to Y, ignoring that
536 /// the multiplication may overflow, which is useful when the result will be
537 /// used in a context where the most significant bits are ignored.
538 static const SCEV *getExactSDiv(const SCEV *LHS, const SCEV *RHS,
539                                 ScalarEvolution &SE,
540                                 bool IgnoreSignificantBits = false) {
541   // Handle the trivial case, which works for any SCEV type.
542   if (LHS == RHS)
543     return SE.getConstant(LHS->getType(), 1);
544 
545   // Handle a few RHS special cases.
546   const SCEVConstant *RC = dyn_cast<SCEVConstant>(RHS);
547   if (RC) {
548     const APInt &RA = RC->getAPInt();
549     // Handle x /s -1 as x * -1, to give ScalarEvolution a chance to do
550     // some folding.
551     if (RA.isAllOnesValue())
552       return SE.getMulExpr(LHS, RC);
553     // Handle x /s 1 as x.
554     if (RA == 1)
555       return LHS;
556   }
557 
558   // Check for a division of a constant by a constant.
559   if (const SCEVConstant *C = dyn_cast<SCEVConstant>(LHS)) {
560     if (!RC)
561       return nullptr;
562     const APInt &LA = C->getAPInt();
563     const APInt &RA = RC->getAPInt();
564     if (LA.srem(RA) != 0)
565       return nullptr;
566     return SE.getConstant(LA.sdiv(RA));
567   }
568 
569   // Distribute the sdiv over addrec operands, if the addrec doesn't overflow.
570   if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(LHS)) {
571     if (IgnoreSignificantBits || isAddRecSExtable(AR, SE)) {
572       const SCEV *Step = getExactSDiv(AR->getStepRecurrence(SE), RHS, SE,
573                                       IgnoreSignificantBits);
574       if (!Step) return nullptr;
575       const SCEV *Start = getExactSDiv(AR->getStart(), RHS, SE,
576                                        IgnoreSignificantBits);
577       if (!Start) return nullptr;
578       // FlagNW is independent of the start value, step direction, and is
579       // preserved with smaller magnitude steps.
580       // FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
581       return SE.getAddRecExpr(Start, Step, AR->getLoop(), SCEV::FlagAnyWrap);
582     }
583     return nullptr;
584   }
585 
586   // Distribute the sdiv over add operands, if the add doesn't overflow.
587   if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(LHS)) {
588     if (IgnoreSignificantBits || isAddSExtable(Add, SE)) {
589       SmallVector<const SCEV *, 8> Ops;
590       for (const SCEV *S : Add->operands()) {
591         const SCEV *Op = getExactSDiv(S, RHS, SE, IgnoreSignificantBits);
592         if (!Op) return nullptr;
593         Ops.push_back(Op);
594       }
595       return SE.getAddExpr(Ops);
596     }
597     return nullptr;
598   }
599 
600   // Check for a multiply operand that we can pull RHS out of.
601   if (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(LHS)) {
602     if (IgnoreSignificantBits || isMulSExtable(Mul, SE)) {
603       SmallVector<const SCEV *, 4> Ops;
604       bool Found = false;
605       for (const SCEV *S : Mul->operands()) {
606         if (!Found)
607           if (const SCEV *Q = getExactSDiv(S, RHS, SE,
608                                            IgnoreSignificantBits)) {
609             S = Q;
610             Found = true;
611           }
612         Ops.push_back(S);
613       }
614       return Found ? SE.getMulExpr(Ops) : nullptr;
615     }
616     return nullptr;
617   }
618 
619   // Otherwise we don't know.
620   return nullptr;
621 }
622 
623 /// If S involves the addition of a constant integer value, return that integer
624 /// value, and mutate S to point to a new SCEV with that value excluded.
625 static int64_t ExtractImmediate(const SCEV *&S, ScalarEvolution &SE) {
626   if (const SCEVConstant *C = dyn_cast<SCEVConstant>(S)) {
627     if (C->getAPInt().getMinSignedBits() <= 64) {
628       S = SE.getConstant(C->getType(), 0);
629       return C->getValue()->getSExtValue();
630     }
631   } else if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(S)) {
632     SmallVector<const SCEV *, 8> NewOps(Add->op_begin(), Add->op_end());
633     int64_t Result = ExtractImmediate(NewOps.front(), SE);
634     if (Result != 0)
635       S = SE.getAddExpr(NewOps);
636     return Result;
637   } else if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S)) {
638     SmallVector<const SCEV *, 8> NewOps(AR->op_begin(), AR->op_end());
639     int64_t Result = ExtractImmediate(NewOps.front(), SE);
640     if (Result != 0)
641       S = SE.getAddRecExpr(NewOps, AR->getLoop(),
642                            // FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
643                            SCEV::FlagAnyWrap);
644     return Result;
645   }
646   return 0;
647 }
648 
649 /// If S involves the addition of a GlobalValue address, return that symbol, and
650 /// mutate S to point to a new SCEV with that value excluded.
651 static GlobalValue *ExtractSymbol(const SCEV *&S, ScalarEvolution &SE) {
652   if (const SCEVUnknown *U = dyn_cast<SCEVUnknown>(S)) {
653     if (GlobalValue *GV = dyn_cast<GlobalValue>(U->getValue())) {
654       S = SE.getConstant(GV->getType(), 0);
655       return GV;
656     }
657   } else if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(S)) {
658     SmallVector<const SCEV *, 8> NewOps(Add->op_begin(), Add->op_end());
659     GlobalValue *Result = ExtractSymbol(NewOps.back(), SE);
660     if (Result)
661       S = SE.getAddExpr(NewOps);
662     return Result;
663   } else if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S)) {
664     SmallVector<const SCEV *, 8> NewOps(AR->op_begin(), AR->op_end());
665     GlobalValue *Result = ExtractSymbol(NewOps.front(), SE);
666     if (Result)
667       S = SE.getAddRecExpr(NewOps, AR->getLoop(),
668                            // FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
669                            SCEV::FlagAnyWrap);
670     return Result;
671   }
672   return nullptr;
673 }
674 
675 /// Returns true if the specified instruction is using the specified value as an
676 /// address.
677 static bool isAddressUse(Instruction *Inst, Value *OperandVal) {
678   bool isAddress = isa<LoadInst>(Inst);
679   if (StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
680     if (SI->getOperand(1) == OperandVal)
681       isAddress = true;
682   } else if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(Inst)) {
683     // Addressing modes can also be folded into prefetches and a variety
684     // of intrinsics.
685     switch (II->getIntrinsicID()) {
686       default: break;
687       case Intrinsic::prefetch:
688         if (II->getArgOperand(0) == OperandVal)
689           isAddress = true;
690         break;
691     }
692   }
693   return isAddress;
694 }
695 
696 /// Return the type of the memory being accessed.
697 static MemAccessTy getAccessType(const Instruction *Inst) {
698   MemAccessTy AccessTy(Inst->getType(), MemAccessTy::UnknownAddressSpace);
699   if (const StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
700     AccessTy.MemTy = SI->getOperand(0)->getType();
701     AccessTy.AddrSpace = SI->getPointerAddressSpace();
702   } else if (const LoadInst *LI = dyn_cast<LoadInst>(Inst)) {
703     AccessTy.AddrSpace = LI->getPointerAddressSpace();
704   }
705 
706   // All pointers have the same requirements, so canonicalize them to an
707   // arbitrary pointer type to minimize variation.
708   if (PointerType *PTy = dyn_cast<PointerType>(AccessTy.MemTy))
709     AccessTy.MemTy = PointerType::get(IntegerType::get(PTy->getContext(), 1),
710                                       PTy->getAddressSpace());
711 
712   return AccessTy;
713 }
714 
715 /// Return true if this AddRec is already a phi in its loop.
716 static bool isExistingPhi(const SCEVAddRecExpr *AR, ScalarEvolution &SE) {
717   for (BasicBlock::iterator I = AR->getLoop()->getHeader()->begin();
718        PHINode *PN = dyn_cast<PHINode>(I); ++I) {
719     if (SE.isSCEVable(PN->getType()) &&
720         (SE.getEffectiveSCEVType(PN->getType()) ==
721          SE.getEffectiveSCEVType(AR->getType())) &&
722         SE.getSCEV(PN) == AR)
723       return true;
724   }
725   return false;
726 }
727 
728 /// Check if expanding this expression is likely to incur significant cost. This
729 /// is tricky because SCEV doesn't track which expressions are actually computed
730 /// by the current IR.
731 ///
732 /// We currently allow expansion of IV increments that involve adds,
733 /// multiplication by constants, and AddRecs from existing phis.
734 ///
735 /// TODO: Allow UDivExpr if we can find an existing IV increment that is an
736 /// obvious multiple of the UDivExpr.
737 static bool isHighCostExpansion(const SCEV *S,
738                                 SmallPtrSetImpl<const SCEV*> &Processed,
739                                 ScalarEvolution &SE) {
740   // Zero/One operand expressions
741   switch (S->getSCEVType()) {
742   case scUnknown:
743   case scConstant:
744     return false;
745   case scTruncate:
746     return isHighCostExpansion(cast<SCEVTruncateExpr>(S)->getOperand(),
747                                Processed, SE);
748   case scZeroExtend:
749     return isHighCostExpansion(cast<SCEVZeroExtendExpr>(S)->getOperand(),
750                                Processed, SE);
751   case scSignExtend:
752     return isHighCostExpansion(cast<SCEVSignExtendExpr>(S)->getOperand(),
753                                Processed, SE);
754   }
755 
756   if (!Processed.insert(S).second)
757     return false;
758 
759   if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(S)) {
760     for (const SCEV *S : Add->operands()) {
761       if (isHighCostExpansion(S, Processed, SE))
762         return true;
763     }
764     return false;
765   }
766 
767   if (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(S)) {
768     if (Mul->getNumOperands() == 2) {
769       // Multiplication by a constant is ok
770       if (isa<SCEVConstant>(Mul->getOperand(0)))
771         return isHighCostExpansion(Mul->getOperand(1), Processed, SE);
772 
773       // If we have the value of one operand, check if an existing
774       // multiplication already generates this expression.
775       if (const SCEVUnknown *U = dyn_cast<SCEVUnknown>(Mul->getOperand(1))) {
776         Value *UVal = U->getValue();
777         for (User *UR : UVal->users()) {
778           // If U is a constant, it may be used by a ConstantExpr.
779           Instruction *UI = dyn_cast<Instruction>(UR);
780           if (UI && UI->getOpcode() == Instruction::Mul &&
781               SE.isSCEVable(UI->getType())) {
782             return SE.getSCEV(UI) == Mul;
783           }
784         }
785       }
786     }
787   }
788 
789   if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S)) {
790     if (isExistingPhi(AR, SE))
791       return false;
792   }
793 
794   // Fow now, consider any other type of expression (div/mul/min/max) high cost.
795   return true;
796 }
797 
798 /// If any of the instructions is the specified set are trivially dead, delete
799 /// them and see if this makes any of their operands subsequently dead.
800 static bool
801 DeleteTriviallyDeadInstructions(SmallVectorImpl<WeakVH> &DeadInsts) {
802   bool Changed = false;
803 
804   while (!DeadInsts.empty()) {
805     Value *V = DeadInsts.pop_back_val();
806     Instruction *I = dyn_cast_or_null<Instruction>(V);
807 
808     if (!I || !isInstructionTriviallyDead(I))
809       continue;
810 
811     for (Use &O : I->operands())
812       if (Instruction *U = dyn_cast<Instruction>(O)) {
813         O = nullptr;
814         if (U->use_empty())
815           DeadInsts.emplace_back(U);
816       }
817 
818     I->eraseFromParent();
819     Changed = true;
820   }
821 
822   return Changed;
823 }
824 
825 namespace {
826 class LSRUse;
827 }
828 
829 /// \brief Check if the addressing mode defined by \p F is completely
830 /// folded in \p LU at isel time.
831 /// This includes address-mode folding and special icmp tricks.
832 /// This function returns true if \p LU can accommodate what \p F
833 /// defines and up to 1 base + 1 scaled + offset.
834 /// In other words, if \p F has several base registers, this function may
835 /// still return true. Therefore, users still need to account for
836 /// additional base registers and/or unfolded offsets to derive an
837 /// accurate cost model.
838 static bool isAMCompletelyFolded(const TargetTransformInfo &TTI,
839                                  const LSRUse &LU, const Formula &F);
840 // Get the cost of the scaling factor used in F for LU.
841 static unsigned getScalingFactorCost(const TargetTransformInfo &TTI,
842                                      const LSRUse &LU, const Formula &F);
843 
844 namespace {
845 
846 /// This class is used to measure and compare candidate formulae.
847 class Cost {
848   /// TODO: Some of these could be merged. Also, a lexical ordering
849   /// isn't always optimal.
850   unsigned NumRegs;
851   unsigned AddRecCost;
852   unsigned NumIVMuls;
853   unsigned NumBaseAdds;
854   unsigned ImmCost;
855   unsigned SetupCost;
856   unsigned ScaleCost;
857 
858 public:
859   Cost()
860     : NumRegs(0), AddRecCost(0), NumIVMuls(0), NumBaseAdds(0), ImmCost(0),
861       SetupCost(0), ScaleCost(0) {}
862 
863   bool operator<(const Cost &Other) const;
864 
865   void Lose();
866 
867 #ifndef NDEBUG
868   // Once any of the metrics loses, they must all remain losers.
869   bool isValid() {
870     return ((NumRegs | AddRecCost | NumIVMuls | NumBaseAdds
871              | ImmCost | SetupCost | ScaleCost) != ~0u)
872       || ((NumRegs & AddRecCost & NumIVMuls & NumBaseAdds
873            & ImmCost & SetupCost & ScaleCost) == ~0u);
874   }
875 #endif
876 
877   bool isLoser() {
878     assert(isValid() && "invalid cost");
879     return NumRegs == ~0u;
880   }
881 
882   void RateFormula(const TargetTransformInfo &TTI,
883                    const Formula &F,
884                    SmallPtrSetImpl<const SCEV *> &Regs,
885                    const DenseSet<const SCEV *> &VisitedRegs,
886                    const Loop *L,
887                    const SmallVectorImpl<int64_t> &Offsets,
888                    ScalarEvolution &SE, DominatorTree &DT,
889                    const LSRUse &LU,
890                    SmallPtrSetImpl<const SCEV *> *LoserRegs = nullptr);
891 
892   void print(raw_ostream &OS) const;
893   void dump() const;
894 
895 private:
896   void RateRegister(const SCEV *Reg,
897                     SmallPtrSetImpl<const SCEV *> &Regs,
898                     const Loop *L,
899                     ScalarEvolution &SE, DominatorTree &DT);
900   void RatePrimaryRegister(const SCEV *Reg,
901                            SmallPtrSetImpl<const SCEV *> &Regs,
902                            const Loop *L,
903                            ScalarEvolution &SE, DominatorTree &DT,
904                            SmallPtrSetImpl<const SCEV *> *LoserRegs);
905 };
906 
907 }
908 
909 /// Tally up interesting quantities from the given register.
910 void Cost::RateRegister(const SCEV *Reg,
911                         SmallPtrSetImpl<const SCEV *> &Regs,
912                         const Loop *L,
913                         ScalarEvolution &SE, DominatorTree &DT) {
914   if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(Reg)) {
915     // If this is an addrec for another loop, don't second-guess its addrec phi
916     // nodes. LSR isn't currently smart enough to reason about more than one
917     // loop at a time. LSR has already run on inner loops, will not run on outer
918     // loops, and cannot be expected to change sibling loops.
919     if (AR->getLoop() != L) {
920       // If the AddRec exists, consider it's register free and leave it alone.
921       if (isExistingPhi(AR, SE))
922         return;
923 
924       // Otherwise, do not consider this formula at all.
925       Lose();
926       return;
927     }
928     AddRecCost += 1; /// TODO: This should be a function of the stride.
929 
930     // Add the step value register, if it needs one.
931     // TODO: The non-affine case isn't precisely modeled here.
932     if (!AR->isAffine() || !isa<SCEVConstant>(AR->getOperand(1))) {
933       if (!Regs.count(AR->getOperand(1))) {
934         RateRegister(AR->getOperand(1), Regs, L, SE, DT);
935         if (isLoser())
936           return;
937       }
938     }
939   }
940   ++NumRegs;
941 
942   // Rough heuristic; favor registers which don't require extra setup
943   // instructions in the preheader.
944   if (!isa<SCEVUnknown>(Reg) &&
945       !isa<SCEVConstant>(Reg) &&
946       !(isa<SCEVAddRecExpr>(Reg) &&
947         (isa<SCEVUnknown>(cast<SCEVAddRecExpr>(Reg)->getStart()) ||
948          isa<SCEVConstant>(cast<SCEVAddRecExpr>(Reg)->getStart()))))
949     ++SetupCost;
950 
951   NumIVMuls += isa<SCEVMulExpr>(Reg) &&
952                SE.hasComputableLoopEvolution(Reg, L);
953 }
954 
955 /// Record this register in the set. If we haven't seen it before, rate
956 /// it. Optional LoserRegs provides a way to declare any formula that refers to
957 /// one of those regs an instant loser.
958 void Cost::RatePrimaryRegister(const SCEV *Reg,
959                                SmallPtrSetImpl<const SCEV *> &Regs,
960                                const Loop *L,
961                                ScalarEvolution &SE, DominatorTree &DT,
962                                SmallPtrSetImpl<const SCEV *> *LoserRegs) {
963   if (LoserRegs && LoserRegs->count(Reg)) {
964     Lose();
965     return;
966   }
967   if (Regs.insert(Reg).second) {
968     RateRegister(Reg, Regs, L, SE, DT);
969     if (LoserRegs && isLoser())
970       LoserRegs->insert(Reg);
971   }
972 }
973 
974 void Cost::RateFormula(const TargetTransformInfo &TTI,
975                        const Formula &F,
976                        SmallPtrSetImpl<const SCEV *> &Regs,
977                        const DenseSet<const SCEV *> &VisitedRegs,
978                        const Loop *L,
979                        const SmallVectorImpl<int64_t> &Offsets,
980                        ScalarEvolution &SE, DominatorTree &DT,
981                        const LSRUse &LU,
982                        SmallPtrSetImpl<const SCEV *> *LoserRegs) {
983   assert(F.isCanonical() && "Cost is accurate only for canonical formula");
984   // Tally up the registers.
985   if (const SCEV *ScaledReg = F.ScaledReg) {
986     if (VisitedRegs.count(ScaledReg)) {
987       Lose();
988       return;
989     }
990     RatePrimaryRegister(ScaledReg, Regs, L, SE, DT, LoserRegs);
991     if (isLoser())
992       return;
993   }
994   for (const SCEV *BaseReg : F.BaseRegs) {
995     if (VisitedRegs.count(BaseReg)) {
996       Lose();
997       return;
998     }
999     RatePrimaryRegister(BaseReg, Regs, L, SE, DT, LoserRegs);
1000     if (isLoser())
1001       return;
1002   }
1003 
1004   // Determine how many (unfolded) adds we'll need inside the loop.
1005   size_t NumBaseParts = F.getNumRegs();
1006   if (NumBaseParts > 1)
1007     // Do not count the base and a possible second register if the target
1008     // allows to fold 2 registers.
1009     NumBaseAdds +=
1010         NumBaseParts - (1 + (F.Scale && isAMCompletelyFolded(TTI, LU, F)));
1011   NumBaseAdds += (F.UnfoldedOffset != 0);
1012 
1013   // Accumulate non-free scaling amounts.
1014   ScaleCost += getScalingFactorCost(TTI, LU, F);
1015 
1016   // Tally up the non-zero immediates.
1017   for (int64_t O : Offsets) {
1018     int64_t Offset = (uint64_t)O + F.BaseOffset;
1019     if (F.BaseGV)
1020       ImmCost += 64; // Handle symbolic values conservatively.
1021                      // TODO: This should probably be the pointer size.
1022     else if (Offset != 0)
1023       ImmCost += APInt(64, Offset, true).getMinSignedBits();
1024   }
1025   assert(isValid() && "invalid cost");
1026 }
1027 
1028 /// Set this cost to a losing value.
1029 void Cost::Lose() {
1030   NumRegs = ~0u;
1031   AddRecCost = ~0u;
1032   NumIVMuls = ~0u;
1033   NumBaseAdds = ~0u;
1034   ImmCost = ~0u;
1035   SetupCost = ~0u;
1036   ScaleCost = ~0u;
1037 }
1038 
1039 /// Choose the lower cost.
1040 bool Cost::operator<(const Cost &Other) const {
1041   return std::tie(NumRegs, AddRecCost, NumIVMuls, NumBaseAdds, ScaleCost,
1042                   ImmCost, SetupCost) <
1043          std::tie(Other.NumRegs, Other.AddRecCost, Other.NumIVMuls,
1044                   Other.NumBaseAdds, Other.ScaleCost, Other.ImmCost,
1045                   Other.SetupCost);
1046 }
1047 
1048 void Cost::print(raw_ostream &OS) const {
1049   OS << NumRegs << " reg" << (NumRegs == 1 ? "" : "s");
1050   if (AddRecCost != 0)
1051     OS << ", with addrec cost " << AddRecCost;
1052   if (NumIVMuls != 0)
1053     OS << ", plus " << NumIVMuls << " IV mul" << (NumIVMuls == 1 ? "" : "s");
1054   if (NumBaseAdds != 0)
1055     OS << ", plus " << NumBaseAdds << " base add"
1056        << (NumBaseAdds == 1 ? "" : "s");
1057   if (ScaleCost != 0)
1058     OS << ", plus " << ScaleCost << " scale cost";
1059   if (ImmCost != 0)
1060     OS << ", plus " << ImmCost << " imm cost";
1061   if (SetupCost != 0)
1062     OS << ", plus " << SetupCost << " setup cost";
1063 }
1064 
1065 LLVM_DUMP_METHOD
1066 void Cost::dump() const {
1067   print(errs()); errs() << '\n';
1068 }
1069 
1070 namespace {
1071 
1072 /// An operand value in an instruction which is to be replaced with some
1073 /// equivalent, possibly strength-reduced, replacement.
1074 struct LSRFixup {
1075   /// The instruction which will be updated.
1076   Instruction *UserInst;
1077 
1078   /// The operand of the instruction which will be replaced. The operand may be
1079   /// used more than once; every instance will be replaced.
1080   Value *OperandValToReplace;
1081 
1082   /// If this user is to use the post-incremented value of an induction
1083   /// variable, this variable is non-null and holds the loop associated with the
1084   /// induction variable.
1085   PostIncLoopSet PostIncLoops;
1086 
1087   /// The index of the LSRUse describing the expression which this fixup needs,
1088   /// minus an offset (below).
1089   size_t LUIdx;
1090 
1091   /// A constant offset to be added to the LSRUse expression.  This allows
1092   /// multiple fixups to share the same LSRUse with different offsets, for
1093   /// example in an unrolled loop.
1094   int64_t Offset;
1095 
1096   bool isUseFullyOutsideLoop(const Loop *L) const;
1097 
1098   LSRFixup();
1099 
1100   void print(raw_ostream &OS) const;
1101   void dump() const;
1102 };
1103 
1104 }
1105 
1106 LSRFixup::LSRFixup()
1107   : UserInst(nullptr), OperandValToReplace(nullptr), LUIdx(~size_t(0)),
1108     Offset(0) {}
1109 
1110 /// Test whether this fixup always uses its value outside of the given loop.
1111 bool LSRFixup::isUseFullyOutsideLoop(const Loop *L) const {
1112   // PHI nodes use their value in their incoming blocks.
1113   if (const PHINode *PN = dyn_cast<PHINode>(UserInst)) {
1114     for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
1115       if (PN->getIncomingValue(i) == OperandValToReplace &&
1116           L->contains(PN->getIncomingBlock(i)))
1117         return false;
1118     return true;
1119   }
1120 
1121   return !L->contains(UserInst);
1122 }
1123 
1124 void LSRFixup::print(raw_ostream &OS) const {
1125   OS << "UserInst=";
1126   // Store is common and interesting enough to be worth special-casing.
1127   if (StoreInst *Store = dyn_cast<StoreInst>(UserInst)) {
1128     OS << "store ";
1129     Store->getOperand(0)->printAsOperand(OS, /*PrintType=*/false);
1130   } else if (UserInst->getType()->isVoidTy())
1131     OS << UserInst->getOpcodeName();
1132   else
1133     UserInst->printAsOperand(OS, /*PrintType=*/false);
1134 
1135   OS << ", OperandValToReplace=";
1136   OperandValToReplace->printAsOperand(OS, /*PrintType=*/false);
1137 
1138   for (const Loop *PIL : PostIncLoops) {
1139     OS << ", PostIncLoop=";
1140     PIL->getHeader()->printAsOperand(OS, /*PrintType=*/false);
1141   }
1142 
1143   if (LUIdx != ~size_t(0))
1144     OS << ", LUIdx=" << LUIdx;
1145 
1146   if (Offset != 0)
1147     OS << ", Offset=" << Offset;
1148 }
1149 
1150 LLVM_DUMP_METHOD
1151 void LSRFixup::dump() const {
1152   print(errs()); errs() << '\n';
1153 }
1154 
1155 namespace {
1156 
1157 /// A DenseMapInfo implementation for holding DenseMaps and DenseSets of sorted
1158 /// SmallVectors of const SCEV*.
1159 struct UniquifierDenseMapInfo {
1160   static SmallVector<const SCEV *, 4> getEmptyKey() {
1161     SmallVector<const SCEV *, 4>  V;
1162     V.push_back(reinterpret_cast<const SCEV *>(-1));
1163     return V;
1164   }
1165 
1166   static SmallVector<const SCEV *, 4> getTombstoneKey() {
1167     SmallVector<const SCEV *, 4> V;
1168     V.push_back(reinterpret_cast<const SCEV *>(-2));
1169     return V;
1170   }
1171 
1172   static unsigned getHashValue(const SmallVector<const SCEV *, 4> &V) {
1173     return static_cast<unsigned>(hash_combine_range(V.begin(), V.end()));
1174   }
1175 
1176   static bool isEqual(const SmallVector<const SCEV *, 4> &LHS,
1177                       const SmallVector<const SCEV *, 4> &RHS) {
1178     return LHS == RHS;
1179   }
1180 };
1181 
1182 /// This class holds the state that LSR keeps for each use in IVUsers, as well
1183 /// as uses invented by LSR itself. It includes information about what kinds of
1184 /// things can be folded into the user, information about the user itself, and
1185 /// information about how the use may be satisfied.  TODO: Represent multiple
1186 /// users of the same expression in common?
1187 class LSRUse {
1188   DenseSet<SmallVector<const SCEV *, 4>, UniquifierDenseMapInfo> Uniquifier;
1189 
1190 public:
1191   /// An enum for a kind of use, indicating what types of scaled and immediate
1192   /// operands it might support.
1193   enum KindType {
1194     Basic,   ///< A normal use, with no folding.
1195     Special, ///< A special case of basic, allowing -1 scales.
1196     Address, ///< An address use; folding according to TargetLowering
1197     ICmpZero ///< An equality icmp with both operands folded into one.
1198     // TODO: Add a generic icmp too?
1199   };
1200 
1201   typedef PointerIntPair<const SCEV *, 2, KindType> SCEVUseKindPair;
1202 
1203   KindType Kind;
1204   MemAccessTy AccessTy;
1205 
1206   SmallVector<int64_t, 8> Offsets;
1207   int64_t MinOffset;
1208   int64_t MaxOffset;
1209 
1210   /// This records whether all of the fixups using this LSRUse are outside of
1211   /// the loop, in which case some special-case heuristics may be used.
1212   bool AllFixupsOutsideLoop;
1213 
1214   /// RigidFormula is set to true to guarantee that this use will be associated
1215   /// with a single formula--the one that initially matched. Some SCEV
1216   /// expressions cannot be expanded. This allows LSR to consider the registers
1217   /// used by those expressions without the need to expand them later after
1218   /// changing the formula.
1219   bool RigidFormula;
1220 
1221   /// This records the widest use type for any fixup using this
1222   /// LSRUse. FindUseWithSimilarFormula can't consider uses with different max
1223   /// fixup widths to be equivalent, because the narrower one may be relying on
1224   /// the implicit truncation to truncate away bogus bits.
1225   Type *WidestFixupType;
1226 
1227   /// A list of ways to build a value that can satisfy this user.  After the
1228   /// list is populated, one of these is selected heuristically and used to
1229   /// formulate a replacement for OperandValToReplace in UserInst.
1230   SmallVector<Formula, 12> Formulae;
1231 
1232   /// The set of register candidates used by all formulae in this LSRUse.
1233   SmallPtrSet<const SCEV *, 4> Regs;
1234 
1235   LSRUse(KindType K, MemAccessTy AT)
1236       : Kind(K), AccessTy(AT), MinOffset(INT64_MAX), MaxOffset(INT64_MIN),
1237         AllFixupsOutsideLoop(true), RigidFormula(false),
1238         WidestFixupType(nullptr) {}
1239 
1240   bool HasFormulaWithSameRegs(const Formula &F) const;
1241   bool InsertFormula(const Formula &F);
1242   void DeleteFormula(Formula &F);
1243   void RecomputeRegs(size_t LUIdx, RegUseTracker &Reguses);
1244 
1245   void print(raw_ostream &OS) const;
1246   void dump() const;
1247 };
1248 
1249 }
1250 
1251 /// Test whether this use as a formula which has the same registers as the given
1252 /// formula.
1253 bool LSRUse::HasFormulaWithSameRegs(const Formula &F) const {
1254   SmallVector<const SCEV *, 4> Key = F.BaseRegs;
1255   if (F.ScaledReg) Key.push_back(F.ScaledReg);
1256   // Unstable sort by host order ok, because this is only used for uniquifying.
1257   std::sort(Key.begin(), Key.end());
1258   return Uniquifier.count(Key);
1259 }
1260 
1261 /// If the given formula has not yet been inserted, add it to the list, and
1262 /// return true. Return false otherwise.  The formula must be in canonical form.
1263 bool LSRUse::InsertFormula(const Formula &F) {
1264   assert(F.isCanonical() && "Invalid canonical representation");
1265 
1266   if (!Formulae.empty() && RigidFormula)
1267     return false;
1268 
1269   SmallVector<const SCEV *, 4> Key = F.BaseRegs;
1270   if (F.ScaledReg) Key.push_back(F.ScaledReg);
1271   // Unstable sort by host order ok, because this is only used for uniquifying.
1272   std::sort(Key.begin(), Key.end());
1273 
1274   if (!Uniquifier.insert(Key).second)
1275     return false;
1276 
1277   // Using a register to hold the value of 0 is not profitable.
1278   assert((!F.ScaledReg || !F.ScaledReg->isZero()) &&
1279          "Zero allocated in a scaled register!");
1280 #ifndef NDEBUG
1281   for (const SCEV *BaseReg : F.BaseRegs)
1282     assert(!BaseReg->isZero() && "Zero allocated in a base register!");
1283 #endif
1284 
1285   // Add the formula to the list.
1286   Formulae.push_back(F);
1287 
1288   // Record registers now being used by this use.
1289   Regs.insert(F.BaseRegs.begin(), F.BaseRegs.end());
1290   if (F.ScaledReg)
1291     Regs.insert(F.ScaledReg);
1292 
1293   return true;
1294 }
1295 
1296 /// Remove the given formula from this use's list.
1297 void LSRUse::DeleteFormula(Formula &F) {
1298   if (&F != &Formulae.back())
1299     std::swap(F, Formulae.back());
1300   Formulae.pop_back();
1301 }
1302 
1303 /// Recompute the Regs field, and update RegUses.
1304 void LSRUse::RecomputeRegs(size_t LUIdx, RegUseTracker &RegUses) {
1305   // Now that we've filtered out some formulae, recompute the Regs set.
1306   SmallPtrSet<const SCEV *, 4> OldRegs = std::move(Regs);
1307   Regs.clear();
1308   for (const Formula &F : Formulae) {
1309     if (F.ScaledReg) Regs.insert(F.ScaledReg);
1310     Regs.insert(F.BaseRegs.begin(), F.BaseRegs.end());
1311   }
1312 
1313   // Update the RegTracker.
1314   for (const SCEV *S : OldRegs)
1315     if (!Regs.count(S))
1316       RegUses.dropRegister(S, LUIdx);
1317 }
1318 
1319 void LSRUse::print(raw_ostream &OS) const {
1320   OS << "LSR Use: Kind=";
1321   switch (Kind) {
1322   case Basic:    OS << "Basic"; break;
1323   case Special:  OS << "Special"; break;
1324   case ICmpZero: OS << "ICmpZero"; break;
1325   case Address:
1326     OS << "Address of ";
1327     if (AccessTy.MemTy->isPointerTy())
1328       OS << "pointer"; // the full pointer type could be really verbose
1329     else {
1330       OS << *AccessTy.MemTy;
1331     }
1332 
1333     OS << " in addrspace(" << AccessTy.AddrSpace << ')';
1334   }
1335 
1336   OS << ", Offsets={";
1337   bool NeedComma = false;
1338   for (int64_t O : Offsets) {
1339     if (NeedComma) OS << ',';
1340     OS << O;
1341     NeedComma = true;
1342   }
1343   OS << '}';
1344 
1345   if (AllFixupsOutsideLoop)
1346     OS << ", all-fixups-outside-loop";
1347 
1348   if (WidestFixupType)
1349     OS << ", widest fixup type: " << *WidestFixupType;
1350 }
1351 
1352 LLVM_DUMP_METHOD
1353 void LSRUse::dump() const {
1354   print(errs()); errs() << '\n';
1355 }
1356 
1357 static bool isAMCompletelyFolded(const TargetTransformInfo &TTI,
1358                                  LSRUse::KindType Kind, MemAccessTy AccessTy,
1359                                  GlobalValue *BaseGV, int64_t BaseOffset,
1360                                  bool HasBaseReg, int64_t Scale) {
1361   switch (Kind) {
1362   case LSRUse::Address:
1363     return TTI.isLegalAddressingMode(AccessTy.MemTy, BaseGV, BaseOffset,
1364                                      HasBaseReg, Scale, AccessTy.AddrSpace);
1365 
1366   case LSRUse::ICmpZero:
1367     // There's not even a target hook for querying whether it would be legal to
1368     // fold a GV into an ICmp.
1369     if (BaseGV)
1370       return false;
1371 
1372     // ICmp only has two operands; don't allow more than two non-trivial parts.
1373     if (Scale != 0 && HasBaseReg && BaseOffset != 0)
1374       return false;
1375 
1376     // ICmp only supports no scale or a -1 scale, as we can "fold" a -1 scale by
1377     // putting the scaled register in the other operand of the icmp.
1378     if (Scale != 0 && Scale != -1)
1379       return false;
1380 
1381     // If we have low-level target information, ask the target if it can fold an
1382     // integer immediate on an icmp.
1383     if (BaseOffset != 0) {
1384       // We have one of:
1385       // ICmpZero     BaseReg + BaseOffset => ICmp BaseReg, -BaseOffset
1386       // ICmpZero -1*ScaleReg + BaseOffset => ICmp ScaleReg, BaseOffset
1387       // Offs is the ICmp immediate.
1388       if (Scale == 0)
1389         // The cast does the right thing with INT64_MIN.
1390         BaseOffset = -(uint64_t)BaseOffset;
1391       return TTI.isLegalICmpImmediate(BaseOffset);
1392     }
1393 
1394     // ICmpZero BaseReg + -1*ScaleReg => ICmp BaseReg, ScaleReg
1395     return true;
1396 
1397   case LSRUse::Basic:
1398     // Only handle single-register values.
1399     return !BaseGV && Scale == 0 && BaseOffset == 0;
1400 
1401   case LSRUse::Special:
1402     // Special case Basic to handle -1 scales.
1403     return !BaseGV && (Scale == 0 || Scale == -1) && BaseOffset == 0;
1404   }
1405 
1406   llvm_unreachable("Invalid LSRUse Kind!");
1407 }
1408 
1409 static bool isAMCompletelyFolded(const TargetTransformInfo &TTI,
1410                                  int64_t MinOffset, int64_t MaxOffset,
1411                                  LSRUse::KindType Kind, MemAccessTy AccessTy,
1412                                  GlobalValue *BaseGV, int64_t BaseOffset,
1413                                  bool HasBaseReg, int64_t Scale) {
1414   // Check for overflow.
1415   if (((int64_t)((uint64_t)BaseOffset + MinOffset) > BaseOffset) !=
1416       (MinOffset > 0))
1417     return false;
1418   MinOffset = (uint64_t)BaseOffset + MinOffset;
1419   if (((int64_t)((uint64_t)BaseOffset + MaxOffset) > BaseOffset) !=
1420       (MaxOffset > 0))
1421     return false;
1422   MaxOffset = (uint64_t)BaseOffset + MaxOffset;
1423 
1424   return isAMCompletelyFolded(TTI, Kind, AccessTy, BaseGV, MinOffset,
1425                               HasBaseReg, Scale) &&
1426          isAMCompletelyFolded(TTI, Kind, AccessTy, BaseGV, MaxOffset,
1427                               HasBaseReg, Scale);
1428 }
1429 
1430 static bool isAMCompletelyFolded(const TargetTransformInfo &TTI,
1431                                  int64_t MinOffset, int64_t MaxOffset,
1432                                  LSRUse::KindType Kind, MemAccessTy AccessTy,
1433                                  const Formula &F) {
1434   // For the purpose of isAMCompletelyFolded either having a canonical formula
1435   // or a scale not equal to zero is correct.
1436   // Problems may arise from non canonical formulae having a scale == 0.
1437   // Strictly speaking it would best to just rely on canonical formulae.
1438   // However, when we generate the scaled formulae, we first check that the
1439   // scaling factor is profitable before computing the actual ScaledReg for
1440   // compile time sake.
1441   assert((F.isCanonical() || F.Scale != 0));
1442   return isAMCompletelyFolded(TTI, MinOffset, MaxOffset, Kind, AccessTy,
1443                               F.BaseGV, F.BaseOffset, F.HasBaseReg, F.Scale);
1444 }
1445 
1446 /// Test whether we know how to expand the current formula.
1447 static bool isLegalUse(const TargetTransformInfo &TTI, int64_t MinOffset,
1448                        int64_t MaxOffset, LSRUse::KindType Kind,
1449                        MemAccessTy AccessTy, GlobalValue *BaseGV,
1450                        int64_t BaseOffset, bool HasBaseReg, int64_t Scale) {
1451   // We know how to expand completely foldable formulae.
1452   return isAMCompletelyFolded(TTI, MinOffset, MaxOffset, Kind, AccessTy, BaseGV,
1453                               BaseOffset, HasBaseReg, Scale) ||
1454          // Or formulae that use a base register produced by a sum of base
1455          // registers.
1456          (Scale == 1 &&
1457           isAMCompletelyFolded(TTI, MinOffset, MaxOffset, Kind, AccessTy,
1458                                BaseGV, BaseOffset, true, 0));
1459 }
1460 
1461 static bool isLegalUse(const TargetTransformInfo &TTI, int64_t MinOffset,
1462                        int64_t MaxOffset, LSRUse::KindType Kind,
1463                        MemAccessTy AccessTy, const Formula &F) {
1464   return isLegalUse(TTI, MinOffset, MaxOffset, Kind, AccessTy, F.BaseGV,
1465                     F.BaseOffset, F.HasBaseReg, F.Scale);
1466 }
1467 
1468 static bool isAMCompletelyFolded(const TargetTransformInfo &TTI,
1469                                  const LSRUse &LU, const Formula &F) {
1470   return isAMCompletelyFolded(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind,
1471                               LU.AccessTy, F.BaseGV, F.BaseOffset, F.HasBaseReg,
1472                               F.Scale);
1473 }
1474 
1475 static unsigned getScalingFactorCost(const TargetTransformInfo &TTI,
1476                                      const LSRUse &LU, const Formula &F) {
1477   if (!F.Scale)
1478     return 0;
1479 
1480   // If the use is not completely folded in that instruction, we will have to
1481   // pay an extra cost only for scale != 1.
1482   if (!isAMCompletelyFolded(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind,
1483                             LU.AccessTy, F))
1484     return F.Scale != 1;
1485 
1486   switch (LU.Kind) {
1487   case LSRUse::Address: {
1488     // Check the scaling factor cost with both the min and max offsets.
1489     int ScaleCostMinOffset = TTI.getScalingFactorCost(
1490         LU.AccessTy.MemTy, F.BaseGV, F.BaseOffset + LU.MinOffset, F.HasBaseReg,
1491         F.Scale, LU.AccessTy.AddrSpace);
1492     int ScaleCostMaxOffset = TTI.getScalingFactorCost(
1493         LU.AccessTy.MemTy, F.BaseGV, F.BaseOffset + LU.MaxOffset, F.HasBaseReg,
1494         F.Scale, LU.AccessTy.AddrSpace);
1495 
1496     assert(ScaleCostMinOffset >= 0 && ScaleCostMaxOffset >= 0 &&
1497            "Legal addressing mode has an illegal cost!");
1498     return std::max(ScaleCostMinOffset, ScaleCostMaxOffset);
1499   }
1500   case LSRUse::ICmpZero:
1501   case LSRUse::Basic:
1502   case LSRUse::Special:
1503     // The use is completely folded, i.e., everything is folded into the
1504     // instruction.
1505     return 0;
1506   }
1507 
1508   llvm_unreachable("Invalid LSRUse Kind!");
1509 }
1510 
1511 static bool isAlwaysFoldable(const TargetTransformInfo &TTI,
1512                              LSRUse::KindType Kind, MemAccessTy AccessTy,
1513                              GlobalValue *BaseGV, int64_t BaseOffset,
1514                              bool HasBaseReg) {
1515   // Fast-path: zero is always foldable.
1516   if (BaseOffset == 0 && !BaseGV) return true;
1517 
1518   // Conservatively, create an address with an immediate and a
1519   // base and a scale.
1520   int64_t Scale = Kind == LSRUse::ICmpZero ? -1 : 1;
1521 
1522   // Canonicalize a scale of 1 to a base register if the formula doesn't
1523   // already have a base register.
1524   if (!HasBaseReg && Scale == 1) {
1525     Scale = 0;
1526     HasBaseReg = true;
1527   }
1528 
1529   return isAMCompletelyFolded(TTI, Kind, AccessTy, BaseGV, BaseOffset,
1530                               HasBaseReg, Scale);
1531 }
1532 
1533 static bool isAlwaysFoldable(const TargetTransformInfo &TTI,
1534                              ScalarEvolution &SE, int64_t MinOffset,
1535                              int64_t MaxOffset, LSRUse::KindType Kind,
1536                              MemAccessTy AccessTy, const SCEV *S,
1537                              bool HasBaseReg) {
1538   // Fast-path: zero is always foldable.
1539   if (S->isZero()) return true;
1540 
1541   // Conservatively, create an address with an immediate and a
1542   // base and a scale.
1543   int64_t BaseOffset = ExtractImmediate(S, SE);
1544   GlobalValue *BaseGV = ExtractSymbol(S, SE);
1545 
1546   // If there's anything else involved, it's not foldable.
1547   if (!S->isZero()) return false;
1548 
1549   // Fast-path: zero is always foldable.
1550   if (BaseOffset == 0 && !BaseGV) return true;
1551 
1552   // Conservatively, create an address with an immediate and a
1553   // base and a scale.
1554   int64_t Scale = Kind == LSRUse::ICmpZero ? -1 : 1;
1555 
1556   return isAMCompletelyFolded(TTI, MinOffset, MaxOffset, Kind, AccessTy, BaseGV,
1557                               BaseOffset, HasBaseReg, Scale);
1558 }
1559 
1560 namespace {
1561 
1562 /// An individual increment in a Chain of IV increments.  Relate an IV user to
1563 /// an expression that computes the IV it uses from the IV used by the previous
1564 /// link in the Chain.
1565 ///
1566 /// For the head of a chain, IncExpr holds the absolute SCEV expression for the
1567 /// original IVOperand. The head of the chain's IVOperand is only valid during
1568 /// chain collection, before LSR replaces IV users. During chain generation,
1569 /// IncExpr can be used to find the new IVOperand that computes the same
1570 /// expression.
1571 struct IVInc {
1572   Instruction *UserInst;
1573   Value* IVOperand;
1574   const SCEV *IncExpr;
1575 
1576   IVInc(Instruction *U, Value *O, const SCEV *E):
1577     UserInst(U), IVOperand(O), IncExpr(E) {}
1578 };
1579 
1580 // The list of IV increments in program order.  We typically add the head of a
1581 // chain without finding subsequent links.
1582 struct IVChain {
1583   SmallVector<IVInc,1> Incs;
1584   const SCEV *ExprBase;
1585 
1586   IVChain() : ExprBase(nullptr) {}
1587 
1588   IVChain(const IVInc &Head, const SCEV *Base)
1589     : Incs(1, Head), ExprBase(Base) {}
1590 
1591   typedef SmallVectorImpl<IVInc>::const_iterator const_iterator;
1592 
1593   // Return the first increment in the chain.
1594   const_iterator begin() const {
1595     assert(!Incs.empty());
1596     return std::next(Incs.begin());
1597   }
1598   const_iterator end() const {
1599     return Incs.end();
1600   }
1601 
1602   // Returns true if this chain contains any increments.
1603   bool hasIncs() const { return Incs.size() >= 2; }
1604 
1605   // Add an IVInc to the end of this chain.
1606   void add(const IVInc &X) { Incs.push_back(X); }
1607 
1608   // Returns the last UserInst in the chain.
1609   Instruction *tailUserInst() const { return Incs.back().UserInst; }
1610 
1611   // Returns true if IncExpr can be profitably added to this chain.
1612   bool isProfitableIncrement(const SCEV *OperExpr,
1613                              const SCEV *IncExpr,
1614                              ScalarEvolution&);
1615 };
1616 
1617 /// Helper for CollectChains to track multiple IV increment uses.  Distinguish
1618 /// between FarUsers that definitely cross IV increments and NearUsers that may
1619 /// be used between IV increments.
1620 struct ChainUsers {
1621   SmallPtrSet<Instruction*, 4> FarUsers;
1622   SmallPtrSet<Instruction*, 4> NearUsers;
1623 };
1624 
1625 /// This class holds state for the main loop strength reduction logic.
1626 class LSRInstance {
1627   IVUsers &IU;
1628   ScalarEvolution &SE;
1629   DominatorTree &DT;
1630   LoopInfo &LI;
1631   const TargetTransformInfo &TTI;
1632   Loop *const L;
1633   bool Changed;
1634 
1635   /// This is the insert position that the current loop's induction variable
1636   /// increment should be placed. In simple loops, this is the latch block's
1637   /// terminator. But in more complicated cases, this is a position which will
1638   /// dominate all the in-loop post-increment users.
1639   Instruction *IVIncInsertPos;
1640 
1641   /// Interesting factors between use strides.
1642   SmallSetVector<int64_t, 8> Factors;
1643 
1644   /// Interesting use types, to facilitate truncation reuse.
1645   SmallSetVector<Type *, 4> Types;
1646 
1647   /// The list of operands which are to be replaced.
1648   SmallVector<LSRFixup, 16> Fixups;
1649 
1650   /// The list of interesting uses.
1651   SmallVector<LSRUse, 16> Uses;
1652 
1653   /// Track which uses use which register candidates.
1654   RegUseTracker RegUses;
1655 
1656   // Limit the number of chains to avoid quadratic behavior. We don't expect to
1657   // have more than a few IV increment chains in a loop. Missing a Chain falls
1658   // back to normal LSR behavior for those uses.
1659   static const unsigned MaxChains = 8;
1660 
1661   /// IV users can form a chain of IV increments.
1662   SmallVector<IVChain, MaxChains> IVChainVec;
1663 
1664   /// IV users that belong to profitable IVChains.
1665   SmallPtrSet<Use*, MaxChains> IVIncSet;
1666 
1667   void OptimizeShadowIV();
1668   bool FindIVUserForCond(ICmpInst *Cond, IVStrideUse *&CondUse);
1669   ICmpInst *OptimizeMax(ICmpInst *Cond, IVStrideUse* &CondUse);
1670   void OptimizeLoopTermCond();
1671 
1672   void ChainInstruction(Instruction *UserInst, Instruction *IVOper,
1673                         SmallVectorImpl<ChainUsers> &ChainUsersVec);
1674   void FinalizeChain(IVChain &Chain);
1675   void CollectChains();
1676   void GenerateIVChain(const IVChain &Chain, SCEVExpander &Rewriter,
1677                        SmallVectorImpl<WeakVH> &DeadInsts);
1678 
1679   void CollectInterestingTypesAndFactors();
1680   void CollectFixupsAndInitialFormulae();
1681 
1682   LSRFixup &getNewFixup() {
1683     Fixups.push_back(LSRFixup());
1684     return Fixups.back();
1685   }
1686 
1687   // Support for sharing of LSRUses between LSRFixups.
1688   typedef DenseMap<LSRUse::SCEVUseKindPair, size_t> UseMapTy;
1689   UseMapTy UseMap;
1690 
1691   bool reconcileNewOffset(LSRUse &LU, int64_t NewOffset, bool HasBaseReg,
1692                           LSRUse::KindType Kind, MemAccessTy AccessTy);
1693 
1694   std::pair<size_t, int64_t> getUse(const SCEV *&Expr, LSRUse::KindType Kind,
1695                                     MemAccessTy AccessTy);
1696 
1697   void DeleteUse(LSRUse &LU, size_t LUIdx);
1698 
1699   LSRUse *FindUseWithSimilarFormula(const Formula &F, const LSRUse &OrigLU);
1700 
1701   void InsertInitialFormula(const SCEV *S, LSRUse &LU, size_t LUIdx);
1702   void InsertSupplementalFormula(const SCEV *S, LSRUse &LU, size_t LUIdx);
1703   void CountRegisters(const Formula &F, size_t LUIdx);
1704   bool InsertFormula(LSRUse &LU, unsigned LUIdx, const Formula &F);
1705 
1706   void CollectLoopInvariantFixupsAndFormulae();
1707 
1708   void GenerateReassociations(LSRUse &LU, unsigned LUIdx, Formula Base,
1709                               unsigned Depth = 0);
1710 
1711   void GenerateReassociationsImpl(LSRUse &LU, unsigned LUIdx,
1712                                   const Formula &Base, unsigned Depth,
1713                                   size_t Idx, bool IsScaledReg = false);
1714   void GenerateCombinations(LSRUse &LU, unsigned LUIdx, Formula Base);
1715   void GenerateSymbolicOffsetsImpl(LSRUse &LU, unsigned LUIdx,
1716                                    const Formula &Base, size_t Idx,
1717                                    bool IsScaledReg = false);
1718   void GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx, Formula Base);
1719   void GenerateConstantOffsetsImpl(LSRUse &LU, unsigned LUIdx,
1720                                    const Formula &Base,
1721                                    const SmallVectorImpl<int64_t> &Worklist,
1722                                    size_t Idx, bool IsScaledReg = false);
1723   void GenerateConstantOffsets(LSRUse &LU, unsigned LUIdx, Formula Base);
1724   void GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx, Formula Base);
1725   void GenerateScales(LSRUse &LU, unsigned LUIdx, Formula Base);
1726   void GenerateTruncates(LSRUse &LU, unsigned LUIdx, Formula Base);
1727   void GenerateCrossUseConstantOffsets();
1728   void GenerateAllReuseFormulae();
1729 
1730   void FilterOutUndesirableDedicatedRegisters();
1731 
1732   size_t EstimateSearchSpaceComplexity() const;
1733   void NarrowSearchSpaceByDetectingSupersets();
1734   void NarrowSearchSpaceByCollapsingUnrolledCode();
1735   void NarrowSearchSpaceByRefilteringUndesirableDedicatedRegisters();
1736   void NarrowSearchSpaceByPickingWinnerRegs();
1737   void NarrowSearchSpaceUsingHeuristics();
1738 
1739   void SolveRecurse(SmallVectorImpl<const Formula *> &Solution,
1740                     Cost &SolutionCost,
1741                     SmallVectorImpl<const Formula *> &Workspace,
1742                     const Cost &CurCost,
1743                     const SmallPtrSet<const SCEV *, 16> &CurRegs,
1744                     DenseSet<const SCEV *> &VisitedRegs) const;
1745   void Solve(SmallVectorImpl<const Formula *> &Solution) const;
1746 
1747   BasicBlock::iterator
1748     HoistInsertPosition(BasicBlock::iterator IP,
1749                         const SmallVectorImpl<Instruction *> &Inputs) const;
1750   BasicBlock::iterator
1751     AdjustInsertPositionForExpand(BasicBlock::iterator IP,
1752                                   const LSRFixup &LF,
1753                                   const LSRUse &LU,
1754                                   SCEVExpander &Rewriter) const;
1755 
1756   Value *Expand(const LSRFixup &LF,
1757                 const Formula &F,
1758                 BasicBlock::iterator IP,
1759                 SCEVExpander &Rewriter,
1760                 SmallVectorImpl<WeakVH> &DeadInsts) const;
1761   void RewriteForPHI(PHINode *PN, const LSRFixup &LF,
1762                      const Formula &F,
1763                      SCEVExpander &Rewriter,
1764                      SmallVectorImpl<WeakVH> &DeadInsts) const;
1765   void Rewrite(const LSRFixup &LF,
1766                const Formula &F,
1767                SCEVExpander &Rewriter,
1768                SmallVectorImpl<WeakVH> &DeadInsts) const;
1769   void ImplementSolution(const SmallVectorImpl<const Formula *> &Solution);
1770 
1771 public:
1772   LSRInstance(Loop *L, IVUsers &IU, ScalarEvolution &SE, DominatorTree &DT,
1773               LoopInfo &LI, const TargetTransformInfo &TTI);
1774 
1775   bool getChanged() const { return Changed; }
1776 
1777   void print_factors_and_types(raw_ostream &OS) const;
1778   void print_fixups(raw_ostream &OS) const;
1779   void print_uses(raw_ostream &OS) const;
1780   void print(raw_ostream &OS) const;
1781   void dump() const;
1782 };
1783 
1784 }
1785 
1786 /// If IV is used in a int-to-float cast inside the loop then try to eliminate
1787 /// the cast operation.
1788 void LSRInstance::OptimizeShadowIV() {
1789   const SCEV *BackedgeTakenCount = SE.getBackedgeTakenCount(L);
1790   if (isa<SCEVCouldNotCompute>(BackedgeTakenCount))
1791     return;
1792 
1793   for (IVUsers::const_iterator UI = IU.begin(), E = IU.end();
1794        UI != E; /* empty */) {
1795     IVUsers::const_iterator CandidateUI = UI;
1796     ++UI;
1797     Instruction *ShadowUse = CandidateUI->getUser();
1798     Type *DestTy = nullptr;
1799     bool IsSigned = false;
1800 
1801     /* If shadow use is a int->float cast then insert a second IV
1802        to eliminate this cast.
1803 
1804          for (unsigned i = 0; i < n; ++i)
1805            foo((double)i);
1806 
1807        is transformed into
1808 
1809          double d = 0.0;
1810          for (unsigned i = 0; i < n; ++i, ++d)
1811            foo(d);
1812     */
1813     if (UIToFPInst *UCast = dyn_cast<UIToFPInst>(CandidateUI->getUser())) {
1814       IsSigned = false;
1815       DestTy = UCast->getDestTy();
1816     }
1817     else if (SIToFPInst *SCast = dyn_cast<SIToFPInst>(CandidateUI->getUser())) {
1818       IsSigned = true;
1819       DestTy = SCast->getDestTy();
1820     }
1821     if (!DestTy) continue;
1822 
1823     // If target does not support DestTy natively then do not apply
1824     // this transformation.
1825     if (!TTI.isTypeLegal(DestTy)) continue;
1826 
1827     PHINode *PH = dyn_cast<PHINode>(ShadowUse->getOperand(0));
1828     if (!PH) continue;
1829     if (PH->getNumIncomingValues() != 2) continue;
1830 
1831     Type *SrcTy = PH->getType();
1832     int Mantissa = DestTy->getFPMantissaWidth();
1833     if (Mantissa == -1) continue;
1834     if ((int)SE.getTypeSizeInBits(SrcTy) > Mantissa)
1835       continue;
1836 
1837     unsigned Entry, Latch;
1838     if (PH->getIncomingBlock(0) == L->getLoopPreheader()) {
1839       Entry = 0;
1840       Latch = 1;
1841     } else {
1842       Entry = 1;
1843       Latch = 0;
1844     }
1845 
1846     ConstantInt *Init = dyn_cast<ConstantInt>(PH->getIncomingValue(Entry));
1847     if (!Init) continue;
1848     Constant *NewInit = ConstantFP::get(DestTy, IsSigned ?
1849                                         (double)Init->getSExtValue() :
1850                                         (double)Init->getZExtValue());
1851 
1852     BinaryOperator *Incr =
1853       dyn_cast<BinaryOperator>(PH->getIncomingValue(Latch));
1854     if (!Incr) continue;
1855     if (Incr->getOpcode() != Instruction::Add
1856         && Incr->getOpcode() != Instruction::Sub)
1857       continue;
1858 
1859     /* Initialize new IV, double d = 0.0 in above example. */
1860     ConstantInt *C = nullptr;
1861     if (Incr->getOperand(0) == PH)
1862       C = dyn_cast<ConstantInt>(Incr->getOperand(1));
1863     else if (Incr->getOperand(1) == PH)
1864       C = dyn_cast<ConstantInt>(Incr->getOperand(0));
1865     else
1866       continue;
1867 
1868     if (!C) continue;
1869 
1870     // Ignore negative constants, as the code below doesn't handle them
1871     // correctly. TODO: Remove this restriction.
1872     if (!C->getValue().isStrictlyPositive()) continue;
1873 
1874     /* Add new PHINode. */
1875     PHINode *NewPH = PHINode::Create(DestTy, 2, "IV.S.", PH);
1876 
1877     /* create new increment. '++d' in above example. */
1878     Constant *CFP = ConstantFP::get(DestTy, C->getZExtValue());
1879     BinaryOperator *NewIncr =
1880       BinaryOperator::Create(Incr->getOpcode() == Instruction::Add ?
1881                                Instruction::FAdd : Instruction::FSub,
1882                              NewPH, CFP, "IV.S.next.", Incr);
1883 
1884     NewPH->addIncoming(NewInit, PH->getIncomingBlock(Entry));
1885     NewPH->addIncoming(NewIncr, PH->getIncomingBlock(Latch));
1886 
1887     /* Remove cast operation */
1888     ShadowUse->replaceAllUsesWith(NewPH);
1889     ShadowUse->eraseFromParent();
1890     Changed = true;
1891     break;
1892   }
1893 }
1894 
1895 /// If Cond has an operand that is an expression of an IV, set the IV user and
1896 /// stride information and return true, otherwise return false.
1897 bool LSRInstance::FindIVUserForCond(ICmpInst *Cond, IVStrideUse *&CondUse) {
1898   for (IVStrideUse &U : IU)
1899     if (U.getUser() == Cond) {
1900       // NOTE: we could handle setcc instructions with multiple uses here, but
1901       // InstCombine does it as well for simple uses, it's not clear that it
1902       // occurs enough in real life to handle.
1903       CondUse = &U;
1904       return true;
1905     }
1906   return false;
1907 }
1908 
1909 /// Rewrite the loop's terminating condition if it uses a max computation.
1910 ///
1911 /// This is a narrow solution to a specific, but acute, problem. For loops
1912 /// like this:
1913 ///
1914 ///   i = 0;
1915 ///   do {
1916 ///     p[i] = 0.0;
1917 ///   } while (++i < n);
1918 ///
1919 /// the trip count isn't just 'n', because 'n' might not be positive. And
1920 /// unfortunately this can come up even for loops where the user didn't use
1921 /// a C do-while loop. For example, seemingly well-behaved top-test loops
1922 /// will commonly be lowered like this:
1923 //
1924 ///   if (n > 0) {
1925 ///     i = 0;
1926 ///     do {
1927 ///       p[i] = 0.0;
1928 ///     } while (++i < n);
1929 ///   }
1930 ///
1931 /// and then it's possible for subsequent optimization to obscure the if
1932 /// test in such a way that indvars can't find it.
1933 ///
1934 /// When indvars can't find the if test in loops like this, it creates a
1935 /// max expression, which allows it to give the loop a canonical
1936 /// induction variable:
1937 ///
1938 ///   i = 0;
1939 ///   max = n < 1 ? 1 : n;
1940 ///   do {
1941 ///     p[i] = 0.0;
1942 ///   } while (++i != max);
1943 ///
1944 /// Canonical induction variables are necessary because the loop passes
1945 /// are designed around them. The most obvious example of this is the
1946 /// LoopInfo analysis, which doesn't remember trip count values. It
1947 /// expects to be able to rediscover the trip count each time it is
1948 /// needed, and it does this using a simple analysis that only succeeds if
1949 /// the loop has a canonical induction variable.
1950 ///
1951 /// However, when it comes time to generate code, the maximum operation
1952 /// can be quite costly, especially if it's inside of an outer loop.
1953 ///
1954 /// This function solves this problem by detecting this type of loop and
1955 /// rewriting their conditions from ICMP_NE back to ICMP_SLT, and deleting
1956 /// the instructions for the maximum computation.
1957 ///
1958 ICmpInst *LSRInstance::OptimizeMax(ICmpInst *Cond, IVStrideUse* &CondUse) {
1959   // Check that the loop matches the pattern we're looking for.
1960   if (Cond->getPredicate() != CmpInst::ICMP_EQ &&
1961       Cond->getPredicate() != CmpInst::ICMP_NE)
1962     return Cond;
1963 
1964   SelectInst *Sel = dyn_cast<SelectInst>(Cond->getOperand(1));
1965   if (!Sel || !Sel->hasOneUse()) return Cond;
1966 
1967   const SCEV *BackedgeTakenCount = SE.getBackedgeTakenCount(L);
1968   if (isa<SCEVCouldNotCompute>(BackedgeTakenCount))
1969     return Cond;
1970   const SCEV *One = SE.getConstant(BackedgeTakenCount->getType(), 1);
1971 
1972   // Add one to the backedge-taken count to get the trip count.
1973   const SCEV *IterationCount = SE.getAddExpr(One, BackedgeTakenCount);
1974   if (IterationCount != SE.getSCEV(Sel)) return Cond;
1975 
1976   // Check for a max calculation that matches the pattern. There's no check
1977   // for ICMP_ULE here because the comparison would be with zero, which
1978   // isn't interesting.
1979   CmpInst::Predicate Pred = ICmpInst::BAD_ICMP_PREDICATE;
1980   const SCEVNAryExpr *Max = nullptr;
1981   if (const SCEVSMaxExpr *S = dyn_cast<SCEVSMaxExpr>(BackedgeTakenCount)) {
1982     Pred = ICmpInst::ICMP_SLE;
1983     Max = S;
1984   } else if (const SCEVSMaxExpr *S = dyn_cast<SCEVSMaxExpr>(IterationCount)) {
1985     Pred = ICmpInst::ICMP_SLT;
1986     Max = S;
1987   } else if (const SCEVUMaxExpr *U = dyn_cast<SCEVUMaxExpr>(IterationCount)) {
1988     Pred = ICmpInst::ICMP_ULT;
1989     Max = U;
1990   } else {
1991     // No match; bail.
1992     return Cond;
1993   }
1994 
1995   // To handle a max with more than two operands, this optimization would
1996   // require additional checking and setup.
1997   if (Max->getNumOperands() != 2)
1998     return Cond;
1999 
2000   const SCEV *MaxLHS = Max->getOperand(0);
2001   const SCEV *MaxRHS = Max->getOperand(1);
2002 
2003   // ScalarEvolution canonicalizes constants to the left. For < and >, look
2004   // for a comparison with 1. For <= and >=, a comparison with zero.
2005   if (!MaxLHS ||
2006       (ICmpInst::isTrueWhenEqual(Pred) ? !MaxLHS->isZero() : (MaxLHS != One)))
2007     return Cond;
2008 
2009   // Check the relevant induction variable for conformance to
2010   // the pattern.
2011   const SCEV *IV = SE.getSCEV(Cond->getOperand(0));
2012   const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(IV);
2013   if (!AR || !AR->isAffine() ||
2014       AR->getStart() != One ||
2015       AR->getStepRecurrence(SE) != One)
2016     return Cond;
2017 
2018   assert(AR->getLoop() == L &&
2019          "Loop condition operand is an addrec in a different loop!");
2020 
2021   // Check the right operand of the select, and remember it, as it will
2022   // be used in the new comparison instruction.
2023   Value *NewRHS = nullptr;
2024   if (ICmpInst::isTrueWhenEqual(Pred)) {
2025     // Look for n+1, and grab n.
2026     if (AddOperator *BO = dyn_cast<AddOperator>(Sel->getOperand(1)))
2027       if (ConstantInt *BO1 = dyn_cast<ConstantInt>(BO->getOperand(1)))
2028          if (BO1->isOne() && SE.getSCEV(BO->getOperand(0)) == MaxRHS)
2029            NewRHS = BO->getOperand(0);
2030     if (AddOperator *BO = dyn_cast<AddOperator>(Sel->getOperand(2)))
2031       if (ConstantInt *BO1 = dyn_cast<ConstantInt>(BO->getOperand(1)))
2032         if (BO1->isOne() && SE.getSCEV(BO->getOperand(0)) == MaxRHS)
2033           NewRHS = BO->getOperand(0);
2034     if (!NewRHS)
2035       return Cond;
2036   } else if (SE.getSCEV(Sel->getOperand(1)) == MaxRHS)
2037     NewRHS = Sel->getOperand(1);
2038   else if (SE.getSCEV(Sel->getOperand(2)) == MaxRHS)
2039     NewRHS = Sel->getOperand(2);
2040   else if (const SCEVUnknown *SU = dyn_cast<SCEVUnknown>(MaxRHS))
2041     NewRHS = SU->getValue();
2042   else
2043     // Max doesn't match expected pattern.
2044     return Cond;
2045 
2046   // Determine the new comparison opcode. It may be signed or unsigned,
2047   // and the original comparison may be either equality or inequality.
2048   if (Cond->getPredicate() == CmpInst::ICMP_EQ)
2049     Pred = CmpInst::getInversePredicate(Pred);
2050 
2051   // Ok, everything looks ok to change the condition into an SLT or SGE and
2052   // delete the max calculation.
2053   ICmpInst *NewCond =
2054     new ICmpInst(Cond, Pred, Cond->getOperand(0), NewRHS, "scmp");
2055 
2056   // Delete the max calculation instructions.
2057   Cond->replaceAllUsesWith(NewCond);
2058   CondUse->setUser(NewCond);
2059   Instruction *Cmp = cast<Instruction>(Sel->getOperand(0));
2060   Cond->eraseFromParent();
2061   Sel->eraseFromParent();
2062   if (Cmp->use_empty())
2063     Cmp->eraseFromParent();
2064   return NewCond;
2065 }
2066 
2067 /// Change loop terminating condition to use the postinc iv when possible.
2068 void
2069 LSRInstance::OptimizeLoopTermCond() {
2070   SmallPtrSet<Instruction *, 4> PostIncs;
2071 
2072   BasicBlock *LatchBlock = L->getLoopLatch();
2073   SmallVector<BasicBlock*, 8> ExitingBlocks;
2074   L->getExitingBlocks(ExitingBlocks);
2075 
2076   for (BasicBlock *ExitingBlock : ExitingBlocks) {
2077 
2078     // Get the terminating condition for the loop if possible.  If we
2079     // can, we want to change it to use a post-incremented version of its
2080     // induction variable, to allow coalescing the live ranges for the IV into
2081     // one register value.
2082 
2083     BranchInst *TermBr = dyn_cast<BranchInst>(ExitingBlock->getTerminator());
2084     if (!TermBr)
2085       continue;
2086     // FIXME: Overly conservative, termination condition could be an 'or' etc..
2087     if (TermBr->isUnconditional() || !isa<ICmpInst>(TermBr->getCondition()))
2088       continue;
2089 
2090     // Search IVUsesByStride to find Cond's IVUse if there is one.
2091     IVStrideUse *CondUse = nullptr;
2092     ICmpInst *Cond = cast<ICmpInst>(TermBr->getCondition());
2093     if (!FindIVUserForCond(Cond, CondUse))
2094       continue;
2095 
2096     // If the trip count is computed in terms of a max (due to ScalarEvolution
2097     // being unable to find a sufficient guard, for example), change the loop
2098     // comparison to use SLT or ULT instead of NE.
2099     // One consequence of doing this now is that it disrupts the count-down
2100     // optimization. That's not always a bad thing though, because in such
2101     // cases it may still be worthwhile to avoid a max.
2102     Cond = OptimizeMax(Cond, CondUse);
2103 
2104     // If this exiting block dominates the latch block, it may also use
2105     // the post-inc value if it won't be shared with other uses.
2106     // Check for dominance.
2107     if (!DT.dominates(ExitingBlock, LatchBlock))
2108       continue;
2109 
2110     // Conservatively avoid trying to use the post-inc value in non-latch
2111     // exits if there may be pre-inc users in intervening blocks.
2112     if (LatchBlock != ExitingBlock)
2113       for (IVUsers::const_iterator UI = IU.begin(), E = IU.end(); UI != E; ++UI)
2114         // Test if the use is reachable from the exiting block. This dominator
2115         // query is a conservative approximation of reachability.
2116         if (&*UI != CondUse &&
2117             !DT.properlyDominates(UI->getUser()->getParent(), ExitingBlock)) {
2118           // Conservatively assume there may be reuse if the quotient of their
2119           // strides could be a legal scale.
2120           const SCEV *A = IU.getStride(*CondUse, L);
2121           const SCEV *B = IU.getStride(*UI, L);
2122           if (!A || !B) continue;
2123           if (SE.getTypeSizeInBits(A->getType()) !=
2124               SE.getTypeSizeInBits(B->getType())) {
2125             if (SE.getTypeSizeInBits(A->getType()) >
2126                 SE.getTypeSizeInBits(B->getType()))
2127               B = SE.getSignExtendExpr(B, A->getType());
2128             else
2129               A = SE.getSignExtendExpr(A, B->getType());
2130           }
2131           if (const SCEVConstant *D =
2132                 dyn_cast_or_null<SCEVConstant>(getExactSDiv(B, A, SE))) {
2133             const ConstantInt *C = D->getValue();
2134             // Stride of one or negative one can have reuse with non-addresses.
2135             if (C->isOne() || C->isAllOnesValue())
2136               goto decline_post_inc;
2137             // Avoid weird situations.
2138             if (C->getValue().getMinSignedBits() >= 64 ||
2139                 C->getValue().isMinSignedValue())
2140               goto decline_post_inc;
2141             // Check for possible scaled-address reuse.
2142             MemAccessTy AccessTy = getAccessType(UI->getUser());
2143             int64_t Scale = C->getSExtValue();
2144             if (TTI.isLegalAddressingMode(AccessTy.MemTy, /*BaseGV=*/nullptr,
2145                                           /*BaseOffset=*/0,
2146                                           /*HasBaseReg=*/false, Scale,
2147                                           AccessTy.AddrSpace))
2148               goto decline_post_inc;
2149             Scale = -Scale;
2150             if (TTI.isLegalAddressingMode(AccessTy.MemTy, /*BaseGV=*/nullptr,
2151                                           /*BaseOffset=*/0,
2152                                           /*HasBaseReg=*/false, Scale,
2153                                           AccessTy.AddrSpace))
2154               goto decline_post_inc;
2155           }
2156         }
2157 
2158     DEBUG(dbgs() << "  Change loop exiting icmp to use postinc iv: "
2159                  << *Cond << '\n');
2160 
2161     // It's possible for the setcc instruction to be anywhere in the loop, and
2162     // possible for it to have multiple users.  If it is not immediately before
2163     // the exiting block branch, move it.
2164     if (&*++BasicBlock::iterator(Cond) != TermBr) {
2165       if (Cond->hasOneUse()) {
2166         Cond->moveBefore(TermBr);
2167       } else {
2168         // Clone the terminating condition and insert into the loopend.
2169         ICmpInst *OldCond = Cond;
2170         Cond = cast<ICmpInst>(Cond->clone());
2171         Cond->setName(L->getHeader()->getName() + ".termcond");
2172         ExitingBlock->getInstList().insert(TermBr->getIterator(), Cond);
2173 
2174         // Clone the IVUse, as the old use still exists!
2175         CondUse = &IU.AddUser(Cond, CondUse->getOperandValToReplace());
2176         TermBr->replaceUsesOfWith(OldCond, Cond);
2177       }
2178     }
2179 
2180     // If we get to here, we know that we can transform the setcc instruction to
2181     // use the post-incremented version of the IV, allowing us to coalesce the
2182     // live ranges for the IV correctly.
2183     CondUse->transformToPostInc(L);
2184     Changed = true;
2185 
2186     PostIncs.insert(Cond);
2187   decline_post_inc:;
2188   }
2189 
2190   // Determine an insertion point for the loop induction variable increment. It
2191   // must dominate all the post-inc comparisons we just set up, and it must
2192   // dominate the loop latch edge.
2193   IVIncInsertPos = L->getLoopLatch()->getTerminator();
2194   for (Instruction *Inst : PostIncs) {
2195     BasicBlock *BB =
2196       DT.findNearestCommonDominator(IVIncInsertPos->getParent(),
2197                                     Inst->getParent());
2198     if (BB == Inst->getParent())
2199       IVIncInsertPos = Inst;
2200     else if (BB != IVIncInsertPos->getParent())
2201       IVIncInsertPos = BB->getTerminator();
2202   }
2203 }
2204 
2205 /// Determine if the given use can accommodate a fixup at the given offset and
2206 /// other details. If so, update the use and return true.
2207 bool LSRInstance::reconcileNewOffset(LSRUse &LU, int64_t NewOffset,
2208                                      bool HasBaseReg, LSRUse::KindType Kind,
2209                                      MemAccessTy AccessTy) {
2210   int64_t NewMinOffset = LU.MinOffset;
2211   int64_t NewMaxOffset = LU.MaxOffset;
2212   MemAccessTy NewAccessTy = AccessTy;
2213 
2214   // Check for a mismatched kind. It's tempting to collapse mismatched kinds to
2215   // something conservative, however this can pessimize in the case that one of
2216   // the uses will have all its uses outside the loop, for example.
2217   if (LU.Kind != Kind)
2218     return false;
2219 
2220   // Check for a mismatched access type, and fall back conservatively as needed.
2221   // TODO: Be less conservative when the type is similar and can use the same
2222   // addressing modes.
2223   if (Kind == LSRUse::Address) {
2224     if (AccessTy != LU.AccessTy)
2225       NewAccessTy = MemAccessTy::getUnknown(AccessTy.MemTy->getContext());
2226   }
2227 
2228   // Conservatively assume HasBaseReg is true for now.
2229   if (NewOffset < LU.MinOffset) {
2230     if (!isAlwaysFoldable(TTI, Kind, NewAccessTy, /*BaseGV=*/nullptr,
2231                           LU.MaxOffset - NewOffset, HasBaseReg))
2232       return false;
2233     NewMinOffset = NewOffset;
2234   } else if (NewOffset > LU.MaxOffset) {
2235     if (!isAlwaysFoldable(TTI, Kind, NewAccessTy, /*BaseGV=*/nullptr,
2236                           NewOffset - LU.MinOffset, HasBaseReg))
2237       return false;
2238     NewMaxOffset = NewOffset;
2239   }
2240 
2241   // Update the use.
2242   LU.MinOffset = NewMinOffset;
2243   LU.MaxOffset = NewMaxOffset;
2244   LU.AccessTy = NewAccessTy;
2245   if (NewOffset != LU.Offsets.back())
2246     LU.Offsets.push_back(NewOffset);
2247   return true;
2248 }
2249 
2250 /// Return an LSRUse index and an offset value for a fixup which needs the given
2251 /// expression, with the given kind and optional access type.  Either reuse an
2252 /// existing use or create a new one, as needed.
2253 std::pair<size_t, int64_t> LSRInstance::getUse(const SCEV *&Expr,
2254                                                LSRUse::KindType Kind,
2255                                                MemAccessTy AccessTy) {
2256   const SCEV *Copy = Expr;
2257   int64_t Offset = ExtractImmediate(Expr, SE);
2258 
2259   // Basic uses can't accept any offset, for example.
2260   if (!isAlwaysFoldable(TTI, Kind, AccessTy, /*BaseGV=*/ nullptr,
2261                         Offset, /*HasBaseReg=*/ true)) {
2262     Expr = Copy;
2263     Offset = 0;
2264   }
2265 
2266   std::pair<UseMapTy::iterator, bool> P =
2267     UseMap.insert(std::make_pair(LSRUse::SCEVUseKindPair(Expr, Kind), 0));
2268   if (!P.second) {
2269     // A use already existed with this base.
2270     size_t LUIdx = P.first->second;
2271     LSRUse &LU = Uses[LUIdx];
2272     if (reconcileNewOffset(LU, Offset, /*HasBaseReg=*/true, Kind, AccessTy))
2273       // Reuse this use.
2274       return std::make_pair(LUIdx, Offset);
2275   }
2276 
2277   // Create a new use.
2278   size_t LUIdx = Uses.size();
2279   P.first->second = LUIdx;
2280   Uses.push_back(LSRUse(Kind, AccessTy));
2281   LSRUse &LU = Uses[LUIdx];
2282 
2283   // We don't need to track redundant offsets, but we don't need to go out
2284   // of our way here to avoid them.
2285   if (LU.Offsets.empty() || Offset != LU.Offsets.back())
2286     LU.Offsets.push_back(Offset);
2287 
2288   LU.MinOffset = Offset;
2289   LU.MaxOffset = Offset;
2290   return std::make_pair(LUIdx, Offset);
2291 }
2292 
2293 /// Delete the given use from the Uses list.
2294 void LSRInstance::DeleteUse(LSRUse &LU, size_t LUIdx) {
2295   if (&LU != &Uses.back())
2296     std::swap(LU, Uses.back());
2297   Uses.pop_back();
2298 
2299   // Update RegUses.
2300   RegUses.swapAndDropUse(LUIdx, Uses.size());
2301 }
2302 
2303 /// Look for a use distinct from OrigLU which is has a formula that has the same
2304 /// registers as the given formula.
2305 LSRUse *
2306 LSRInstance::FindUseWithSimilarFormula(const Formula &OrigF,
2307                                        const LSRUse &OrigLU) {
2308   // Search all uses for the formula. This could be more clever.
2309   for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
2310     LSRUse &LU = Uses[LUIdx];
2311     // Check whether this use is close enough to OrigLU, to see whether it's
2312     // worthwhile looking through its formulae.
2313     // Ignore ICmpZero uses because they may contain formulae generated by
2314     // GenerateICmpZeroScales, in which case adding fixup offsets may
2315     // be invalid.
2316     if (&LU != &OrigLU &&
2317         LU.Kind != LSRUse::ICmpZero &&
2318         LU.Kind == OrigLU.Kind && OrigLU.AccessTy == LU.AccessTy &&
2319         LU.WidestFixupType == OrigLU.WidestFixupType &&
2320         LU.HasFormulaWithSameRegs(OrigF)) {
2321       // Scan through this use's formulae.
2322       for (const Formula &F : LU.Formulae) {
2323         // Check to see if this formula has the same registers and symbols
2324         // as OrigF.
2325         if (F.BaseRegs == OrigF.BaseRegs &&
2326             F.ScaledReg == OrigF.ScaledReg &&
2327             F.BaseGV == OrigF.BaseGV &&
2328             F.Scale == OrigF.Scale &&
2329             F.UnfoldedOffset == OrigF.UnfoldedOffset) {
2330           if (F.BaseOffset == 0)
2331             return &LU;
2332           // This is the formula where all the registers and symbols matched;
2333           // there aren't going to be any others. Since we declined it, we
2334           // can skip the rest of the formulae and proceed to the next LSRUse.
2335           break;
2336         }
2337       }
2338     }
2339   }
2340 
2341   // Nothing looked good.
2342   return nullptr;
2343 }
2344 
2345 void LSRInstance::CollectInterestingTypesAndFactors() {
2346   SmallSetVector<const SCEV *, 4> Strides;
2347 
2348   // Collect interesting types and strides.
2349   SmallVector<const SCEV *, 4> Worklist;
2350   for (const IVStrideUse &U : IU) {
2351     const SCEV *Expr = IU.getExpr(U);
2352 
2353     // Collect interesting types.
2354     Types.insert(SE.getEffectiveSCEVType(Expr->getType()));
2355 
2356     // Add strides for mentioned loops.
2357     Worklist.push_back(Expr);
2358     do {
2359       const SCEV *S = Worklist.pop_back_val();
2360       if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S)) {
2361         if (AR->getLoop() == L)
2362           Strides.insert(AR->getStepRecurrence(SE));
2363         Worklist.push_back(AR->getStart());
2364       } else if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(S)) {
2365         Worklist.append(Add->op_begin(), Add->op_end());
2366       }
2367     } while (!Worklist.empty());
2368   }
2369 
2370   // Compute interesting factors from the set of interesting strides.
2371   for (SmallSetVector<const SCEV *, 4>::const_iterator
2372        I = Strides.begin(), E = Strides.end(); I != E; ++I)
2373     for (SmallSetVector<const SCEV *, 4>::const_iterator NewStrideIter =
2374          std::next(I); NewStrideIter != E; ++NewStrideIter) {
2375       const SCEV *OldStride = *I;
2376       const SCEV *NewStride = *NewStrideIter;
2377 
2378       if (SE.getTypeSizeInBits(OldStride->getType()) !=
2379           SE.getTypeSizeInBits(NewStride->getType())) {
2380         if (SE.getTypeSizeInBits(OldStride->getType()) >
2381             SE.getTypeSizeInBits(NewStride->getType()))
2382           NewStride = SE.getSignExtendExpr(NewStride, OldStride->getType());
2383         else
2384           OldStride = SE.getSignExtendExpr(OldStride, NewStride->getType());
2385       }
2386       if (const SCEVConstant *Factor =
2387             dyn_cast_or_null<SCEVConstant>(getExactSDiv(NewStride, OldStride,
2388                                                         SE, true))) {
2389         if (Factor->getAPInt().getMinSignedBits() <= 64)
2390           Factors.insert(Factor->getAPInt().getSExtValue());
2391       } else if (const SCEVConstant *Factor =
2392                    dyn_cast_or_null<SCEVConstant>(getExactSDiv(OldStride,
2393                                                                NewStride,
2394                                                                SE, true))) {
2395         if (Factor->getAPInt().getMinSignedBits() <= 64)
2396           Factors.insert(Factor->getAPInt().getSExtValue());
2397       }
2398     }
2399 
2400   // If all uses use the same type, don't bother looking for truncation-based
2401   // reuse.
2402   if (Types.size() == 1)
2403     Types.clear();
2404 
2405   DEBUG(print_factors_and_types(dbgs()));
2406 }
2407 
2408 /// Helper for CollectChains that finds an IV operand (computed by an AddRec in
2409 /// this loop) within [OI,OE) or returns OE. If IVUsers mapped Instructions to
2410 /// IVStrideUses, we could partially skip this.
2411 static User::op_iterator
2412 findIVOperand(User::op_iterator OI, User::op_iterator OE,
2413               Loop *L, ScalarEvolution &SE) {
2414   for(; OI != OE; ++OI) {
2415     if (Instruction *Oper = dyn_cast<Instruction>(*OI)) {
2416       if (!SE.isSCEVable(Oper->getType()))
2417         continue;
2418 
2419       if (const SCEVAddRecExpr *AR =
2420           dyn_cast<SCEVAddRecExpr>(SE.getSCEV(Oper))) {
2421         if (AR->getLoop() == L)
2422           break;
2423       }
2424     }
2425   }
2426   return OI;
2427 }
2428 
2429 /// IVChain logic must consistenctly peek base TruncInst operands, so wrap it in
2430 /// a convenient helper.
2431 static Value *getWideOperand(Value *Oper) {
2432   if (TruncInst *Trunc = dyn_cast<TruncInst>(Oper))
2433     return Trunc->getOperand(0);
2434   return Oper;
2435 }
2436 
2437 /// Return true if we allow an IV chain to include both types.
2438 static bool isCompatibleIVType(Value *LVal, Value *RVal) {
2439   Type *LType = LVal->getType();
2440   Type *RType = RVal->getType();
2441   return (LType == RType) || (LType->isPointerTy() && RType->isPointerTy());
2442 }
2443 
2444 /// Return an approximation of this SCEV expression's "base", or NULL for any
2445 /// constant. Returning the expression itself is conservative. Returning a
2446 /// deeper subexpression is more precise and valid as long as it isn't less
2447 /// complex than another subexpression. For expressions involving multiple
2448 /// unscaled values, we need to return the pointer-type SCEVUnknown. This avoids
2449 /// forming chains across objects, such as: PrevOper==a[i], IVOper==b[i],
2450 /// IVInc==b-a.
2451 ///
2452 /// Since SCEVUnknown is the rightmost type, and pointers are the rightmost
2453 /// SCEVUnknown, we simply return the rightmost SCEV operand.
2454 static const SCEV *getExprBase(const SCEV *S) {
2455   switch (S->getSCEVType()) {
2456   default: // uncluding scUnknown.
2457     return S;
2458   case scConstant:
2459     return nullptr;
2460   case scTruncate:
2461     return getExprBase(cast<SCEVTruncateExpr>(S)->getOperand());
2462   case scZeroExtend:
2463     return getExprBase(cast<SCEVZeroExtendExpr>(S)->getOperand());
2464   case scSignExtend:
2465     return getExprBase(cast<SCEVSignExtendExpr>(S)->getOperand());
2466   case scAddExpr: {
2467     // Skip over scaled operands (scMulExpr) to follow add operands as long as
2468     // there's nothing more complex.
2469     // FIXME: not sure if we want to recognize negation.
2470     const SCEVAddExpr *Add = cast<SCEVAddExpr>(S);
2471     for (std::reverse_iterator<SCEVAddExpr::op_iterator> I(Add->op_end()),
2472            E(Add->op_begin()); I != E; ++I) {
2473       const SCEV *SubExpr = *I;
2474       if (SubExpr->getSCEVType() == scAddExpr)
2475         return getExprBase(SubExpr);
2476 
2477       if (SubExpr->getSCEVType() != scMulExpr)
2478         return SubExpr;
2479     }
2480     return S; // all operands are scaled, be conservative.
2481   }
2482   case scAddRecExpr:
2483     return getExprBase(cast<SCEVAddRecExpr>(S)->getStart());
2484   }
2485 }
2486 
2487 /// Return true if the chain increment is profitable to expand into a loop
2488 /// invariant value, which may require its own register. A profitable chain
2489 /// increment will be an offset relative to the same base. We allow such offsets
2490 /// to potentially be used as chain increment as long as it's not obviously
2491 /// expensive to expand using real instructions.
2492 bool IVChain::isProfitableIncrement(const SCEV *OperExpr,
2493                                     const SCEV *IncExpr,
2494                                     ScalarEvolution &SE) {
2495   // Aggressively form chains when -stress-ivchain.
2496   if (StressIVChain)
2497     return true;
2498 
2499   // Do not replace a constant offset from IV head with a nonconstant IV
2500   // increment.
2501   if (!isa<SCEVConstant>(IncExpr)) {
2502     const SCEV *HeadExpr = SE.getSCEV(getWideOperand(Incs[0].IVOperand));
2503     if (isa<SCEVConstant>(SE.getMinusSCEV(OperExpr, HeadExpr)))
2504       return 0;
2505   }
2506 
2507   SmallPtrSet<const SCEV*, 8> Processed;
2508   return !isHighCostExpansion(IncExpr, Processed, SE);
2509 }
2510 
2511 /// Return true if the number of registers needed for the chain is estimated to
2512 /// be less than the number required for the individual IV users. First prohibit
2513 /// any IV users that keep the IV live across increments (the Users set should
2514 /// be empty). Next count the number and type of increments in the chain.
2515 ///
2516 /// Chaining IVs can lead to considerable code bloat if ISEL doesn't
2517 /// effectively use postinc addressing modes. Only consider it profitable it the
2518 /// increments can be computed in fewer registers when chained.
2519 ///
2520 /// TODO: Consider IVInc free if it's already used in another chains.
2521 static bool
2522 isProfitableChain(IVChain &Chain, SmallPtrSetImpl<Instruction*> &Users,
2523                   ScalarEvolution &SE, const TargetTransformInfo &TTI) {
2524   if (StressIVChain)
2525     return true;
2526 
2527   if (!Chain.hasIncs())
2528     return false;
2529 
2530   if (!Users.empty()) {
2531     DEBUG(dbgs() << "Chain: " << *Chain.Incs[0].UserInst << " users:\n";
2532           for (Instruction *Inst : Users) {
2533             dbgs() << "  " << *Inst << "\n";
2534           });
2535     return false;
2536   }
2537   assert(!Chain.Incs.empty() && "empty IV chains are not allowed");
2538 
2539   // The chain itself may require a register, so intialize cost to 1.
2540   int cost = 1;
2541 
2542   // A complete chain likely eliminates the need for keeping the original IV in
2543   // a register. LSR does not currently know how to form a complete chain unless
2544   // the header phi already exists.
2545   if (isa<PHINode>(Chain.tailUserInst())
2546       && SE.getSCEV(Chain.tailUserInst()) == Chain.Incs[0].IncExpr) {
2547     --cost;
2548   }
2549   const SCEV *LastIncExpr = nullptr;
2550   unsigned NumConstIncrements = 0;
2551   unsigned NumVarIncrements = 0;
2552   unsigned NumReusedIncrements = 0;
2553   for (const IVInc &Inc : Chain) {
2554     if (Inc.IncExpr->isZero())
2555       continue;
2556 
2557     // Incrementing by zero or some constant is neutral. We assume constants can
2558     // be folded into an addressing mode or an add's immediate operand.
2559     if (isa<SCEVConstant>(Inc.IncExpr)) {
2560       ++NumConstIncrements;
2561       continue;
2562     }
2563 
2564     if (Inc.IncExpr == LastIncExpr)
2565       ++NumReusedIncrements;
2566     else
2567       ++NumVarIncrements;
2568 
2569     LastIncExpr = Inc.IncExpr;
2570   }
2571   // An IV chain with a single increment is handled by LSR's postinc
2572   // uses. However, a chain with multiple increments requires keeping the IV's
2573   // value live longer than it needs to be if chained.
2574   if (NumConstIncrements > 1)
2575     --cost;
2576 
2577   // Materializing increment expressions in the preheader that didn't exist in
2578   // the original code may cost a register. For example, sign-extended array
2579   // indices can produce ridiculous increments like this:
2580   // IV + ((sext i32 (2 * %s) to i64) + (-1 * (sext i32 %s to i64)))
2581   cost += NumVarIncrements;
2582 
2583   // Reusing variable increments likely saves a register to hold the multiple of
2584   // the stride.
2585   cost -= NumReusedIncrements;
2586 
2587   DEBUG(dbgs() << "Chain: " << *Chain.Incs[0].UserInst << " Cost: " << cost
2588                << "\n");
2589 
2590   return cost < 0;
2591 }
2592 
2593 /// Add this IV user to an existing chain or make it the head of a new chain.
2594 void LSRInstance::ChainInstruction(Instruction *UserInst, Instruction *IVOper,
2595                                    SmallVectorImpl<ChainUsers> &ChainUsersVec) {
2596   // When IVs are used as types of varying widths, they are generally converted
2597   // to a wider type with some uses remaining narrow under a (free) trunc.
2598   Value *const NextIV = getWideOperand(IVOper);
2599   const SCEV *const OperExpr = SE.getSCEV(NextIV);
2600   const SCEV *const OperExprBase = getExprBase(OperExpr);
2601 
2602   // Visit all existing chains. Check if its IVOper can be computed as a
2603   // profitable loop invariant increment from the last link in the Chain.
2604   unsigned ChainIdx = 0, NChains = IVChainVec.size();
2605   const SCEV *LastIncExpr = nullptr;
2606   for (; ChainIdx < NChains; ++ChainIdx) {
2607     IVChain &Chain = IVChainVec[ChainIdx];
2608 
2609     // Prune the solution space aggressively by checking that both IV operands
2610     // are expressions that operate on the same unscaled SCEVUnknown. This
2611     // "base" will be canceled by the subsequent getMinusSCEV call. Checking
2612     // first avoids creating extra SCEV expressions.
2613     if (!StressIVChain && Chain.ExprBase != OperExprBase)
2614       continue;
2615 
2616     Value *PrevIV = getWideOperand(Chain.Incs.back().IVOperand);
2617     if (!isCompatibleIVType(PrevIV, NextIV))
2618       continue;
2619 
2620     // A phi node terminates a chain.
2621     if (isa<PHINode>(UserInst) && isa<PHINode>(Chain.tailUserInst()))
2622       continue;
2623 
2624     // The increment must be loop-invariant so it can be kept in a register.
2625     const SCEV *PrevExpr = SE.getSCEV(PrevIV);
2626     const SCEV *IncExpr = SE.getMinusSCEV(OperExpr, PrevExpr);
2627     if (!SE.isLoopInvariant(IncExpr, L))
2628       continue;
2629 
2630     if (Chain.isProfitableIncrement(OperExpr, IncExpr, SE)) {
2631       LastIncExpr = IncExpr;
2632       break;
2633     }
2634   }
2635   // If we haven't found a chain, create a new one, unless we hit the max. Don't
2636   // bother for phi nodes, because they must be last in the chain.
2637   if (ChainIdx == NChains) {
2638     if (isa<PHINode>(UserInst))
2639       return;
2640     if (NChains >= MaxChains && !StressIVChain) {
2641       DEBUG(dbgs() << "IV Chain Limit\n");
2642       return;
2643     }
2644     LastIncExpr = OperExpr;
2645     // IVUsers may have skipped over sign/zero extensions. We don't currently
2646     // attempt to form chains involving extensions unless they can be hoisted
2647     // into this loop's AddRec.
2648     if (!isa<SCEVAddRecExpr>(LastIncExpr))
2649       return;
2650     ++NChains;
2651     IVChainVec.push_back(IVChain(IVInc(UserInst, IVOper, LastIncExpr),
2652                                  OperExprBase));
2653     ChainUsersVec.resize(NChains);
2654     DEBUG(dbgs() << "IV Chain#" << ChainIdx << " Head: (" << *UserInst
2655                  << ") IV=" << *LastIncExpr << "\n");
2656   } else {
2657     DEBUG(dbgs() << "IV Chain#" << ChainIdx << "  Inc: (" << *UserInst
2658                  << ") IV+" << *LastIncExpr << "\n");
2659     // Add this IV user to the end of the chain.
2660     IVChainVec[ChainIdx].add(IVInc(UserInst, IVOper, LastIncExpr));
2661   }
2662   IVChain &Chain = IVChainVec[ChainIdx];
2663 
2664   SmallPtrSet<Instruction*,4> &NearUsers = ChainUsersVec[ChainIdx].NearUsers;
2665   // This chain's NearUsers become FarUsers.
2666   if (!LastIncExpr->isZero()) {
2667     ChainUsersVec[ChainIdx].FarUsers.insert(NearUsers.begin(),
2668                                             NearUsers.end());
2669     NearUsers.clear();
2670   }
2671 
2672   // All other uses of IVOperand become near uses of the chain.
2673   // We currently ignore intermediate values within SCEV expressions, assuming
2674   // they will eventually be used be the current chain, or can be computed
2675   // from one of the chain increments. To be more precise we could
2676   // transitively follow its user and only add leaf IV users to the set.
2677   for (User *U : IVOper->users()) {
2678     Instruction *OtherUse = dyn_cast<Instruction>(U);
2679     if (!OtherUse)
2680       continue;
2681     // Uses in the chain will no longer be uses if the chain is formed.
2682     // Include the head of the chain in this iteration (not Chain.begin()).
2683     IVChain::const_iterator IncIter = Chain.Incs.begin();
2684     IVChain::const_iterator IncEnd = Chain.Incs.end();
2685     for( ; IncIter != IncEnd; ++IncIter) {
2686       if (IncIter->UserInst == OtherUse)
2687         break;
2688     }
2689     if (IncIter != IncEnd)
2690       continue;
2691 
2692     if (SE.isSCEVable(OtherUse->getType())
2693         && !isa<SCEVUnknown>(SE.getSCEV(OtherUse))
2694         && IU.isIVUserOrOperand(OtherUse)) {
2695       continue;
2696     }
2697     NearUsers.insert(OtherUse);
2698   }
2699 
2700   // Since this user is part of the chain, it's no longer considered a use
2701   // of the chain.
2702   ChainUsersVec[ChainIdx].FarUsers.erase(UserInst);
2703 }
2704 
2705 /// Populate the vector of Chains.
2706 ///
2707 /// This decreases ILP at the architecture level. Targets with ample registers,
2708 /// multiple memory ports, and no register renaming probably don't want
2709 /// this. However, such targets should probably disable LSR altogether.
2710 ///
2711 /// The job of LSR is to make a reasonable choice of induction variables across
2712 /// the loop. Subsequent passes can easily "unchain" computation exposing more
2713 /// ILP *within the loop* if the target wants it.
2714 ///
2715 /// Finding the best IV chain is potentially a scheduling problem. Since LSR
2716 /// will not reorder memory operations, it will recognize this as a chain, but
2717 /// will generate redundant IV increments. Ideally this would be corrected later
2718 /// by a smart scheduler:
2719 ///        = A[i]
2720 ///        = A[i+x]
2721 /// A[i]   =
2722 /// A[i+x] =
2723 ///
2724 /// TODO: Walk the entire domtree within this loop, not just the path to the
2725 /// loop latch. This will discover chains on side paths, but requires
2726 /// maintaining multiple copies of the Chains state.
2727 void LSRInstance::CollectChains() {
2728   DEBUG(dbgs() << "Collecting IV Chains.\n");
2729   SmallVector<ChainUsers, 8> ChainUsersVec;
2730 
2731   SmallVector<BasicBlock *,8> LatchPath;
2732   BasicBlock *LoopHeader = L->getHeader();
2733   for (DomTreeNode *Rung = DT.getNode(L->getLoopLatch());
2734        Rung->getBlock() != LoopHeader; Rung = Rung->getIDom()) {
2735     LatchPath.push_back(Rung->getBlock());
2736   }
2737   LatchPath.push_back(LoopHeader);
2738 
2739   // Walk the instruction stream from the loop header to the loop latch.
2740   for (BasicBlock *BB : reverse(LatchPath)) {
2741     for (Instruction &I : *BB) {
2742       // Skip instructions that weren't seen by IVUsers analysis.
2743       if (isa<PHINode>(I) || !IU.isIVUserOrOperand(&I))
2744         continue;
2745 
2746       // Ignore users that are part of a SCEV expression. This way we only
2747       // consider leaf IV Users. This effectively rediscovers a portion of
2748       // IVUsers analysis but in program order this time.
2749       if (SE.isSCEVable(I.getType()) && !isa<SCEVUnknown>(SE.getSCEV(&I)))
2750         continue;
2751 
2752       // Remove this instruction from any NearUsers set it may be in.
2753       for (unsigned ChainIdx = 0, NChains = IVChainVec.size();
2754            ChainIdx < NChains; ++ChainIdx) {
2755         ChainUsersVec[ChainIdx].NearUsers.erase(&I);
2756       }
2757       // Search for operands that can be chained.
2758       SmallPtrSet<Instruction*, 4> UniqueOperands;
2759       User::op_iterator IVOpEnd = I.op_end();
2760       User::op_iterator IVOpIter = findIVOperand(I.op_begin(), IVOpEnd, L, SE);
2761       while (IVOpIter != IVOpEnd) {
2762         Instruction *IVOpInst = cast<Instruction>(*IVOpIter);
2763         if (UniqueOperands.insert(IVOpInst).second)
2764           ChainInstruction(&I, IVOpInst, ChainUsersVec);
2765         IVOpIter = findIVOperand(std::next(IVOpIter), IVOpEnd, L, SE);
2766       }
2767     } // Continue walking down the instructions.
2768   } // Continue walking down the domtree.
2769   // Visit phi backedges to determine if the chain can generate the IV postinc.
2770   for (BasicBlock::iterator I = L->getHeader()->begin();
2771        PHINode *PN = dyn_cast<PHINode>(I); ++I) {
2772     if (!SE.isSCEVable(PN->getType()))
2773       continue;
2774 
2775     Instruction *IncV =
2776       dyn_cast<Instruction>(PN->getIncomingValueForBlock(L->getLoopLatch()));
2777     if (IncV)
2778       ChainInstruction(PN, IncV, ChainUsersVec);
2779   }
2780   // Remove any unprofitable chains.
2781   unsigned ChainIdx = 0;
2782   for (unsigned UsersIdx = 0, NChains = IVChainVec.size();
2783        UsersIdx < NChains; ++UsersIdx) {
2784     if (!isProfitableChain(IVChainVec[UsersIdx],
2785                            ChainUsersVec[UsersIdx].FarUsers, SE, TTI))
2786       continue;
2787     // Preserve the chain at UsesIdx.
2788     if (ChainIdx != UsersIdx)
2789       IVChainVec[ChainIdx] = IVChainVec[UsersIdx];
2790     FinalizeChain(IVChainVec[ChainIdx]);
2791     ++ChainIdx;
2792   }
2793   IVChainVec.resize(ChainIdx);
2794 }
2795 
2796 void LSRInstance::FinalizeChain(IVChain &Chain) {
2797   assert(!Chain.Incs.empty() && "empty IV chains are not allowed");
2798   DEBUG(dbgs() << "Final Chain: " << *Chain.Incs[0].UserInst << "\n");
2799 
2800   for (const IVInc &Inc : Chain) {
2801     DEBUG(dbgs() << "        Inc: " << Inc.UserInst << "\n");
2802     auto UseI = find(Inc.UserInst->operands(), Inc.IVOperand);
2803     assert(UseI != Inc.UserInst->op_end() && "cannot find IV operand");
2804     IVIncSet.insert(UseI);
2805   }
2806 }
2807 
2808 /// Return true if the IVInc can be folded into an addressing mode.
2809 static bool canFoldIVIncExpr(const SCEV *IncExpr, Instruction *UserInst,
2810                              Value *Operand, const TargetTransformInfo &TTI) {
2811   const SCEVConstant *IncConst = dyn_cast<SCEVConstant>(IncExpr);
2812   if (!IncConst || !isAddressUse(UserInst, Operand))
2813     return false;
2814 
2815   if (IncConst->getAPInt().getMinSignedBits() > 64)
2816     return false;
2817 
2818   MemAccessTy AccessTy = getAccessType(UserInst);
2819   int64_t IncOffset = IncConst->getValue()->getSExtValue();
2820   if (!isAlwaysFoldable(TTI, LSRUse::Address, AccessTy, /*BaseGV=*/nullptr,
2821                         IncOffset, /*HaseBaseReg=*/false))
2822     return false;
2823 
2824   return true;
2825 }
2826 
2827 /// Generate an add or subtract for each IVInc in a chain to materialize the IV
2828 /// user's operand from the previous IV user's operand.
2829 void LSRInstance::GenerateIVChain(const IVChain &Chain, SCEVExpander &Rewriter,
2830                                   SmallVectorImpl<WeakVH> &DeadInsts) {
2831   // Find the new IVOperand for the head of the chain. It may have been replaced
2832   // by LSR.
2833   const IVInc &Head = Chain.Incs[0];
2834   User::op_iterator IVOpEnd = Head.UserInst->op_end();
2835   // findIVOperand returns IVOpEnd if it can no longer find a valid IV user.
2836   User::op_iterator IVOpIter = findIVOperand(Head.UserInst->op_begin(),
2837                                              IVOpEnd, L, SE);
2838   Value *IVSrc = nullptr;
2839   while (IVOpIter != IVOpEnd) {
2840     IVSrc = getWideOperand(*IVOpIter);
2841 
2842     // If this operand computes the expression that the chain needs, we may use
2843     // it. (Check this after setting IVSrc which is used below.)
2844     //
2845     // Note that if Head.IncExpr is wider than IVSrc, then this phi is too
2846     // narrow for the chain, so we can no longer use it. We do allow using a
2847     // wider phi, assuming the LSR checked for free truncation. In that case we
2848     // should already have a truncate on this operand such that
2849     // getSCEV(IVSrc) == IncExpr.
2850     if (SE.getSCEV(*IVOpIter) == Head.IncExpr
2851         || SE.getSCEV(IVSrc) == Head.IncExpr) {
2852       break;
2853     }
2854     IVOpIter = findIVOperand(std::next(IVOpIter), IVOpEnd, L, SE);
2855   }
2856   if (IVOpIter == IVOpEnd) {
2857     // Gracefully give up on this chain.
2858     DEBUG(dbgs() << "Concealed chain head: " << *Head.UserInst << "\n");
2859     return;
2860   }
2861 
2862   DEBUG(dbgs() << "Generate chain at: " << *IVSrc << "\n");
2863   Type *IVTy = IVSrc->getType();
2864   Type *IntTy = SE.getEffectiveSCEVType(IVTy);
2865   const SCEV *LeftOverExpr = nullptr;
2866   for (const IVInc &Inc : Chain) {
2867     Instruction *InsertPt = Inc.UserInst;
2868     if (isa<PHINode>(InsertPt))
2869       InsertPt = L->getLoopLatch()->getTerminator();
2870 
2871     // IVOper will replace the current IV User's operand. IVSrc is the IV
2872     // value currently held in a register.
2873     Value *IVOper = IVSrc;
2874     if (!Inc.IncExpr->isZero()) {
2875       // IncExpr was the result of subtraction of two narrow values, so must
2876       // be signed.
2877       const SCEV *IncExpr = SE.getNoopOrSignExtend(Inc.IncExpr, IntTy);
2878       LeftOverExpr = LeftOverExpr ?
2879         SE.getAddExpr(LeftOverExpr, IncExpr) : IncExpr;
2880     }
2881     if (LeftOverExpr && !LeftOverExpr->isZero()) {
2882       // Expand the IV increment.
2883       Rewriter.clearPostInc();
2884       Value *IncV = Rewriter.expandCodeFor(LeftOverExpr, IntTy, InsertPt);
2885       const SCEV *IVOperExpr = SE.getAddExpr(SE.getUnknown(IVSrc),
2886                                              SE.getUnknown(IncV));
2887       IVOper = Rewriter.expandCodeFor(IVOperExpr, IVTy, InsertPt);
2888 
2889       // If an IV increment can't be folded, use it as the next IV value.
2890       if (!canFoldIVIncExpr(LeftOverExpr, Inc.UserInst, Inc.IVOperand, TTI)) {
2891         assert(IVTy == IVOper->getType() && "inconsistent IV increment type");
2892         IVSrc = IVOper;
2893         LeftOverExpr = nullptr;
2894       }
2895     }
2896     Type *OperTy = Inc.IVOperand->getType();
2897     if (IVTy != OperTy) {
2898       assert(SE.getTypeSizeInBits(IVTy) >= SE.getTypeSizeInBits(OperTy) &&
2899              "cannot extend a chained IV");
2900       IRBuilder<> Builder(InsertPt);
2901       IVOper = Builder.CreateTruncOrBitCast(IVOper, OperTy, "lsr.chain");
2902     }
2903     Inc.UserInst->replaceUsesOfWith(Inc.IVOperand, IVOper);
2904     DeadInsts.emplace_back(Inc.IVOperand);
2905   }
2906   // If LSR created a new, wider phi, we may also replace its postinc. We only
2907   // do this if we also found a wide value for the head of the chain.
2908   if (isa<PHINode>(Chain.tailUserInst())) {
2909     for (BasicBlock::iterator I = L->getHeader()->begin();
2910          PHINode *Phi = dyn_cast<PHINode>(I); ++I) {
2911       if (!isCompatibleIVType(Phi, IVSrc))
2912         continue;
2913       Instruction *PostIncV = dyn_cast<Instruction>(
2914         Phi->getIncomingValueForBlock(L->getLoopLatch()));
2915       if (!PostIncV || (SE.getSCEV(PostIncV) != SE.getSCEV(IVSrc)))
2916         continue;
2917       Value *IVOper = IVSrc;
2918       Type *PostIncTy = PostIncV->getType();
2919       if (IVTy != PostIncTy) {
2920         assert(PostIncTy->isPointerTy() && "mixing int/ptr IV types");
2921         IRBuilder<> Builder(L->getLoopLatch()->getTerminator());
2922         Builder.SetCurrentDebugLocation(PostIncV->getDebugLoc());
2923         IVOper = Builder.CreatePointerCast(IVSrc, PostIncTy, "lsr.chain");
2924       }
2925       Phi->replaceUsesOfWith(PostIncV, IVOper);
2926       DeadInsts.emplace_back(PostIncV);
2927     }
2928   }
2929 }
2930 
2931 void LSRInstance::CollectFixupsAndInitialFormulae() {
2932   for (const IVStrideUse &U : IU) {
2933     Instruction *UserInst = U.getUser();
2934     // Skip IV users that are part of profitable IV Chains.
2935     User::op_iterator UseI =
2936         find(UserInst->operands(), U.getOperandValToReplace());
2937     assert(UseI != UserInst->op_end() && "cannot find IV operand");
2938     if (IVIncSet.count(UseI))
2939       continue;
2940 
2941     // Record the uses.
2942     LSRFixup &LF = getNewFixup();
2943     LF.UserInst = UserInst;
2944     LF.OperandValToReplace = U.getOperandValToReplace();
2945     LF.PostIncLoops = U.getPostIncLoops();
2946 
2947     LSRUse::KindType Kind = LSRUse::Basic;
2948     MemAccessTy AccessTy;
2949     if (isAddressUse(LF.UserInst, LF.OperandValToReplace)) {
2950       Kind = LSRUse::Address;
2951       AccessTy = getAccessType(LF.UserInst);
2952     }
2953 
2954     const SCEV *S = IU.getExpr(U);
2955 
2956     // Equality (== and !=) ICmps are special. We can rewrite (i == N) as
2957     // (N - i == 0), and this allows (N - i) to be the expression that we work
2958     // with rather than just N or i, so we can consider the register
2959     // requirements for both N and i at the same time. Limiting this code to
2960     // equality icmps is not a problem because all interesting loops use
2961     // equality icmps, thanks to IndVarSimplify.
2962     if (ICmpInst *CI = dyn_cast<ICmpInst>(LF.UserInst))
2963       if (CI->isEquality()) {
2964         // Swap the operands if needed to put the OperandValToReplace on the
2965         // left, for consistency.
2966         Value *NV = CI->getOperand(1);
2967         if (NV == LF.OperandValToReplace) {
2968           CI->setOperand(1, CI->getOperand(0));
2969           CI->setOperand(0, NV);
2970           NV = CI->getOperand(1);
2971           Changed = true;
2972         }
2973 
2974         // x == y  -->  x - y == 0
2975         const SCEV *N = SE.getSCEV(NV);
2976         if (SE.isLoopInvariant(N, L) && isSafeToExpand(N, SE)) {
2977           // S is normalized, so normalize N before folding it into S
2978           // to keep the result normalized.
2979           N = TransformForPostIncUse(Normalize, N, CI, nullptr,
2980                                      LF.PostIncLoops, SE, DT);
2981           Kind = LSRUse::ICmpZero;
2982           S = SE.getMinusSCEV(N, S);
2983         }
2984 
2985         // -1 and the negations of all interesting strides (except the negation
2986         // of -1) are now also interesting.
2987         for (size_t i = 0, e = Factors.size(); i != e; ++i)
2988           if (Factors[i] != -1)
2989             Factors.insert(-(uint64_t)Factors[i]);
2990         Factors.insert(-1);
2991       }
2992 
2993     // Set up the initial formula for this use.
2994     std::pair<size_t, int64_t> P = getUse(S, Kind, AccessTy);
2995     LF.LUIdx = P.first;
2996     LF.Offset = P.second;
2997     LSRUse &LU = Uses[LF.LUIdx];
2998     LU.AllFixupsOutsideLoop &= LF.isUseFullyOutsideLoop(L);
2999     if (!LU.WidestFixupType ||
3000         SE.getTypeSizeInBits(LU.WidestFixupType) <
3001         SE.getTypeSizeInBits(LF.OperandValToReplace->getType()))
3002       LU.WidestFixupType = LF.OperandValToReplace->getType();
3003 
3004     // If this is the first use of this LSRUse, give it a formula.
3005     if (LU.Formulae.empty()) {
3006       InsertInitialFormula(S, LU, LF.LUIdx);
3007       CountRegisters(LU.Formulae.back(), LF.LUIdx);
3008     }
3009   }
3010 
3011   DEBUG(print_fixups(dbgs()));
3012 }
3013 
3014 /// Insert a formula for the given expression into the given use, separating out
3015 /// loop-variant portions from loop-invariant and loop-computable portions.
3016 void
3017 LSRInstance::InsertInitialFormula(const SCEV *S, LSRUse &LU, size_t LUIdx) {
3018   // Mark uses whose expressions cannot be expanded.
3019   if (!isSafeToExpand(S, SE))
3020     LU.RigidFormula = true;
3021 
3022   Formula F;
3023   F.initialMatch(S, L, SE);
3024   bool Inserted = InsertFormula(LU, LUIdx, F);
3025   assert(Inserted && "Initial formula already exists!"); (void)Inserted;
3026 }
3027 
3028 /// Insert a simple single-register formula for the given expression into the
3029 /// given use.
3030 void
3031 LSRInstance::InsertSupplementalFormula(const SCEV *S,
3032                                        LSRUse &LU, size_t LUIdx) {
3033   Formula F;
3034   F.BaseRegs.push_back(S);
3035   F.HasBaseReg = true;
3036   bool Inserted = InsertFormula(LU, LUIdx, F);
3037   assert(Inserted && "Supplemental formula already exists!"); (void)Inserted;
3038 }
3039 
3040 /// Note which registers are used by the given formula, updating RegUses.
3041 void LSRInstance::CountRegisters(const Formula &F, size_t LUIdx) {
3042   if (F.ScaledReg)
3043     RegUses.countRegister(F.ScaledReg, LUIdx);
3044   for (const SCEV *BaseReg : F.BaseRegs)
3045     RegUses.countRegister(BaseReg, LUIdx);
3046 }
3047 
3048 /// If the given formula has not yet been inserted, add it to the list, and
3049 /// return true. Return false otherwise.
3050 bool LSRInstance::InsertFormula(LSRUse &LU, unsigned LUIdx, const Formula &F) {
3051   // Do not insert formula that we will not be able to expand.
3052   assert(isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, F) &&
3053          "Formula is illegal");
3054   if (!LU.InsertFormula(F))
3055     return false;
3056 
3057   CountRegisters(F, LUIdx);
3058   return true;
3059 }
3060 
3061 /// Check for other uses of loop-invariant values which we're tracking. These
3062 /// other uses will pin these values in registers, making them less profitable
3063 /// for elimination.
3064 /// TODO: This currently misses non-constant addrec step registers.
3065 /// TODO: Should this give more weight to users inside the loop?
3066 void
3067 LSRInstance::CollectLoopInvariantFixupsAndFormulae() {
3068   SmallVector<const SCEV *, 8> Worklist(RegUses.begin(), RegUses.end());
3069   SmallPtrSet<const SCEV *, 32> Visited;
3070 
3071   while (!Worklist.empty()) {
3072     const SCEV *S = Worklist.pop_back_val();
3073 
3074     // Don't process the same SCEV twice
3075     if (!Visited.insert(S).second)
3076       continue;
3077 
3078     if (const SCEVNAryExpr *N = dyn_cast<SCEVNAryExpr>(S))
3079       Worklist.append(N->op_begin(), N->op_end());
3080     else if (const SCEVCastExpr *C = dyn_cast<SCEVCastExpr>(S))
3081       Worklist.push_back(C->getOperand());
3082     else if (const SCEVUDivExpr *D = dyn_cast<SCEVUDivExpr>(S)) {
3083       Worklist.push_back(D->getLHS());
3084       Worklist.push_back(D->getRHS());
3085     } else if (const SCEVUnknown *US = dyn_cast<SCEVUnknown>(S)) {
3086       const Value *V = US->getValue();
3087       if (const Instruction *Inst = dyn_cast<Instruction>(V)) {
3088         // Look for instructions defined outside the loop.
3089         if (L->contains(Inst)) continue;
3090       } else if (isa<UndefValue>(V))
3091         // Undef doesn't have a live range, so it doesn't matter.
3092         continue;
3093       for (const Use &U : V->uses()) {
3094         const Instruction *UserInst = dyn_cast<Instruction>(U.getUser());
3095         // Ignore non-instructions.
3096         if (!UserInst)
3097           continue;
3098         // Ignore instructions in other functions (as can happen with
3099         // Constants).
3100         if (UserInst->getParent()->getParent() != L->getHeader()->getParent())
3101           continue;
3102         // Ignore instructions not dominated by the loop.
3103         const BasicBlock *UseBB = !isa<PHINode>(UserInst) ?
3104           UserInst->getParent() :
3105           cast<PHINode>(UserInst)->getIncomingBlock(
3106             PHINode::getIncomingValueNumForOperand(U.getOperandNo()));
3107         if (!DT.dominates(L->getHeader(), UseBB))
3108           continue;
3109         // Don't bother if the instruction is in a BB which ends in an EHPad.
3110         if (UseBB->getTerminator()->isEHPad())
3111           continue;
3112         // Ignore uses which are part of other SCEV expressions, to avoid
3113         // analyzing them multiple times.
3114         if (SE.isSCEVable(UserInst->getType())) {
3115           const SCEV *UserS = SE.getSCEV(const_cast<Instruction *>(UserInst));
3116           // If the user is a no-op, look through to its uses.
3117           if (!isa<SCEVUnknown>(UserS))
3118             continue;
3119           if (UserS == US) {
3120             Worklist.push_back(
3121               SE.getUnknown(const_cast<Instruction *>(UserInst)));
3122             continue;
3123           }
3124         }
3125         // Ignore icmp instructions which are already being analyzed.
3126         if (const ICmpInst *ICI = dyn_cast<ICmpInst>(UserInst)) {
3127           unsigned OtherIdx = !U.getOperandNo();
3128           Value *OtherOp = const_cast<Value *>(ICI->getOperand(OtherIdx));
3129           if (SE.hasComputableLoopEvolution(SE.getSCEV(OtherOp), L))
3130             continue;
3131         }
3132 
3133         LSRFixup &LF = getNewFixup();
3134         LF.UserInst = const_cast<Instruction *>(UserInst);
3135         LF.OperandValToReplace = U;
3136         std::pair<size_t, int64_t> P = getUse(
3137             S, LSRUse::Basic, MemAccessTy());
3138         LF.LUIdx = P.first;
3139         LF.Offset = P.second;
3140         LSRUse &LU = Uses[LF.LUIdx];
3141         LU.AllFixupsOutsideLoop &= LF.isUseFullyOutsideLoop(L);
3142         if (!LU.WidestFixupType ||
3143             SE.getTypeSizeInBits(LU.WidestFixupType) <
3144             SE.getTypeSizeInBits(LF.OperandValToReplace->getType()))
3145           LU.WidestFixupType = LF.OperandValToReplace->getType();
3146         InsertSupplementalFormula(US, LU, LF.LUIdx);
3147         CountRegisters(LU.Formulae.back(), Uses.size() - 1);
3148         break;
3149       }
3150     }
3151   }
3152 }
3153 
3154 /// Split S into subexpressions which can be pulled out into separate
3155 /// registers. If C is non-null, multiply each subexpression by C.
3156 ///
3157 /// Return remainder expression after factoring the subexpressions captured by
3158 /// Ops. If Ops is complete, return NULL.
3159 static const SCEV *CollectSubexprs(const SCEV *S, const SCEVConstant *C,
3160                                    SmallVectorImpl<const SCEV *> &Ops,
3161                                    const Loop *L,
3162                                    ScalarEvolution &SE,
3163                                    unsigned Depth = 0) {
3164   // Arbitrarily cap recursion to protect compile time.
3165   if (Depth >= 3)
3166     return S;
3167 
3168   if (const SCEVAddExpr *Add = dyn_cast<SCEVAddExpr>(S)) {
3169     // Break out add operands.
3170     for (const SCEV *S : Add->operands()) {
3171       const SCEV *Remainder = CollectSubexprs(S, C, Ops, L, SE, Depth+1);
3172       if (Remainder)
3173         Ops.push_back(C ? SE.getMulExpr(C, Remainder) : Remainder);
3174     }
3175     return nullptr;
3176   } else if (const SCEVAddRecExpr *AR = dyn_cast<SCEVAddRecExpr>(S)) {
3177     // Split a non-zero base out of an addrec.
3178     if (AR->getStart()->isZero())
3179       return S;
3180 
3181     const SCEV *Remainder = CollectSubexprs(AR->getStart(),
3182                                             C, Ops, L, SE, Depth+1);
3183     // Split the non-zero AddRec unless it is part of a nested recurrence that
3184     // does not pertain to this loop.
3185     if (Remainder && (AR->getLoop() == L || !isa<SCEVAddRecExpr>(Remainder))) {
3186       Ops.push_back(C ? SE.getMulExpr(C, Remainder) : Remainder);
3187       Remainder = nullptr;
3188     }
3189     if (Remainder != AR->getStart()) {
3190       if (!Remainder)
3191         Remainder = SE.getConstant(AR->getType(), 0);
3192       return SE.getAddRecExpr(Remainder,
3193                               AR->getStepRecurrence(SE),
3194                               AR->getLoop(),
3195                               //FIXME: AR->getNoWrapFlags(SCEV::FlagNW)
3196                               SCEV::FlagAnyWrap);
3197     }
3198   } else if (const SCEVMulExpr *Mul = dyn_cast<SCEVMulExpr>(S)) {
3199     // Break (C * (a + b + c)) into C*a + C*b + C*c.
3200     if (Mul->getNumOperands() != 2)
3201       return S;
3202     if (const SCEVConstant *Op0 =
3203         dyn_cast<SCEVConstant>(Mul->getOperand(0))) {
3204       C = C ? cast<SCEVConstant>(SE.getMulExpr(C, Op0)) : Op0;
3205       const SCEV *Remainder =
3206         CollectSubexprs(Mul->getOperand(1), C, Ops, L, SE, Depth+1);
3207       if (Remainder)
3208         Ops.push_back(SE.getMulExpr(C, Remainder));
3209       return nullptr;
3210     }
3211   }
3212   return S;
3213 }
3214 
3215 /// \brief Helper function for LSRInstance::GenerateReassociations.
3216 void LSRInstance::GenerateReassociationsImpl(LSRUse &LU, unsigned LUIdx,
3217                                              const Formula &Base,
3218                                              unsigned Depth, size_t Idx,
3219                                              bool IsScaledReg) {
3220   const SCEV *BaseReg = IsScaledReg ? Base.ScaledReg : Base.BaseRegs[Idx];
3221   SmallVector<const SCEV *, 8> AddOps;
3222   const SCEV *Remainder = CollectSubexprs(BaseReg, nullptr, AddOps, L, SE);
3223   if (Remainder)
3224     AddOps.push_back(Remainder);
3225 
3226   if (AddOps.size() == 1)
3227     return;
3228 
3229   for (SmallVectorImpl<const SCEV *>::const_iterator J = AddOps.begin(),
3230                                                      JE = AddOps.end();
3231        J != JE; ++J) {
3232 
3233     // Loop-variant "unknown" values are uninteresting; we won't be able to
3234     // do anything meaningful with them.
3235     if (isa<SCEVUnknown>(*J) && !SE.isLoopInvariant(*J, L))
3236       continue;
3237 
3238     // Don't pull a constant into a register if the constant could be folded
3239     // into an immediate field.
3240     if (isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind,
3241                          LU.AccessTy, *J, Base.getNumRegs() > 1))
3242       continue;
3243 
3244     // Collect all operands except *J.
3245     SmallVector<const SCEV *, 8> InnerAddOps(
3246         ((const SmallVector<const SCEV *, 8> &)AddOps).begin(), J);
3247     InnerAddOps.append(std::next(J),
3248                        ((const SmallVector<const SCEV *, 8> &)AddOps).end());
3249 
3250     // Don't leave just a constant behind in a register if the constant could
3251     // be folded into an immediate field.
3252     if (InnerAddOps.size() == 1 &&
3253         isAlwaysFoldable(TTI, SE, LU.MinOffset, LU.MaxOffset, LU.Kind,
3254                          LU.AccessTy, InnerAddOps[0], Base.getNumRegs() > 1))
3255       continue;
3256 
3257     const SCEV *InnerSum = SE.getAddExpr(InnerAddOps);
3258     if (InnerSum->isZero())
3259       continue;
3260     Formula F = Base;
3261 
3262     // Add the remaining pieces of the add back into the new formula.
3263     const SCEVConstant *InnerSumSC = dyn_cast<SCEVConstant>(InnerSum);
3264     if (InnerSumSC && SE.getTypeSizeInBits(InnerSumSC->getType()) <= 64 &&
3265         TTI.isLegalAddImmediate((uint64_t)F.UnfoldedOffset +
3266                                 InnerSumSC->getValue()->getZExtValue())) {
3267       F.UnfoldedOffset =
3268           (uint64_t)F.UnfoldedOffset + InnerSumSC->getValue()->getZExtValue();
3269       if (IsScaledReg)
3270         F.ScaledReg = nullptr;
3271       else
3272         F.BaseRegs.erase(F.BaseRegs.begin() + Idx);
3273     } else if (IsScaledReg)
3274       F.ScaledReg = InnerSum;
3275     else
3276       F.BaseRegs[Idx] = InnerSum;
3277 
3278     // Add J as its own register, or an unfolded immediate.
3279     const SCEVConstant *SC = dyn_cast<SCEVConstant>(*J);
3280     if (SC && SE.getTypeSizeInBits(SC->getType()) <= 64 &&
3281         TTI.isLegalAddImmediate((uint64_t)F.UnfoldedOffset +
3282                                 SC->getValue()->getZExtValue()))
3283       F.UnfoldedOffset =
3284           (uint64_t)F.UnfoldedOffset + SC->getValue()->getZExtValue();
3285     else
3286       F.BaseRegs.push_back(*J);
3287     // We may have changed the number of register in base regs, adjust the
3288     // formula accordingly.
3289     F.canonicalize();
3290 
3291     if (InsertFormula(LU, LUIdx, F))
3292       // If that formula hadn't been seen before, recurse to find more like
3293       // it.
3294       GenerateReassociations(LU, LUIdx, LU.Formulae.back(), Depth + 1);
3295   }
3296 }
3297 
3298 /// Split out subexpressions from adds and the bases of addrecs.
3299 void LSRInstance::GenerateReassociations(LSRUse &LU, unsigned LUIdx,
3300                                          Formula Base, unsigned Depth) {
3301   assert(Base.isCanonical() && "Input must be in the canonical form");
3302   // Arbitrarily cap recursion to protect compile time.
3303   if (Depth >= 3)
3304     return;
3305 
3306   for (size_t i = 0, e = Base.BaseRegs.size(); i != e; ++i)
3307     GenerateReassociationsImpl(LU, LUIdx, Base, Depth, i);
3308 
3309   if (Base.Scale == 1)
3310     GenerateReassociationsImpl(LU, LUIdx, Base, Depth,
3311                                /* Idx */ -1, /* IsScaledReg */ true);
3312 }
3313 
3314 ///  Generate a formula consisting of all of the loop-dominating registers added
3315 /// into a single register.
3316 void LSRInstance::GenerateCombinations(LSRUse &LU, unsigned LUIdx,
3317                                        Formula Base) {
3318   // This method is only interesting on a plurality of registers.
3319   if (Base.BaseRegs.size() + (Base.Scale == 1) <= 1)
3320     return;
3321 
3322   // Flatten the representation, i.e., reg1 + 1*reg2 => reg1 + reg2, before
3323   // processing the formula.
3324   Base.unscale();
3325   Formula F = Base;
3326   F.BaseRegs.clear();
3327   SmallVector<const SCEV *, 4> Ops;
3328   for (const SCEV *BaseReg : Base.BaseRegs) {
3329     if (SE.properlyDominates(BaseReg, L->getHeader()) &&
3330         !SE.hasComputableLoopEvolution(BaseReg, L))
3331       Ops.push_back(BaseReg);
3332     else
3333       F.BaseRegs.push_back(BaseReg);
3334   }
3335   if (Ops.size() > 1) {
3336     const SCEV *Sum = SE.getAddExpr(Ops);
3337     // TODO: If Sum is zero, it probably means ScalarEvolution missed an
3338     // opportunity to fold something. For now, just ignore such cases
3339     // rather than proceed with zero in a register.
3340     if (!Sum->isZero()) {
3341       F.BaseRegs.push_back(Sum);
3342       F.canonicalize();
3343       (void)InsertFormula(LU, LUIdx, F);
3344     }
3345   }
3346 }
3347 
3348 /// \brief Helper function for LSRInstance::GenerateSymbolicOffsets.
3349 void LSRInstance::GenerateSymbolicOffsetsImpl(LSRUse &LU, unsigned LUIdx,
3350                                               const Formula &Base, size_t Idx,
3351                                               bool IsScaledReg) {
3352   const SCEV *G = IsScaledReg ? Base.ScaledReg : Base.BaseRegs[Idx];
3353   GlobalValue *GV = ExtractSymbol(G, SE);
3354   if (G->isZero() || !GV)
3355     return;
3356   Formula F = Base;
3357   F.BaseGV = GV;
3358   if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, F))
3359     return;
3360   if (IsScaledReg)
3361     F.ScaledReg = G;
3362   else
3363     F.BaseRegs[Idx] = G;
3364   (void)InsertFormula(LU, LUIdx, F);
3365 }
3366 
3367 /// Generate reuse formulae using symbolic offsets.
3368 void LSRInstance::GenerateSymbolicOffsets(LSRUse &LU, unsigned LUIdx,
3369                                           Formula Base) {
3370   // We can't add a symbolic offset if the address already contains one.
3371   if (Base.BaseGV) return;
3372 
3373   for (size_t i = 0, e = Base.BaseRegs.size(); i != e; ++i)
3374     GenerateSymbolicOffsetsImpl(LU, LUIdx, Base, i);
3375   if (Base.Scale == 1)
3376     GenerateSymbolicOffsetsImpl(LU, LUIdx, Base, /* Idx */ -1,
3377                                 /* IsScaledReg */ true);
3378 }
3379 
3380 /// \brief Helper function for LSRInstance::GenerateConstantOffsets.
3381 void LSRInstance::GenerateConstantOffsetsImpl(
3382     LSRUse &LU, unsigned LUIdx, const Formula &Base,
3383     const SmallVectorImpl<int64_t> &Worklist, size_t Idx, bool IsScaledReg) {
3384   const SCEV *G = IsScaledReg ? Base.ScaledReg : Base.BaseRegs[Idx];
3385   for (int64_t Offset : Worklist) {
3386     Formula F = Base;
3387     F.BaseOffset = (uint64_t)Base.BaseOffset - Offset;
3388     if (isLegalUse(TTI, LU.MinOffset - Offset, LU.MaxOffset - Offset, LU.Kind,
3389                    LU.AccessTy, F)) {
3390       // Add the offset to the base register.
3391       const SCEV *NewG = SE.getAddExpr(SE.getConstant(G->getType(), Offset), G);
3392       // If it cancelled out, drop the base register, otherwise update it.
3393       if (NewG->isZero()) {
3394         if (IsScaledReg) {
3395           F.Scale = 0;
3396           F.ScaledReg = nullptr;
3397         } else
3398           F.deleteBaseReg(F.BaseRegs[Idx]);
3399         F.canonicalize();
3400       } else if (IsScaledReg)
3401         F.ScaledReg = NewG;
3402       else
3403         F.BaseRegs[Idx] = NewG;
3404 
3405       (void)InsertFormula(LU, LUIdx, F);
3406     }
3407   }
3408 
3409   int64_t Imm = ExtractImmediate(G, SE);
3410   if (G->isZero() || Imm == 0)
3411     return;
3412   Formula F = Base;
3413   F.BaseOffset = (uint64_t)F.BaseOffset + Imm;
3414   if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy, F))
3415     return;
3416   if (IsScaledReg)
3417     F.ScaledReg = G;
3418   else
3419     F.BaseRegs[Idx] = G;
3420   (void)InsertFormula(LU, LUIdx, F);
3421 }
3422 
3423 /// GenerateConstantOffsets - Generate reuse formulae using symbolic offsets.
3424 void LSRInstance::GenerateConstantOffsets(LSRUse &LU, unsigned LUIdx,
3425                                           Formula Base) {
3426   // TODO: For now, just add the min and max offset, because it usually isn't
3427   // worthwhile looking at everything inbetween.
3428   SmallVector<int64_t, 2> Worklist;
3429   Worklist.push_back(LU.MinOffset);
3430   if (LU.MaxOffset != LU.MinOffset)
3431     Worklist.push_back(LU.MaxOffset);
3432 
3433   for (size_t i = 0, e = Base.BaseRegs.size(); i != e; ++i)
3434     GenerateConstantOffsetsImpl(LU, LUIdx, Base, Worklist, i);
3435   if (Base.Scale == 1)
3436     GenerateConstantOffsetsImpl(LU, LUIdx, Base, Worklist, /* Idx */ -1,
3437                                 /* IsScaledReg */ true);
3438 }
3439 
3440 /// For ICmpZero, check to see if we can scale up the comparison. For example, x
3441 /// == y -> x*c == y*c.
3442 void LSRInstance::GenerateICmpZeroScales(LSRUse &LU, unsigned LUIdx,
3443                                          Formula Base) {
3444   if (LU.Kind != LSRUse::ICmpZero) return;
3445 
3446   // Determine the integer type for the base formula.
3447   Type *IntTy = Base.getType();
3448   if (!IntTy) return;
3449   if (SE.getTypeSizeInBits(IntTy) > 64) return;
3450 
3451   // Don't do this if there is more than one offset.
3452   if (LU.MinOffset != LU.MaxOffset) return;
3453 
3454   assert(!Base.BaseGV && "ICmpZero use is not legal!");
3455 
3456   // Check each interesting stride.
3457   for (int64_t Factor : Factors) {
3458     // Check that the multiplication doesn't overflow.
3459     if (Base.BaseOffset == INT64_MIN && Factor == -1)
3460       continue;
3461     int64_t NewBaseOffset = (uint64_t)Base.BaseOffset * Factor;
3462     if (NewBaseOffset / Factor != Base.BaseOffset)
3463       continue;
3464     // If the offset will be truncated at this use, check that it is in bounds.
3465     if (!IntTy->isPointerTy() &&
3466         !ConstantInt::isValueValidForType(IntTy, NewBaseOffset))
3467       continue;
3468 
3469     // Check that multiplying with the use offset doesn't overflow.
3470     int64_t Offset = LU.MinOffset;
3471     if (Offset == INT64_MIN && Factor == -1)
3472       continue;
3473     Offset = (uint64_t)Offset * Factor;
3474     if (Offset / Factor != LU.MinOffset)
3475       continue;
3476     // If the offset will be truncated at this use, check that it is in bounds.
3477     if (!IntTy->isPointerTy() &&
3478         !ConstantInt::isValueValidForType(IntTy, Offset))
3479       continue;
3480 
3481     Formula F = Base;
3482     F.BaseOffset = NewBaseOffset;
3483 
3484     // Check that this scale is legal.
3485     if (!isLegalUse(TTI, Offset, Offset, LU.Kind, LU.AccessTy, F))
3486       continue;
3487 
3488     // Compensate for the use having MinOffset built into it.
3489     F.BaseOffset = (uint64_t)F.BaseOffset + Offset - LU.MinOffset;
3490 
3491     const SCEV *FactorS = SE.getConstant(IntTy, Factor);
3492 
3493     // Check that multiplying with each base register doesn't overflow.
3494     for (size_t i = 0, e = F.BaseRegs.size(); i != e; ++i) {
3495       F.BaseRegs[i] = SE.getMulExpr(F.BaseRegs[i], FactorS);
3496       if (getExactSDiv(F.BaseRegs[i], FactorS, SE) != Base.BaseRegs[i])
3497         goto next;
3498     }
3499 
3500     // Check that multiplying with the scaled register doesn't overflow.
3501     if (F.ScaledReg) {
3502       F.ScaledReg = SE.getMulExpr(F.ScaledReg, FactorS);
3503       if (getExactSDiv(F.ScaledReg, FactorS, SE) != Base.ScaledReg)
3504         continue;
3505     }
3506 
3507     // Check that multiplying with the unfolded offset doesn't overflow.
3508     if (F.UnfoldedOffset != 0) {
3509       if (F.UnfoldedOffset == INT64_MIN && Factor == -1)
3510         continue;
3511       F.UnfoldedOffset = (uint64_t)F.UnfoldedOffset * Factor;
3512       if (F.UnfoldedOffset / Factor != Base.UnfoldedOffset)
3513         continue;
3514       // If the offset will be truncated, check that it is in bounds.
3515       if (!IntTy->isPointerTy() &&
3516           !ConstantInt::isValueValidForType(IntTy, F.UnfoldedOffset))
3517         continue;
3518     }
3519 
3520     // If we make it here and it's legal, add it.
3521     (void)InsertFormula(LU, LUIdx, F);
3522   next:;
3523   }
3524 }
3525 
3526 /// Generate stride factor reuse formulae by making use of scaled-offset address
3527 /// modes, for example.
3528 void LSRInstance::GenerateScales(LSRUse &LU, unsigned LUIdx, Formula Base) {
3529   // Determine the integer type for the base formula.
3530   Type *IntTy = Base.getType();
3531   if (!IntTy) return;
3532 
3533   // If this Formula already has a scaled register, we can't add another one.
3534   // Try to unscale the formula to generate a better scale.
3535   if (Base.Scale != 0 && !Base.unscale())
3536     return;
3537 
3538   assert(Base.Scale == 0 && "unscale did not did its job!");
3539 
3540   // Check each interesting stride.
3541   for (int64_t Factor : Factors) {
3542     Base.Scale = Factor;
3543     Base.HasBaseReg = Base.BaseRegs.size() > 1;
3544     // Check whether this scale is going to be legal.
3545     if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
3546                     Base)) {
3547       // As a special-case, handle special out-of-loop Basic users specially.
3548       // TODO: Reconsider this special case.
3549       if (LU.Kind == LSRUse::Basic &&
3550           isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LSRUse::Special,
3551                      LU.AccessTy, Base) &&
3552           LU.AllFixupsOutsideLoop)
3553         LU.Kind = LSRUse::Special;
3554       else
3555         continue;
3556     }
3557     // For an ICmpZero, negating a solitary base register won't lead to
3558     // new solutions.
3559     if (LU.Kind == LSRUse::ICmpZero &&
3560         !Base.HasBaseReg && Base.BaseOffset == 0 && !Base.BaseGV)
3561       continue;
3562     // For each addrec base reg, apply the scale, if possible.
3563     for (size_t i = 0, e = Base.BaseRegs.size(); i != e; ++i)
3564       if (const SCEVAddRecExpr *AR =
3565             dyn_cast<SCEVAddRecExpr>(Base.BaseRegs[i])) {
3566         const SCEV *FactorS = SE.getConstant(IntTy, Factor);
3567         if (FactorS->isZero())
3568           continue;
3569         // Divide out the factor, ignoring high bits, since we'll be
3570         // scaling the value back up in the end.
3571         if (const SCEV *Quotient = getExactSDiv(AR, FactorS, SE, true)) {
3572           // TODO: This could be optimized to avoid all the copying.
3573           Formula F = Base;
3574           F.ScaledReg = Quotient;
3575           F.deleteBaseReg(F.BaseRegs[i]);
3576           // The canonical representation of 1*reg is reg, which is already in
3577           // Base. In that case, do not try to insert the formula, it will be
3578           // rejected anyway.
3579           if (F.Scale == 1 && F.BaseRegs.empty())
3580             continue;
3581           (void)InsertFormula(LU, LUIdx, F);
3582         }
3583       }
3584   }
3585 }
3586 
3587 /// Generate reuse formulae from different IV types.
3588 void LSRInstance::GenerateTruncates(LSRUse &LU, unsigned LUIdx, Formula Base) {
3589   // Don't bother truncating symbolic values.
3590   if (Base.BaseGV) return;
3591 
3592   // Determine the integer type for the base formula.
3593   Type *DstTy = Base.getType();
3594   if (!DstTy) return;
3595   DstTy = SE.getEffectiveSCEVType(DstTy);
3596 
3597   for (Type *SrcTy : Types) {
3598     if (SrcTy != DstTy && TTI.isTruncateFree(SrcTy, DstTy)) {
3599       Formula F = Base;
3600 
3601       if (F.ScaledReg) F.ScaledReg = SE.getAnyExtendExpr(F.ScaledReg, SrcTy);
3602       for (const SCEV *&BaseReg : F.BaseRegs)
3603         BaseReg = SE.getAnyExtendExpr(BaseReg, SrcTy);
3604 
3605       // TODO: This assumes we've done basic processing on all uses and
3606       // have an idea what the register usage is.
3607       if (!F.hasRegsUsedByUsesOtherThan(LUIdx, RegUses))
3608         continue;
3609 
3610       (void)InsertFormula(LU, LUIdx, F);
3611     }
3612   }
3613 }
3614 
3615 namespace {
3616 
3617 /// Helper class for GenerateCrossUseConstantOffsets. It's used to defer
3618 /// modifications so that the search phase doesn't have to worry about the data
3619 /// structures moving underneath it.
3620 struct WorkItem {
3621   size_t LUIdx;
3622   int64_t Imm;
3623   const SCEV *OrigReg;
3624 
3625   WorkItem(size_t LI, int64_t I, const SCEV *R)
3626     : LUIdx(LI), Imm(I), OrigReg(R) {}
3627 
3628   void print(raw_ostream &OS) const;
3629   void dump() const;
3630 };
3631 
3632 }
3633 
3634 void WorkItem::print(raw_ostream &OS) const {
3635   OS << "in formulae referencing " << *OrigReg << " in use " << LUIdx
3636      << " , add offset " << Imm;
3637 }
3638 
3639 LLVM_DUMP_METHOD
3640 void WorkItem::dump() const {
3641   print(errs()); errs() << '\n';
3642 }
3643 
3644 /// Look for registers which are a constant distance apart and try to form reuse
3645 /// opportunities between them.
3646 void LSRInstance::GenerateCrossUseConstantOffsets() {
3647   // Group the registers by their value without any added constant offset.
3648   typedef std::map<int64_t, const SCEV *> ImmMapTy;
3649   DenseMap<const SCEV *, ImmMapTy> Map;
3650   DenseMap<const SCEV *, SmallBitVector> UsedByIndicesMap;
3651   SmallVector<const SCEV *, 8> Sequence;
3652   for (const SCEV *Use : RegUses) {
3653     const SCEV *Reg = Use; // Make a copy for ExtractImmediate to modify.
3654     int64_t Imm = ExtractImmediate(Reg, SE);
3655     auto Pair = Map.insert(std::make_pair(Reg, ImmMapTy()));
3656     if (Pair.second)
3657       Sequence.push_back(Reg);
3658     Pair.first->second.insert(std::make_pair(Imm, Use));
3659     UsedByIndicesMap[Reg] |= RegUses.getUsedByIndices(Use);
3660   }
3661 
3662   // Now examine each set of registers with the same base value. Build up
3663   // a list of work to do and do the work in a separate step so that we're
3664   // not adding formulae and register counts while we're searching.
3665   SmallVector<WorkItem, 32> WorkItems;
3666   SmallSet<std::pair<size_t, int64_t>, 32> UniqueItems;
3667   for (const SCEV *Reg : Sequence) {
3668     const ImmMapTy &Imms = Map.find(Reg)->second;
3669 
3670     // It's not worthwhile looking for reuse if there's only one offset.
3671     if (Imms.size() == 1)
3672       continue;
3673 
3674     DEBUG(dbgs() << "Generating cross-use offsets for " << *Reg << ':';
3675           for (const auto &Entry : Imms)
3676             dbgs() << ' ' << Entry.first;
3677           dbgs() << '\n');
3678 
3679     // Examine each offset.
3680     for (ImmMapTy::const_iterator J = Imms.begin(), JE = Imms.end();
3681          J != JE; ++J) {
3682       const SCEV *OrigReg = J->second;
3683 
3684       int64_t JImm = J->first;
3685       const SmallBitVector &UsedByIndices = RegUses.getUsedByIndices(OrigReg);
3686 
3687       if (!isa<SCEVConstant>(OrigReg) &&
3688           UsedByIndicesMap[Reg].count() == 1) {
3689         DEBUG(dbgs() << "Skipping cross-use reuse for " << *OrigReg << '\n');
3690         continue;
3691       }
3692 
3693       // Conservatively examine offsets between this orig reg a few selected
3694       // other orig regs.
3695       ImmMapTy::const_iterator OtherImms[] = {
3696         Imms.begin(), std::prev(Imms.end()),
3697         Imms.lower_bound((Imms.begin()->first + std::prev(Imms.end())->first) /
3698                          2)
3699       };
3700       for (size_t i = 0, e = array_lengthof(OtherImms); i != e; ++i) {
3701         ImmMapTy::const_iterator M = OtherImms[i];
3702         if (M == J || M == JE) continue;
3703 
3704         // Compute the difference between the two.
3705         int64_t Imm = (uint64_t)JImm - M->first;
3706         for (int LUIdx = UsedByIndices.find_first(); LUIdx != -1;
3707              LUIdx = UsedByIndices.find_next(LUIdx))
3708           // Make a memo of this use, offset, and register tuple.
3709           if (UniqueItems.insert(std::make_pair(LUIdx, Imm)).second)
3710             WorkItems.push_back(WorkItem(LUIdx, Imm, OrigReg));
3711       }
3712     }
3713   }
3714 
3715   Map.clear();
3716   Sequence.clear();
3717   UsedByIndicesMap.clear();
3718   UniqueItems.clear();
3719 
3720   // Now iterate through the worklist and add new formulae.
3721   for (const WorkItem &WI : WorkItems) {
3722     size_t LUIdx = WI.LUIdx;
3723     LSRUse &LU = Uses[LUIdx];
3724     int64_t Imm = WI.Imm;
3725     const SCEV *OrigReg = WI.OrigReg;
3726 
3727     Type *IntTy = SE.getEffectiveSCEVType(OrigReg->getType());
3728     const SCEV *NegImmS = SE.getSCEV(ConstantInt::get(IntTy, -(uint64_t)Imm));
3729     unsigned BitWidth = SE.getTypeSizeInBits(IntTy);
3730 
3731     // TODO: Use a more targeted data structure.
3732     for (size_t L = 0, LE = LU.Formulae.size(); L != LE; ++L) {
3733       Formula F = LU.Formulae[L];
3734       // FIXME: The code for the scaled and unscaled registers looks
3735       // very similar but slightly different. Investigate if they
3736       // could be merged. That way, we would not have to unscale the
3737       // Formula.
3738       F.unscale();
3739       // Use the immediate in the scaled register.
3740       if (F.ScaledReg == OrigReg) {
3741         int64_t Offset = (uint64_t)F.BaseOffset + Imm * (uint64_t)F.Scale;
3742         // Don't create 50 + reg(-50).
3743         if (F.referencesReg(SE.getSCEV(
3744                    ConstantInt::get(IntTy, -(uint64_t)Offset))))
3745           continue;
3746         Formula NewF = F;
3747         NewF.BaseOffset = Offset;
3748         if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
3749                         NewF))
3750           continue;
3751         NewF.ScaledReg = SE.getAddExpr(NegImmS, NewF.ScaledReg);
3752 
3753         // If the new scale is a constant in a register, and adding the constant
3754         // value to the immediate would produce a value closer to zero than the
3755         // immediate itself, then the formula isn't worthwhile.
3756         if (const SCEVConstant *C = dyn_cast<SCEVConstant>(NewF.ScaledReg))
3757           if (C->getValue()->isNegative() != (NewF.BaseOffset < 0) &&
3758               (C->getAPInt().abs() * APInt(BitWidth, F.Scale))
3759                   .ule(std::abs(NewF.BaseOffset)))
3760             continue;
3761 
3762         // OK, looks good.
3763         NewF.canonicalize();
3764         (void)InsertFormula(LU, LUIdx, NewF);
3765       } else {
3766         // Use the immediate in a base register.
3767         for (size_t N = 0, NE = F.BaseRegs.size(); N != NE; ++N) {
3768           const SCEV *BaseReg = F.BaseRegs[N];
3769           if (BaseReg != OrigReg)
3770             continue;
3771           Formula NewF = F;
3772           NewF.BaseOffset = (uint64_t)NewF.BaseOffset + Imm;
3773           if (!isLegalUse(TTI, LU.MinOffset, LU.MaxOffset,
3774                           LU.Kind, LU.AccessTy, NewF)) {
3775             if (!TTI.isLegalAddImmediate((uint64_t)NewF.UnfoldedOffset + Imm))
3776               continue;
3777             NewF = F;
3778             NewF.UnfoldedOffset = (uint64_t)NewF.UnfoldedOffset + Imm;
3779           }
3780           NewF.BaseRegs[N] = SE.getAddExpr(NegImmS, BaseReg);
3781 
3782           // If the new formula has a constant in a register, and adding the
3783           // constant value to the immediate would produce a value closer to
3784           // zero than the immediate itself, then the formula isn't worthwhile.
3785           for (const SCEV *NewReg : NewF.BaseRegs)
3786             if (const SCEVConstant *C = dyn_cast<SCEVConstant>(NewReg))
3787               if ((C->getAPInt() + NewF.BaseOffset)
3788                       .abs()
3789                       .slt(std::abs(NewF.BaseOffset)) &&
3790                   (C->getAPInt() + NewF.BaseOffset).countTrailingZeros() >=
3791                       countTrailingZeros<uint64_t>(NewF.BaseOffset))
3792                 goto skip_formula;
3793 
3794           // Ok, looks good.
3795           NewF.canonicalize();
3796           (void)InsertFormula(LU, LUIdx, NewF);
3797           break;
3798         skip_formula:;
3799         }
3800       }
3801     }
3802   }
3803 }
3804 
3805 /// Generate formulae for each use.
3806 void
3807 LSRInstance::GenerateAllReuseFormulae() {
3808   // This is split into multiple loops so that hasRegsUsedByUsesOtherThan
3809   // queries are more precise.
3810   for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3811     LSRUse &LU = Uses[LUIdx];
3812     for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3813       GenerateReassociations(LU, LUIdx, LU.Formulae[i]);
3814     for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3815       GenerateCombinations(LU, LUIdx, LU.Formulae[i]);
3816   }
3817   for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3818     LSRUse &LU = Uses[LUIdx];
3819     for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3820       GenerateSymbolicOffsets(LU, LUIdx, LU.Formulae[i]);
3821     for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3822       GenerateConstantOffsets(LU, LUIdx, LU.Formulae[i]);
3823     for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3824       GenerateICmpZeroScales(LU, LUIdx, LU.Formulae[i]);
3825     for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3826       GenerateScales(LU, LUIdx, LU.Formulae[i]);
3827   }
3828   for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3829     LSRUse &LU = Uses[LUIdx];
3830     for (size_t i = 0, f = LU.Formulae.size(); i != f; ++i)
3831       GenerateTruncates(LU, LUIdx, LU.Formulae[i]);
3832   }
3833 
3834   GenerateCrossUseConstantOffsets();
3835 
3836   DEBUG(dbgs() << "\n"
3837                   "After generating reuse formulae:\n";
3838         print_uses(dbgs()));
3839 }
3840 
3841 /// If there are multiple formulae with the same set of registers used
3842 /// by other uses, pick the best one and delete the others.
3843 void LSRInstance::FilterOutUndesirableDedicatedRegisters() {
3844   DenseSet<const SCEV *> VisitedRegs;
3845   SmallPtrSet<const SCEV *, 16> Regs;
3846   SmallPtrSet<const SCEV *, 16> LoserRegs;
3847 #ifndef NDEBUG
3848   bool ChangedFormulae = false;
3849 #endif
3850 
3851   // Collect the best formula for each unique set of shared registers. This
3852   // is reset for each use.
3853   typedef DenseMap<SmallVector<const SCEV *, 4>, size_t, UniquifierDenseMapInfo>
3854     BestFormulaeTy;
3855   BestFormulaeTy BestFormulae;
3856 
3857   for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3858     LSRUse &LU = Uses[LUIdx];
3859     DEBUG(dbgs() << "Filtering for use "; LU.print(dbgs()); dbgs() << '\n');
3860 
3861     bool Any = false;
3862     for (size_t FIdx = 0, NumForms = LU.Formulae.size();
3863          FIdx != NumForms; ++FIdx) {
3864       Formula &F = LU.Formulae[FIdx];
3865 
3866       // Some formulas are instant losers. For example, they may depend on
3867       // nonexistent AddRecs from other loops. These need to be filtered
3868       // immediately, otherwise heuristics could choose them over others leading
3869       // to an unsatisfactory solution. Passing LoserRegs into RateFormula here
3870       // avoids the need to recompute this information across formulae using the
3871       // same bad AddRec. Passing LoserRegs is also essential unless we remove
3872       // the corresponding bad register from the Regs set.
3873       Cost CostF;
3874       Regs.clear();
3875       CostF.RateFormula(TTI, F, Regs, VisitedRegs, L, LU.Offsets, SE, DT, LU,
3876                         &LoserRegs);
3877       if (CostF.isLoser()) {
3878         // During initial formula generation, undesirable formulae are generated
3879         // by uses within other loops that have some non-trivial address mode or
3880         // use the postinc form of the IV. LSR needs to provide these formulae
3881         // as the basis of rediscovering the desired formula that uses an AddRec
3882         // corresponding to the existing phi. Once all formulae have been
3883         // generated, these initial losers may be pruned.
3884         DEBUG(dbgs() << "  Filtering loser "; F.print(dbgs());
3885               dbgs() << "\n");
3886       }
3887       else {
3888         SmallVector<const SCEV *, 4> Key;
3889         for (const SCEV *Reg : F.BaseRegs) {
3890           if (RegUses.isRegUsedByUsesOtherThan(Reg, LUIdx))
3891             Key.push_back(Reg);
3892         }
3893         if (F.ScaledReg &&
3894             RegUses.isRegUsedByUsesOtherThan(F.ScaledReg, LUIdx))
3895           Key.push_back(F.ScaledReg);
3896         // Unstable sort by host order ok, because this is only used for
3897         // uniquifying.
3898         std::sort(Key.begin(), Key.end());
3899 
3900         std::pair<BestFormulaeTy::const_iterator, bool> P =
3901           BestFormulae.insert(std::make_pair(Key, FIdx));
3902         if (P.second)
3903           continue;
3904 
3905         Formula &Best = LU.Formulae[P.first->second];
3906 
3907         Cost CostBest;
3908         Regs.clear();
3909         CostBest.RateFormula(TTI, Best, Regs, VisitedRegs, L, LU.Offsets, SE,
3910                              DT, LU);
3911         if (CostF < CostBest)
3912           std::swap(F, Best);
3913         DEBUG(dbgs() << "  Filtering out formula "; F.print(dbgs());
3914               dbgs() << "\n"
3915                         "    in favor of formula "; Best.print(dbgs());
3916               dbgs() << '\n');
3917       }
3918 #ifndef NDEBUG
3919       ChangedFormulae = true;
3920 #endif
3921       LU.DeleteFormula(F);
3922       --FIdx;
3923       --NumForms;
3924       Any = true;
3925     }
3926 
3927     // Now that we've filtered out some formulae, recompute the Regs set.
3928     if (Any)
3929       LU.RecomputeRegs(LUIdx, RegUses);
3930 
3931     // Reset this to prepare for the next use.
3932     BestFormulae.clear();
3933   }
3934 
3935   DEBUG(if (ChangedFormulae) {
3936           dbgs() << "\n"
3937                     "After filtering out undesirable candidates:\n";
3938           print_uses(dbgs());
3939         });
3940 }
3941 
3942 // This is a rough guess that seems to work fairly well.
3943 static const size_t ComplexityLimit = UINT16_MAX;
3944 
3945 /// Estimate the worst-case number of solutions the solver might have to
3946 /// consider. It almost never considers this many solutions because it prune the
3947 /// search space, but the pruning isn't always sufficient.
3948 size_t LSRInstance::EstimateSearchSpaceComplexity() const {
3949   size_t Power = 1;
3950   for (const LSRUse &LU : Uses) {
3951     size_t FSize = LU.Formulae.size();
3952     if (FSize >= ComplexityLimit) {
3953       Power = ComplexityLimit;
3954       break;
3955     }
3956     Power *= FSize;
3957     if (Power >= ComplexityLimit)
3958       break;
3959   }
3960   return Power;
3961 }
3962 
3963 /// When one formula uses a superset of the registers of another formula, it
3964 /// won't help reduce register pressure (though it may not necessarily hurt
3965 /// register pressure); remove it to simplify the system.
3966 void LSRInstance::NarrowSearchSpaceByDetectingSupersets() {
3967   if (EstimateSearchSpaceComplexity() >= ComplexityLimit) {
3968     DEBUG(dbgs() << "The search space is too complex.\n");
3969 
3970     DEBUG(dbgs() << "Narrowing the search space by eliminating formulae "
3971                     "which use a superset of registers used by other "
3972                     "formulae.\n");
3973 
3974     for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
3975       LSRUse &LU = Uses[LUIdx];
3976       bool Any = false;
3977       for (size_t i = 0, e = LU.Formulae.size(); i != e; ++i) {
3978         Formula &F = LU.Formulae[i];
3979         // Look for a formula with a constant or GV in a register. If the use
3980         // also has a formula with that same value in an immediate field,
3981         // delete the one that uses a register.
3982         for (SmallVectorImpl<const SCEV *>::const_iterator
3983              I = F.BaseRegs.begin(), E = F.BaseRegs.end(); I != E; ++I) {
3984           if (const SCEVConstant *C = dyn_cast<SCEVConstant>(*I)) {
3985             Formula NewF = F;
3986             NewF.BaseOffset += C->getValue()->getSExtValue();
3987             NewF.BaseRegs.erase(NewF.BaseRegs.begin() +
3988                                 (I - F.BaseRegs.begin()));
3989             if (LU.HasFormulaWithSameRegs(NewF)) {
3990               DEBUG(dbgs() << "  Deleting "; F.print(dbgs()); dbgs() << '\n');
3991               LU.DeleteFormula(F);
3992               --i;
3993               --e;
3994               Any = true;
3995               break;
3996             }
3997           } else if (const SCEVUnknown *U = dyn_cast<SCEVUnknown>(*I)) {
3998             if (GlobalValue *GV = dyn_cast<GlobalValue>(U->getValue()))
3999               if (!F.BaseGV) {
4000                 Formula NewF = F;
4001                 NewF.BaseGV = GV;
4002                 NewF.BaseRegs.erase(NewF.BaseRegs.begin() +
4003                                     (I - F.BaseRegs.begin()));
4004                 if (LU.HasFormulaWithSameRegs(NewF)) {
4005                   DEBUG(dbgs() << "  Deleting "; F.print(dbgs());
4006                         dbgs() << '\n');
4007                   LU.DeleteFormula(F);
4008                   --i;
4009                   --e;
4010                   Any = true;
4011                   break;
4012                 }
4013               }
4014           }
4015         }
4016       }
4017       if (Any)
4018         LU.RecomputeRegs(LUIdx, RegUses);
4019     }
4020 
4021     DEBUG(dbgs() << "After pre-selection:\n";
4022           print_uses(dbgs()));
4023   }
4024 }
4025 
4026 /// When there are many registers for expressions like A, A+1, A+2, etc.,
4027 /// allocate a single register for them.
4028 void LSRInstance::NarrowSearchSpaceByCollapsingUnrolledCode() {
4029   if (EstimateSearchSpaceComplexity() < ComplexityLimit)
4030     return;
4031 
4032   DEBUG(dbgs() << "The search space is too complex.\n"
4033                   "Narrowing the search space by assuming that uses separated "
4034                   "by a constant offset will use the same registers.\n");
4035 
4036   // This is especially useful for unrolled loops.
4037 
4038   for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4039     LSRUse &LU = Uses[LUIdx];
4040     for (const Formula &F : LU.Formulae) {
4041       if (F.BaseOffset == 0 || (F.Scale != 0 && F.Scale != 1))
4042         continue;
4043 
4044       LSRUse *LUThatHas = FindUseWithSimilarFormula(F, LU);
4045       if (!LUThatHas)
4046         continue;
4047 
4048       if (!reconcileNewOffset(*LUThatHas, F.BaseOffset, /*HasBaseReg=*/ false,
4049                               LU.Kind, LU.AccessTy))
4050         continue;
4051 
4052       DEBUG(dbgs() << "  Deleting use "; LU.print(dbgs()); dbgs() << '\n');
4053 
4054       LUThatHas->AllFixupsOutsideLoop &= LU.AllFixupsOutsideLoop;
4055 
4056       // Update the relocs to reference the new use.
4057       for (LSRFixup &Fixup : Fixups) {
4058         if (Fixup.LUIdx == LUIdx) {
4059           Fixup.LUIdx = LUThatHas - &Uses.front();
4060           Fixup.Offset += F.BaseOffset;
4061           // Add the new offset to LUThatHas' offset list.
4062           if (LUThatHas->Offsets.back() != Fixup.Offset) {
4063             LUThatHas->Offsets.push_back(Fixup.Offset);
4064             if (Fixup.Offset > LUThatHas->MaxOffset)
4065               LUThatHas->MaxOffset = Fixup.Offset;
4066             if (Fixup.Offset < LUThatHas->MinOffset)
4067               LUThatHas->MinOffset = Fixup.Offset;
4068           }
4069           DEBUG(dbgs() << "New fixup has offset " << Fixup.Offset << '\n');
4070         }
4071         if (Fixup.LUIdx == NumUses-1)
4072           Fixup.LUIdx = LUIdx;
4073       }
4074 
4075       // Delete formulae from the new use which are no longer legal.
4076       bool Any = false;
4077       for (size_t i = 0, e = LUThatHas->Formulae.size(); i != e; ++i) {
4078         Formula &F = LUThatHas->Formulae[i];
4079         if (!isLegalUse(TTI, LUThatHas->MinOffset, LUThatHas->MaxOffset,
4080                         LUThatHas->Kind, LUThatHas->AccessTy, F)) {
4081           DEBUG(dbgs() << "  Deleting "; F.print(dbgs());
4082                 dbgs() << '\n');
4083           LUThatHas->DeleteFormula(F);
4084           --i;
4085           --e;
4086           Any = true;
4087         }
4088       }
4089 
4090       if (Any)
4091         LUThatHas->RecomputeRegs(LUThatHas - &Uses.front(), RegUses);
4092 
4093       // Delete the old use.
4094       DeleteUse(LU, LUIdx);
4095       --LUIdx;
4096       --NumUses;
4097       break;
4098     }
4099   }
4100 
4101   DEBUG(dbgs() << "After pre-selection:\n"; print_uses(dbgs()));
4102 }
4103 
4104 /// Call FilterOutUndesirableDedicatedRegisters again, if necessary, now that
4105 /// we've done more filtering, as it may be able to find more formulae to
4106 /// eliminate.
4107 void LSRInstance::NarrowSearchSpaceByRefilteringUndesirableDedicatedRegisters(){
4108   if (EstimateSearchSpaceComplexity() >= ComplexityLimit) {
4109     DEBUG(dbgs() << "The search space is too complex.\n");
4110 
4111     DEBUG(dbgs() << "Narrowing the search space by re-filtering out "
4112                     "undesirable dedicated registers.\n");
4113 
4114     FilterOutUndesirableDedicatedRegisters();
4115 
4116     DEBUG(dbgs() << "After pre-selection:\n";
4117           print_uses(dbgs()));
4118   }
4119 }
4120 
4121 /// Pick a register which seems likely to be profitable, and then in any use
4122 /// which has any reference to that register, delete all formulae which do not
4123 /// reference that register.
4124 void LSRInstance::NarrowSearchSpaceByPickingWinnerRegs() {
4125   // With all other options exhausted, loop until the system is simple
4126   // enough to handle.
4127   SmallPtrSet<const SCEV *, 4> Taken;
4128   while (EstimateSearchSpaceComplexity() >= ComplexityLimit) {
4129     // Ok, we have too many of formulae on our hands to conveniently handle.
4130     // Use a rough heuristic to thin out the list.
4131     DEBUG(dbgs() << "The search space is too complex.\n");
4132 
4133     // Pick the register which is used by the most LSRUses, which is likely
4134     // to be a good reuse register candidate.
4135     const SCEV *Best = nullptr;
4136     unsigned BestNum = 0;
4137     for (const SCEV *Reg : RegUses) {
4138       if (Taken.count(Reg))
4139         continue;
4140       if (!Best)
4141         Best = Reg;
4142       else {
4143         unsigned Count = RegUses.getUsedByIndices(Reg).count();
4144         if (Count > BestNum) {
4145           Best = Reg;
4146           BestNum = Count;
4147         }
4148       }
4149     }
4150 
4151     DEBUG(dbgs() << "Narrowing the search space by assuming " << *Best
4152                  << " will yield profitable reuse.\n");
4153     Taken.insert(Best);
4154 
4155     // In any use with formulae which references this register, delete formulae
4156     // which don't reference it.
4157     for (size_t LUIdx = 0, NumUses = Uses.size(); LUIdx != NumUses; ++LUIdx) {
4158       LSRUse &LU = Uses[LUIdx];
4159       if (!LU.Regs.count(Best)) continue;
4160 
4161       bool Any = false;
4162       for (size_t i = 0, e = LU.Formulae.size(); i != e; ++i) {
4163         Formula &F = LU.Formulae[i];
4164         if (!F.referencesReg(Best)) {
4165           DEBUG(dbgs() << "  Deleting "; F.print(dbgs()); dbgs() << '\n');
4166           LU.DeleteFormula(F);
4167           --e;
4168           --i;
4169           Any = true;
4170           assert(e != 0 && "Use has no formulae left! Is Regs inconsistent?");
4171           continue;
4172         }
4173       }
4174 
4175       if (Any)
4176         LU.RecomputeRegs(LUIdx, RegUses);
4177     }
4178 
4179     DEBUG(dbgs() << "After pre-selection:\n";
4180           print_uses(dbgs()));
4181   }
4182 }
4183 
4184 /// If there are an extraordinary number of formulae to choose from, use some
4185 /// rough heuristics to prune down the number of formulae. This keeps the main
4186 /// solver from taking an extraordinary amount of time in some worst-case
4187 /// scenarios.
4188 void LSRInstance::NarrowSearchSpaceUsingHeuristics() {
4189   NarrowSearchSpaceByDetectingSupersets();
4190   NarrowSearchSpaceByCollapsingUnrolledCode();
4191   NarrowSearchSpaceByRefilteringUndesirableDedicatedRegisters();
4192   NarrowSearchSpaceByPickingWinnerRegs();
4193 }
4194 
4195 /// This is the recursive solver.
4196 void LSRInstance::SolveRecurse(SmallVectorImpl<const Formula *> &Solution,
4197                                Cost &SolutionCost,
4198                                SmallVectorImpl<const Formula *> &Workspace,
4199                                const Cost &CurCost,
4200                                const SmallPtrSet<const SCEV *, 16> &CurRegs,
4201                                DenseSet<const SCEV *> &VisitedRegs) const {
4202   // Some ideas:
4203   //  - prune more:
4204   //    - use more aggressive filtering
4205   //    - sort the formula so that the most profitable solutions are found first
4206   //    - sort the uses too
4207   //  - search faster:
4208   //    - don't compute a cost, and then compare. compare while computing a cost
4209   //      and bail early.
4210   //    - track register sets with SmallBitVector
4211 
4212   const LSRUse &LU = Uses[Workspace.size()];
4213 
4214   // If this use references any register that's already a part of the
4215   // in-progress solution, consider it a requirement that a formula must
4216   // reference that register in order to be considered. This prunes out
4217   // unprofitable searching.
4218   SmallSetVector<const SCEV *, 4> ReqRegs;
4219   for (const SCEV *S : CurRegs)
4220     if (LU.Regs.count(S))
4221       ReqRegs.insert(S);
4222 
4223   SmallPtrSet<const SCEV *, 16> NewRegs;
4224   Cost NewCost;
4225   for (const Formula &F : LU.Formulae) {
4226     // Ignore formulae which may not be ideal in terms of register reuse of
4227     // ReqRegs.  The formula should use all required registers before
4228     // introducing new ones.
4229     int NumReqRegsToFind = std::min(F.getNumRegs(), ReqRegs.size());
4230     for (const SCEV *Reg : ReqRegs) {
4231       if ((F.ScaledReg && F.ScaledReg == Reg) ||
4232           is_contained(F.BaseRegs, Reg)) {
4233         --NumReqRegsToFind;
4234         if (NumReqRegsToFind == 0)
4235           break;
4236       }
4237     }
4238     if (NumReqRegsToFind != 0) {
4239       // If none of the formulae satisfied the required registers, then we could
4240       // clear ReqRegs and try again. Currently, we simply give up in this case.
4241       continue;
4242     }
4243 
4244     // Evaluate the cost of the current formula. If it's already worse than
4245     // the current best, prune the search at that point.
4246     NewCost = CurCost;
4247     NewRegs = CurRegs;
4248     NewCost.RateFormula(TTI, F, NewRegs, VisitedRegs, L, LU.Offsets, SE, DT,
4249                         LU);
4250     if (NewCost < SolutionCost) {
4251       Workspace.push_back(&F);
4252       if (Workspace.size() != Uses.size()) {
4253         SolveRecurse(Solution, SolutionCost, Workspace, NewCost,
4254                      NewRegs, VisitedRegs);
4255         if (F.getNumRegs() == 1 && Workspace.size() == 1)
4256           VisitedRegs.insert(F.ScaledReg ? F.ScaledReg : F.BaseRegs[0]);
4257       } else {
4258         DEBUG(dbgs() << "New best at "; NewCost.print(dbgs());
4259               dbgs() << ".\n Regs:";
4260               for (const SCEV *S : NewRegs)
4261                 dbgs() << ' ' << *S;
4262               dbgs() << '\n');
4263 
4264         SolutionCost = NewCost;
4265         Solution = Workspace;
4266       }
4267       Workspace.pop_back();
4268     }
4269   }
4270 }
4271 
4272 /// Choose one formula from each use. Return the results in the given Solution
4273 /// vector.
4274 void LSRInstance::Solve(SmallVectorImpl<const Formula *> &Solution) const {
4275   SmallVector<const Formula *, 8> Workspace;
4276   Cost SolutionCost;
4277   SolutionCost.Lose();
4278   Cost CurCost;
4279   SmallPtrSet<const SCEV *, 16> CurRegs;
4280   DenseSet<const SCEV *> VisitedRegs;
4281   Workspace.reserve(Uses.size());
4282 
4283   // SolveRecurse does all the work.
4284   SolveRecurse(Solution, SolutionCost, Workspace, CurCost,
4285                CurRegs, VisitedRegs);
4286   if (Solution.empty()) {
4287     DEBUG(dbgs() << "\nNo Satisfactory Solution\n");
4288     return;
4289   }
4290 
4291   // Ok, we've now made all our decisions.
4292   DEBUG(dbgs() << "\n"
4293                   "The chosen solution requires "; SolutionCost.print(dbgs());
4294         dbgs() << ":\n";
4295         for (size_t i = 0, e = Uses.size(); i != e; ++i) {
4296           dbgs() << "  ";
4297           Uses[i].print(dbgs());
4298           dbgs() << "\n"
4299                     "    ";
4300           Solution[i]->print(dbgs());
4301           dbgs() << '\n';
4302         });
4303 
4304   assert(Solution.size() == Uses.size() && "Malformed solution!");
4305 }
4306 
4307 /// Helper for AdjustInsertPositionForExpand. Climb up the dominator tree far as
4308 /// we can go while still being dominated by the input positions. This helps
4309 /// canonicalize the insert position, which encourages sharing.
4310 BasicBlock::iterator
4311 LSRInstance::HoistInsertPosition(BasicBlock::iterator IP,
4312                                  const SmallVectorImpl<Instruction *> &Inputs)
4313                                                                          const {
4314   Instruction *Tentative = &*IP;
4315   for (;;) {
4316     bool AllDominate = true;
4317     Instruction *BetterPos = nullptr;
4318     // Don't bother attempting to insert before a catchswitch, their basic block
4319     // cannot have other non-PHI instructions.
4320     if (isa<CatchSwitchInst>(Tentative))
4321       return IP;
4322 
4323     for (Instruction *Inst : Inputs) {
4324       if (Inst == Tentative || !DT.dominates(Inst, Tentative)) {
4325         AllDominate = false;
4326         break;
4327       }
4328       // Attempt to find an insert position in the middle of the block,
4329       // instead of at the end, so that it can be used for other expansions.
4330       if (Tentative->getParent() == Inst->getParent() &&
4331           (!BetterPos || !DT.dominates(Inst, BetterPos)))
4332         BetterPos = &*std::next(BasicBlock::iterator(Inst));
4333     }
4334     if (!AllDominate)
4335       break;
4336     if (BetterPos)
4337       IP = BetterPos->getIterator();
4338     else
4339       IP = Tentative->getIterator();
4340 
4341     const Loop *IPLoop = LI.getLoopFor(IP->getParent());
4342     unsigned IPLoopDepth = IPLoop ? IPLoop->getLoopDepth() : 0;
4343 
4344     BasicBlock *IDom;
4345     for (DomTreeNode *Rung = DT.getNode(IP->getParent()); ; ) {
4346       if (!Rung) return IP;
4347       Rung = Rung->getIDom();
4348       if (!Rung) return IP;
4349       IDom = Rung->getBlock();
4350 
4351       // Don't climb into a loop though.
4352       const Loop *IDomLoop = LI.getLoopFor(IDom);
4353       unsigned IDomDepth = IDomLoop ? IDomLoop->getLoopDepth() : 0;
4354       if (IDomDepth <= IPLoopDepth &&
4355           (IDomDepth != IPLoopDepth || IDomLoop == IPLoop))
4356         break;
4357     }
4358 
4359     Tentative = IDom->getTerminator();
4360   }
4361 
4362   return IP;
4363 }
4364 
4365 /// Determine an input position which will be dominated by the operands and
4366 /// which will dominate the result.
4367 BasicBlock::iterator
4368 LSRInstance::AdjustInsertPositionForExpand(BasicBlock::iterator LowestIP,
4369                                            const LSRFixup &LF,
4370                                            const LSRUse &LU,
4371                                            SCEVExpander &Rewriter) const {
4372   // Collect some instructions which must be dominated by the
4373   // expanding replacement. These must be dominated by any operands that
4374   // will be required in the expansion.
4375   SmallVector<Instruction *, 4> Inputs;
4376   if (Instruction *I = dyn_cast<Instruction>(LF.OperandValToReplace))
4377     Inputs.push_back(I);
4378   if (LU.Kind == LSRUse::ICmpZero)
4379     if (Instruction *I =
4380           dyn_cast<Instruction>(cast<ICmpInst>(LF.UserInst)->getOperand(1)))
4381       Inputs.push_back(I);
4382   if (LF.PostIncLoops.count(L)) {
4383     if (LF.isUseFullyOutsideLoop(L))
4384       Inputs.push_back(L->getLoopLatch()->getTerminator());
4385     else
4386       Inputs.push_back(IVIncInsertPos);
4387   }
4388   // The expansion must also be dominated by the increment positions of any
4389   // loops it for which it is using post-inc mode.
4390   for (const Loop *PIL : LF.PostIncLoops) {
4391     if (PIL == L) continue;
4392 
4393     // Be dominated by the loop exit.
4394     SmallVector<BasicBlock *, 4> ExitingBlocks;
4395     PIL->getExitingBlocks(ExitingBlocks);
4396     if (!ExitingBlocks.empty()) {
4397       BasicBlock *BB = ExitingBlocks[0];
4398       for (unsigned i = 1, e = ExitingBlocks.size(); i != e; ++i)
4399         BB = DT.findNearestCommonDominator(BB, ExitingBlocks[i]);
4400       Inputs.push_back(BB->getTerminator());
4401     }
4402   }
4403 
4404   assert(!isa<PHINode>(LowestIP) && !LowestIP->isEHPad()
4405          && !isa<DbgInfoIntrinsic>(LowestIP) &&
4406          "Insertion point must be a normal instruction");
4407 
4408   // Then, climb up the immediate dominator tree as far as we can go while
4409   // still being dominated by the input positions.
4410   BasicBlock::iterator IP = HoistInsertPosition(LowestIP, Inputs);
4411 
4412   // Don't insert instructions before PHI nodes.
4413   while (isa<PHINode>(IP)) ++IP;
4414 
4415   // Ignore landingpad instructions.
4416   while (IP->isEHPad()) ++IP;
4417 
4418   // Ignore debug intrinsics.
4419   while (isa<DbgInfoIntrinsic>(IP)) ++IP;
4420 
4421   // Set IP below instructions recently inserted by SCEVExpander. This keeps the
4422   // IP consistent across expansions and allows the previously inserted
4423   // instructions to be reused by subsequent expansion.
4424   while (Rewriter.isInsertedInstruction(&*IP) && IP != LowestIP)
4425     ++IP;
4426 
4427   return IP;
4428 }
4429 
4430 /// Emit instructions for the leading candidate expression for this LSRUse (this
4431 /// is called "expanding").
4432 Value *LSRInstance::Expand(const LSRFixup &LF,
4433                            const Formula &F,
4434                            BasicBlock::iterator IP,
4435                            SCEVExpander &Rewriter,
4436                            SmallVectorImpl<WeakVH> &DeadInsts) const {
4437   const LSRUse &LU = Uses[LF.LUIdx];
4438   if (LU.RigidFormula)
4439     return LF.OperandValToReplace;
4440 
4441   // Determine an input position which will be dominated by the operands and
4442   // which will dominate the result.
4443   IP = AdjustInsertPositionForExpand(IP, LF, LU, Rewriter);
4444   Rewriter.setInsertPoint(&*IP);
4445 
4446   // Inform the Rewriter if we have a post-increment use, so that it can
4447   // perform an advantageous expansion.
4448   Rewriter.setPostInc(LF.PostIncLoops);
4449 
4450   // This is the type that the user actually needs.
4451   Type *OpTy = LF.OperandValToReplace->getType();
4452   // This will be the type that we'll initially expand to.
4453   Type *Ty = F.getType();
4454   if (!Ty)
4455     // No type known; just expand directly to the ultimate type.
4456     Ty = OpTy;
4457   else if (SE.getEffectiveSCEVType(Ty) == SE.getEffectiveSCEVType(OpTy))
4458     // Expand directly to the ultimate type if it's the right size.
4459     Ty = OpTy;
4460   // This is the type to do integer arithmetic in.
4461   Type *IntTy = SE.getEffectiveSCEVType(Ty);
4462 
4463   // Build up a list of operands to add together to form the full base.
4464   SmallVector<const SCEV *, 8> Ops;
4465 
4466   // Expand the BaseRegs portion.
4467   for (const SCEV *Reg : F.BaseRegs) {
4468     assert(!Reg->isZero() && "Zero allocated in a base register!");
4469 
4470     // If we're expanding for a post-inc user, make the post-inc adjustment.
4471     PostIncLoopSet &Loops = const_cast<PostIncLoopSet &>(LF.PostIncLoops);
4472     Reg = TransformForPostIncUse(Denormalize, Reg,
4473                                  LF.UserInst, LF.OperandValToReplace,
4474                                  Loops, SE, DT);
4475 
4476     Ops.push_back(SE.getUnknown(Rewriter.expandCodeFor(Reg, nullptr)));
4477   }
4478 
4479   // Expand the ScaledReg portion.
4480   Value *ICmpScaledV = nullptr;
4481   if (F.Scale != 0) {
4482     const SCEV *ScaledS = F.ScaledReg;
4483 
4484     // If we're expanding for a post-inc user, make the post-inc adjustment.
4485     PostIncLoopSet &Loops = const_cast<PostIncLoopSet &>(LF.PostIncLoops);
4486     ScaledS = TransformForPostIncUse(Denormalize, ScaledS,
4487                                      LF.UserInst, LF.OperandValToReplace,
4488                                      Loops, SE, DT);
4489 
4490     if (LU.Kind == LSRUse::ICmpZero) {
4491       // Expand ScaleReg as if it was part of the base regs.
4492       if (F.Scale == 1)
4493         Ops.push_back(
4494             SE.getUnknown(Rewriter.expandCodeFor(ScaledS, nullptr)));
4495       else {
4496         // An interesting way of "folding" with an icmp is to use a negated
4497         // scale, which we'll implement by inserting it into the other operand
4498         // of the icmp.
4499         assert(F.Scale == -1 &&
4500                "The only scale supported by ICmpZero uses is -1!");
4501         ICmpScaledV = Rewriter.expandCodeFor(ScaledS, nullptr);
4502       }
4503     } else {
4504       // Otherwise just expand the scaled register and an explicit scale,
4505       // which is expected to be matched as part of the address.
4506 
4507       // Flush the operand list to suppress SCEVExpander hoisting address modes.
4508       // Unless the addressing mode will not be folded.
4509       if (!Ops.empty() && LU.Kind == LSRUse::Address &&
4510           isAMCompletelyFolded(TTI, LU, F)) {
4511         Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), Ty);
4512         Ops.clear();
4513         Ops.push_back(SE.getUnknown(FullV));
4514       }
4515       ScaledS = SE.getUnknown(Rewriter.expandCodeFor(ScaledS, nullptr));
4516       if (F.Scale != 1)
4517         ScaledS =
4518             SE.getMulExpr(ScaledS, SE.getConstant(ScaledS->getType(), F.Scale));
4519       Ops.push_back(ScaledS);
4520     }
4521   }
4522 
4523   // Expand the GV portion.
4524   if (F.BaseGV) {
4525     // Flush the operand list to suppress SCEVExpander hoisting.
4526     if (!Ops.empty()) {
4527       Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), Ty);
4528       Ops.clear();
4529       Ops.push_back(SE.getUnknown(FullV));
4530     }
4531     Ops.push_back(SE.getUnknown(F.BaseGV));
4532   }
4533 
4534   // Flush the operand list to suppress SCEVExpander hoisting of both folded and
4535   // unfolded offsets. LSR assumes they both live next to their uses.
4536   if (!Ops.empty()) {
4537     Value *FullV = Rewriter.expandCodeFor(SE.getAddExpr(Ops), Ty);
4538     Ops.clear();
4539     Ops.push_back(SE.getUnknown(FullV));
4540   }
4541 
4542   // Expand the immediate portion.
4543   int64_t Offset = (uint64_t)F.BaseOffset + LF.Offset;
4544   if (Offset != 0) {
4545     if (LU.Kind == LSRUse::ICmpZero) {
4546       // The other interesting way of "folding" with an ICmpZero is to use a
4547       // negated immediate.
4548       if (!ICmpScaledV)
4549         ICmpScaledV = ConstantInt::get(IntTy, -(uint64_t)Offset);
4550       else {
4551         Ops.push_back(SE.getUnknown(ICmpScaledV));
4552         ICmpScaledV = ConstantInt::get(IntTy, Offset);
4553       }
4554     } else {
4555       // Just add the immediate values. These again are expected to be matched
4556       // as part of the address.
4557       Ops.push_back(SE.getUnknown(ConstantInt::getSigned(IntTy, Offset)));
4558     }
4559   }
4560 
4561   // Expand the unfolded offset portion.
4562   int64_t UnfoldedOffset = F.UnfoldedOffset;
4563   if (UnfoldedOffset != 0) {
4564     // Just add the immediate values.
4565     Ops.push_back(SE.getUnknown(ConstantInt::getSigned(IntTy,
4566                                                        UnfoldedOffset)));
4567   }
4568 
4569   // Emit instructions summing all the operands.
4570   const SCEV *FullS = Ops.empty() ?
4571                       SE.getConstant(IntTy, 0) :
4572                       SE.getAddExpr(Ops);
4573   Value *FullV = Rewriter.expandCodeFor(FullS, Ty);
4574 
4575   // We're done expanding now, so reset the rewriter.
4576   Rewriter.clearPostInc();
4577 
4578   // An ICmpZero Formula represents an ICmp which we're handling as a
4579   // comparison against zero. Now that we've expanded an expression for that
4580   // form, update the ICmp's other operand.
4581   if (LU.Kind == LSRUse::ICmpZero) {
4582     ICmpInst *CI = cast<ICmpInst>(LF.UserInst);
4583     DeadInsts.emplace_back(CI->getOperand(1));
4584     assert(!F.BaseGV && "ICmp does not support folding a global value and "
4585                            "a scale at the same time!");
4586     if (F.Scale == -1) {
4587       if (ICmpScaledV->getType() != OpTy) {
4588         Instruction *Cast =
4589           CastInst::Create(CastInst::getCastOpcode(ICmpScaledV, false,
4590                                                    OpTy, false),
4591                            ICmpScaledV, OpTy, "tmp", CI);
4592         ICmpScaledV = Cast;
4593       }
4594       CI->setOperand(1, ICmpScaledV);
4595     } else {
4596       // A scale of 1 means that the scale has been expanded as part of the
4597       // base regs.
4598       assert((F.Scale == 0 || F.Scale == 1) &&
4599              "ICmp does not support folding a global value and "
4600              "a scale at the same time!");
4601       Constant *C = ConstantInt::getSigned(SE.getEffectiveSCEVType(OpTy),
4602                                            -(uint64_t)Offset);
4603       if (C->getType() != OpTy)
4604         C = ConstantExpr::getCast(CastInst::getCastOpcode(C, false,
4605                                                           OpTy, false),
4606                                   C, OpTy);
4607 
4608       CI->setOperand(1, C);
4609     }
4610   }
4611 
4612   return FullV;
4613 }
4614 
4615 /// Helper for Rewrite. PHI nodes are special because the use of their operands
4616 /// effectively happens in their predecessor blocks, so the expression may need
4617 /// to be expanded in multiple places.
4618 void LSRInstance::RewriteForPHI(PHINode *PN,
4619                                 const LSRFixup &LF,
4620                                 const Formula &F,
4621                                 SCEVExpander &Rewriter,
4622                                 SmallVectorImpl<WeakVH> &DeadInsts) const {
4623   DenseMap<BasicBlock *, Value *> Inserted;
4624   for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i)
4625     if (PN->getIncomingValue(i) == LF.OperandValToReplace) {
4626       BasicBlock *BB = PN->getIncomingBlock(i);
4627 
4628       // If this is a critical edge, split the edge so that we do not insert
4629       // the code on all predecessor/successor paths.  We do this unless this
4630       // is the canonical backedge for this loop, which complicates post-inc
4631       // users.
4632       if (e != 1 && BB->getTerminator()->getNumSuccessors() > 1 &&
4633           !isa<IndirectBrInst>(BB->getTerminator())) {
4634         BasicBlock *Parent = PN->getParent();
4635         Loop *PNLoop = LI.getLoopFor(Parent);
4636         if (!PNLoop || Parent != PNLoop->getHeader()) {
4637           // Split the critical edge.
4638           BasicBlock *NewBB = nullptr;
4639           if (!Parent->isLandingPad()) {
4640             NewBB = SplitCriticalEdge(BB, Parent,
4641                                       CriticalEdgeSplittingOptions(&DT, &LI)
4642                                           .setMergeIdenticalEdges()
4643                                           .setDontDeleteUselessPHIs());
4644           } else {
4645             SmallVector<BasicBlock*, 2> NewBBs;
4646             SplitLandingPadPredecessors(Parent, BB, "", "", NewBBs, &DT, &LI);
4647             NewBB = NewBBs[0];
4648           }
4649           // If NewBB==NULL, then SplitCriticalEdge refused to split because all
4650           // phi predecessors are identical. The simple thing to do is skip
4651           // splitting in this case rather than complicate the API.
4652           if (NewBB) {
4653             // If PN is outside of the loop and BB is in the loop, we want to
4654             // move the block to be immediately before the PHI block, not
4655             // immediately after BB.
4656             if (L->contains(BB) && !L->contains(PN))
4657               NewBB->moveBefore(PN->getParent());
4658 
4659             // Splitting the edge can reduce the number of PHI entries we have.
4660             e = PN->getNumIncomingValues();
4661             BB = NewBB;
4662             i = PN->getBasicBlockIndex(BB);
4663           }
4664         }
4665       }
4666 
4667       std::pair<DenseMap<BasicBlock *, Value *>::iterator, bool> Pair =
4668         Inserted.insert(std::make_pair(BB, static_cast<Value *>(nullptr)));
4669       if (!Pair.second)
4670         PN->setIncomingValue(i, Pair.first->second);
4671       else {
4672         Value *FullV = Expand(LF, F, BB->getTerminator()->getIterator(),
4673                               Rewriter, DeadInsts);
4674 
4675         // If this is reuse-by-noop-cast, insert the noop cast.
4676         Type *OpTy = LF.OperandValToReplace->getType();
4677         if (FullV->getType() != OpTy)
4678           FullV =
4679             CastInst::Create(CastInst::getCastOpcode(FullV, false,
4680                                                      OpTy, false),
4681                              FullV, LF.OperandValToReplace->getType(),
4682                              "tmp", BB->getTerminator());
4683 
4684         PN->setIncomingValue(i, FullV);
4685         Pair.first->second = FullV;
4686       }
4687     }
4688 }
4689 
4690 /// Emit instructions for the leading candidate expression for this LSRUse (this
4691 /// is called "expanding"), and update the UserInst to reference the newly
4692 /// expanded value.
4693 void LSRInstance::Rewrite(const LSRFixup &LF,
4694                           const Formula &F,
4695                           SCEVExpander &Rewriter,
4696                           SmallVectorImpl<WeakVH> &DeadInsts) const {
4697   // First, find an insertion point that dominates UserInst. For PHI nodes,
4698   // find the nearest block which dominates all the relevant uses.
4699   if (PHINode *PN = dyn_cast<PHINode>(LF.UserInst)) {
4700     RewriteForPHI(PN, LF, F, Rewriter, DeadInsts);
4701   } else {
4702     Value *FullV =
4703         Expand(LF, F, LF.UserInst->getIterator(), Rewriter, DeadInsts);
4704 
4705     // If this is reuse-by-noop-cast, insert the noop cast.
4706     Type *OpTy = LF.OperandValToReplace->getType();
4707     if (FullV->getType() != OpTy) {
4708       Instruction *Cast =
4709         CastInst::Create(CastInst::getCastOpcode(FullV, false, OpTy, false),
4710                          FullV, OpTy, "tmp", LF.UserInst);
4711       FullV = Cast;
4712     }
4713 
4714     // Update the user. ICmpZero is handled specially here (for now) because
4715     // Expand may have updated one of the operands of the icmp already, and
4716     // its new value may happen to be equal to LF.OperandValToReplace, in
4717     // which case doing replaceUsesOfWith leads to replacing both operands
4718     // with the same value. TODO: Reorganize this.
4719     if (Uses[LF.LUIdx].Kind == LSRUse::ICmpZero)
4720       LF.UserInst->setOperand(0, FullV);
4721     else
4722       LF.UserInst->replaceUsesOfWith(LF.OperandValToReplace, FullV);
4723   }
4724 
4725   DeadInsts.emplace_back(LF.OperandValToReplace);
4726 }
4727 
4728 /// Rewrite all the fixup locations with new values, following the chosen
4729 /// solution.
4730 void LSRInstance::ImplementSolution(
4731     const SmallVectorImpl<const Formula *> &Solution) {
4732   // Keep track of instructions we may have made dead, so that
4733   // we can remove them after we are done working.
4734   SmallVector<WeakVH, 16> DeadInsts;
4735 
4736   SCEVExpander Rewriter(SE, L->getHeader()->getModule()->getDataLayout(),
4737                         "lsr");
4738 #ifndef NDEBUG
4739   Rewriter.setDebugType(DEBUG_TYPE);
4740 #endif
4741   Rewriter.disableCanonicalMode();
4742   Rewriter.enableLSRMode();
4743   Rewriter.setIVIncInsertPos(L, IVIncInsertPos);
4744 
4745   // Mark phi nodes that terminate chains so the expander tries to reuse them.
4746   for (const IVChain &Chain : IVChainVec) {
4747     if (PHINode *PN = dyn_cast<PHINode>(Chain.tailUserInst()))
4748       Rewriter.setChainedPhi(PN);
4749   }
4750 
4751   // Expand the new value definitions and update the users.
4752   for (const LSRFixup &Fixup : Fixups) {
4753     Rewrite(Fixup, *Solution[Fixup.LUIdx], Rewriter, DeadInsts);
4754 
4755     Changed = true;
4756   }
4757 
4758   for (const IVChain &Chain : IVChainVec) {
4759     GenerateIVChain(Chain, Rewriter, DeadInsts);
4760     Changed = true;
4761   }
4762   // Clean up after ourselves. This must be done before deleting any
4763   // instructions.
4764   Rewriter.clear();
4765 
4766   Changed |= DeleteTriviallyDeadInstructions(DeadInsts);
4767 }
4768 
4769 LSRInstance::LSRInstance(Loop *L, IVUsers &IU, ScalarEvolution &SE,
4770                          DominatorTree &DT, LoopInfo &LI,
4771                          const TargetTransformInfo &TTI)
4772     : IU(IU), SE(SE), DT(DT), LI(LI), TTI(TTI), L(L), Changed(false),
4773       IVIncInsertPos(nullptr) {
4774   // If LoopSimplify form is not available, stay out of trouble.
4775   if (!L->isLoopSimplifyForm())
4776     return;
4777 
4778   // If there's no interesting work to be done, bail early.
4779   if (IU.empty()) return;
4780 
4781   // If there's too much analysis to be done, bail early. We won't be able to
4782   // model the problem anyway.
4783   unsigned NumUsers = 0;
4784   for (const IVStrideUse &U : IU) {
4785     if (++NumUsers > MaxIVUsers) {
4786       (void)U;
4787       DEBUG(dbgs() << "LSR skipping loop, too many IV Users in " << U << "\n");
4788       return;
4789     }
4790     // Bail out if we have a PHI on an EHPad that gets a value from a
4791     // CatchSwitchInst.  Because the CatchSwitchInst cannot be split, there is
4792     // no good place to stick any instructions.
4793     if (auto *PN = dyn_cast<PHINode>(U.getUser())) {
4794        auto *FirstNonPHI = PN->getParent()->getFirstNonPHI();
4795        if (isa<FuncletPadInst>(FirstNonPHI) ||
4796            isa<CatchSwitchInst>(FirstNonPHI))
4797          for (BasicBlock *PredBB : PN->blocks())
4798            if (isa<CatchSwitchInst>(PredBB->getFirstNonPHI()))
4799              return;
4800     }
4801   }
4802 
4803 #ifndef NDEBUG
4804   // All dominating loops must have preheaders, or SCEVExpander may not be able
4805   // to materialize an AddRecExpr whose Start is an outer AddRecExpr.
4806   //
4807   // IVUsers analysis should only create users that are dominated by simple loop
4808   // headers. Since this loop should dominate all of its users, its user list
4809   // should be empty if this loop itself is not within a simple loop nest.
4810   for (DomTreeNode *Rung = DT.getNode(L->getLoopPreheader());
4811        Rung; Rung = Rung->getIDom()) {
4812     BasicBlock *BB = Rung->getBlock();
4813     const Loop *DomLoop = LI.getLoopFor(BB);
4814     if (DomLoop && DomLoop->getHeader() == BB) {
4815       assert(DomLoop->getLoopPreheader() && "LSR needs a simplified loop nest");
4816     }
4817   }
4818 #endif // DEBUG
4819 
4820   DEBUG(dbgs() << "\nLSR on loop ";
4821         L->getHeader()->printAsOperand(dbgs(), /*PrintType=*/false);
4822         dbgs() << ":\n");
4823 
4824   // First, perform some low-level loop optimizations.
4825   OptimizeShadowIV();
4826   OptimizeLoopTermCond();
4827 
4828   // If loop preparation eliminates all interesting IV users, bail.
4829   if (IU.empty()) return;
4830 
4831   // Skip nested loops until we can model them better with formulae.
4832   if (!L->empty()) {
4833     DEBUG(dbgs() << "LSR skipping outer loop " << *L << "\n");
4834     return;
4835   }
4836 
4837   // Start collecting data and preparing for the solver.
4838   CollectChains();
4839   CollectInterestingTypesAndFactors();
4840   CollectFixupsAndInitialFormulae();
4841   CollectLoopInvariantFixupsAndFormulae();
4842 
4843   assert(!Uses.empty() && "IVUsers reported at least one use");
4844   DEBUG(dbgs() << "LSR found " << Uses.size() << " uses:\n";
4845         print_uses(dbgs()));
4846 
4847   // Now use the reuse data to generate a bunch of interesting ways
4848   // to formulate the values needed for the uses.
4849   GenerateAllReuseFormulae();
4850 
4851   FilterOutUndesirableDedicatedRegisters();
4852   NarrowSearchSpaceUsingHeuristics();
4853 
4854   SmallVector<const Formula *, 8> Solution;
4855   Solve(Solution);
4856 
4857   // Release memory that is no longer needed.
4858   Factors.clear();
4859   Types.clear();
4860   RegUses.clear();
4861 
4862   if (Solution.empty())
4863     return;
4864 
4865 #ifndef NDEBUG
4866   // Formulae should be legal.
4867   for (const LSRUse &LU : Uses) {
4868     for (const Formula &F : LU.Formulae)
4869       assert(isLegalUse(TTI, LU.MinOffset, LU.MaxOffset, LU.Kind, LU.AccessTy,
4870                         F) && "Illegal formula generated!");
4871   };
4872 #endif
4873 
4874   // Now that we've decided what we want, make it so.
4875   ImplementSolution(Solution);
4876 }
4877 
4878 void LSRInstance::print_factors_and_types(raw_ostream &OS) const {
4879   if (Factors.empty() && Types.empty()) return;
4880 
4881   OS << "LSR has identified the following interesting factors and types: ";
4882   bool First = true;
4883 
4884   for (int64_t Factor : Factors) {
4885     if (!First) OS << ", ";
4886     First = false;
4887     OS << '*' << Factor;
4888   }
4889 
4890   for (Type *Ty : Types) {
4891     if (!First) OS << ", ";
4892     First = false;
4893     OS << '(' << *Ty << ')';
4894   }
4895   OS << '\n';
4896 }
4897 
4898 void LSRInstance::print_fixups(raw_ostream &OS) const {
4899   OS << "LSR is examining the following fixup sites:\n";
4900   for (const LSRFixup &LF : Fixups) {
4901     dbgs() << "  ";
4902     LF.print(OS);
4903     OS << '\n';
4904   }
4905 }
4906 
4907 void LSRInstance::print_uses(raw_ostream &OS) const {
4908   OS << "LSR is examining the following uses:\n";
4909   for (const LSRUse &LU : Uses) {
4910     dbgs() << "  ";
4911     LU.print(OS);
4912     OS << '\n';
4913     for (const Formula &F : LU.Formulae) {
4914       OS << "    ";
4915       F.print(OS);
4916       OS << '\n';
4917     }
4918   }
4919 }
4920 
4921 void LSRInstance::print(raw_ostream &OS) const {
4922   print_factors_and_types(OS);
4923   print_fixups(OS);
4924   print_uses(OS);
4925 }
4926 
4927 LLVM_DUMP_METHOD
4928 void LSRInstance::dump() const {
4929   print(errs()); errs() << '\n';
4930 }
4931 
4932 namespace {
4933 
4934 class LoopStrengthReduce : public LoopPass {
4935 public:
4936   static char ID; // Pass ID, replacement for typeid
4937   LoopStrengthReduce();
4938 
4939 private:
4940   bool runOnLoop(Loop *L, LPPassManager &LPM) override;
4941   void getAnalysisUsage(AnalysisUsage &AU) const override;
4942 };
4943 }
4944 
4945 char LoopStrengthReduce::ID = 0;
4946 INITIALIZE_PASS_BEGIN(LoopStrengthReduce, "loop-reduce",
4947                       "Loop Strength Reduction", false, false)
4948 INITIALIZE_PASS_DEPENDENCY(TargetTransformInfoWrapperPass)
4949 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
4950 INITIALIZE_PASS_DEPENDENCY(ScalarEvolutionWrapperPass)
4951 INITIALIZE_PASS_DEPENDENCY(IVUsersWrapperPass)
4952 INITIALIZE_PASS_DEPENDENCY(LoopInfoWrapperPass)
4953 INITIALIZE_PASS_DEPENDENCY(LoopSimplify)
4954 INITIALIZE_PASS_END(LoopStrengthReduce, "loop-reduce",
4955                     "Loop Strength Reduction", false, false)
4956 
4957 Pass *llvm::createLoopStrengthReducePass() { return new LoopStrengthReduce(); }
4958 
4959 LoopStrengthReduce::LoopStrengthReduce() : LoopPass(ID) {
4960   initializeLoopStrengthReducePass(*PassRegistry::getPassRegistry());
4961 }
4962 
4963 void LoopStrengthReduce::getAnalysisUsage(AnalysisUsage &AU) const {
4964   // We split critical edges, so we change the CFG.  However, we do update
4965   // many analyses if they are around.
4966   AU.addPreservedID(LoopSimplifyID);
4967 
4968   AU.addRequired<LoopInfoWrapperPass>();
4969   AU.addPreserved<LoopInfoWrapperPass>();
4970   AU.addRequiredID(LoopSimplifyID);
4971   AU.addRequired<DominatorTreeWrapperPass>();
4972   AU.addPreserved<DominatorTreeWrapperPass>();
4973   AU.addRequired<ScalarEvolutionWrapperPass>();
4974   AU.addPreserved<ScalarEvolutionWrapperPass>();
4975   // Requiring LoopSimplify a second time here prevents IVUsers from running
4976   // twice, since LoopSimplify was invalidated by running ScalarEvolution.
4977   AU.addRequiredID(LoopSimplifyID);
4978   AU.addRequired<IVUsersWrapperPass>();
4979   AU.addPreserved<IVUsersWrapperPass>();
4980   AU.addRequired<TargetTransformInfoWrapperPass>();
4981 }
4982 
4983 static bool ReduceLoopStrength(Loop *L, IVUsers &IU, ScalarEvolution &SE,
4984                                DominatorTree &DT, LoopInfo &LI,
4985                                const TargetTransformInfo &TTI) {
4986   bool Changed = false;
4987 
4988   // Run the main LSR transformation.
4989   Changed |= LSRInstance(L, IU, SE, DT, LI, TTI).getChanged();
4990 
4991   // Remove any extra phis created by processing inner loops.
4992   Changed |= DeleteDeadPHIs(L->getHeader());
4993   if (EnablePhiElim && L->isLoopSimplifyForm()) {
4994     SmallVector<WeakVH, 16> DeadInsts;
4995     const DataLayout &DL = L->getHeader()->getModule()->getDataLayout();
4996     SCEVExpander Rewriter(SE, DL, "lsr");
4997 #ifndef NDEBUG
4998     Rewriter.setDebugType(DEBUG_TYPE);
4999 #endif
5000     unsigned numFolded = Rewriter.replaceCongruentIVs(L, &DT, DeadInsts, &TTI);
5001     if (numFolded) {
5002       Changed = true;
5003       DeleteTriviallyDeadInstructions(DeadInsts);
5004       DeleteDeadPHIs(L->getHeader());
5005     }
5006   }
5007   return Changed;
5008 }
5009 
5010 bool LoopStrengthReduce::runOnLoop(Loop *L, LPPassManager & /*LPM*/) {
5011   if (skipLoop(L))
5012     return false;
5013 
5014   auto &IU = getAnalysis<IVUsersWrapperPass>().getIU();
5015   auto &SE = getAnalysis<ScalarEvolutionWrapperPass>().getSE();
5016   auto &DT = getAnalysis<DominatorTreeWrapperPass>().getDomTree();
5017   auto &LI = getAnalysis<LoopInfoWrapperPass>().getLoopInfo();
5018   const auto &TTI = getAnalysis<TargetTransformInfoWrapperPass>().getTTI(
5019       *L->getHeader()->getParent());
5020   return ReduceLoopStrength(L, IU, SE, DT, LI, TTI);
5021 }
5022 
5023 PreservedAnalyses LoopStrengthReducePass::run(Loop &L,
5024                                               LoopAnalysisManager &AM) {
5025   const auto &FAM =
5026       AM.getResult<FunctionAnalysisManagerLoopProxy>(L).getManager();
5027   Function *F = L.getHeader()->getParent();
5028 
5029   auto &IU = AM.getResult<IVUsersAnalysis>(L);
5030   auto *SE = FAM.getCachedResult<ScalarEvolutionAnalysis>(*F);
5031   auto *DT = FAM.getCachedResult<DominatorTreeAnalysis>(*F);
5032   auto *LI = FAM.getCachedResult<LoopAnalysis>(*F);
5033   auto *TTI = FAM.getCachedResult<TargetIRAnalysis>(*F);
5034   assert((SE && DT && LI && TTI) &&
5035          "Analyses for Loop Strength Reduce not available");
5036 
5037   if (!ReduceLoopStrength(&L, IU, *SE, *DT, *LI, *TTI))
5038     return PreservedAnalyses::all();
5039 
5040   return getLoopPassPreservedAnalyses();
5041 }
5042