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