1 //===- llvm/Analysis/ScalarEvolution.h - Scalar Evolution -------*- C++ -*-===// 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 // The ScalarEvolution class is an LLVM pass which can be used to analyze and 11 // categorize scalar expressions in loops. It specializes in recognizing 12 // general induction variables, representing them with the abstract and opaque 13 // SCEV class. Given this analysis, trip counts of loops and other important 14 // properties can be obtained. 15 // 16 // This analysis is primarily useful for induction variable substitution and 17 // strength reduction. 18 // 19 //===----------------------------------------------------------------------===// 20 21 #ifndef LLVM_ANALYSIS_SCALAREVOLUTION_H 22 #define LLVM_ANALYSIS_SCALAREVOLUTION_H 23 24 #include "llvm/ADT/APInt.h" 25 #include "llvm/ADT/ArrayRef.h" 26 #include "llvm/ADT/DenseMap.h" 27 #include "llvm/ADT/DenseMapInfo.h" 28 #include "llvm/ADT/FoldingSet.h" 29 #include "llvm/ADT/Hashing.h" 30 #include "llvm/ADT/Optional.h" 31 #include "llvm/ADT/PointerIntPair.h" 32 #include "llvm/ADT/SetVector.h" 33 #include "llvm/ADT/SmallPtrSet.h" 34 #include "llvm/ADT/SmallVector.h" 35 #include "llvm/Analysis/LoopInfo.h" 36 #include "llvm/IR/ConstantRange.h" 37 #include "llvm/IR/Function.h" 38 #include "llvm/IR/InstrTypes.h" 39 #include "llvm/IR/Instructions.h" 40 #include "llvm/IR/Operator.h" 41 #include "llvm/IR/PassManager.h" 42 #include "llvm/IR/ValueHandle.h" 43 #include "llvm/IR/ValueMap.h" 44 #include "llvm/Pass.h" 45 #include "llvm/Support/Allocator.h" 46 #include "llvm/Support/Casting.h" 47 #include "llvm/Support/Compiler.h" 48 #include <algorithm> 49 #include <cassert> 50 #include <cstdint> 51 #include <memory> 52 #include <utility> 53 54 namespace llvm { 55 56 class AssumptionCache; 57 class BasicBlock; 58 class Constant; 59 class ConstantInt; 60 class DataLayout; 61 class DominatorTree; 62 class GEPOperator; 63 class Instruction; 64 class LLVMContext; 65 class raw_ostream; 66 class ScalarEvolution; 67 class SCEVAddRecExpr; 68 class SCEVUnknown; 69 class StructType; 70 class TargetLibraryInfo; 71 class Type; 72 class Value; 73 74 /// This class represents an analyzed expression in the program. These are 75 /// opaque objects that the client is not allowed to do much with directly. 76 /// 77 class SCEV : public FoldingSetNode { 78 friend struct FoldingSetTrait<SCEV>; 79 80 /// A reference to an Interned FoldingSetNodeID for this node. The 81 /// ScalarEvolution's BumpPtrAllocator holds the data. 82 FoldingSetNodeIDRef FastID; 83 84 // The SCEV baseclass this node corresponds to 85 const unsigned short SCEVType; 86 87 protected: 88 /// This field is initialized to zero and may be used in subclasses to store 89 /// miscellaneous information. 90 unsigned short SubclassData = 0; 91 92 public: 93 /// NoWrapFlags are bitfield indices into SubclassData. 94 /// 95 /// Add and Mul expressions may have no-unsigned-wrap <NUW> or 96 /// no-signed-wrap <NSW> properties, which are derived from the IR 97 /// operator. NSW is a misnomer that we use to mean no signed overflow or 98 /// underflow. 99 /// 100 /// AddRec expressions may have a no-self-wraparound <NW> property if, in 101 /// the integer domain, abs(step) * max-iteration(loop) <= 102 /// unsigned-max(bitwidth). This means that the recurrence will never reach 103 /// its start value if the step is non-zero. Computing the same value on 104 /// each iteration is not considered wrapping, and recurrences with step = 0 105 /// are trivially <NW>. <NW> is independent of the sign of step and the 106 /// value the add recurrence starts with. 107 /// 108 /// Note that NUW and NSW are also valid properties of a recurrence, and 109 /// either implies NW. For convenience, NW will be set for a recurrence 110 /// whenever either NUW or NSW are set. 111 enum NoWrapFlags { 112 FlagAnyWrap = 0, // No guarantee. 113 FlagNW = (1 << 0), // No self-wrap. 114 FlagNUW = (1 << 1), // No unsigned wrap. 115 FlagNSW = (1 << 2), // No signed wrap. 116 NoWrapMask = (1 << 3) - 1 117 }; 118 119 explicit SCEV(const FoldingSetNodeIDRef ID, unsigned SCEVTy) 120 : FastID(ID), SCEVType(SCEVTy) {} 121 SCEV(const SCEV &) = delete; 122 SCEV &operator=(const SCEV &) = delete; 123 124 unsigned getSCEVType() const { return SCEVType; } 125 126 /// Return the LLVM type of this SCEV expression. 127 Type *getType() const; 128 129 /// Return true if the expression is a constant zero. 130 bool isZero() const; 131 132 /// Return true if the expression is a constant one. 133 bool isOne() const; 134 135 /// Return true if the expression is a constant all-ones value. 136 bool isAllOnesValue() const; 137 138 /// Return true if the specified scev is negated, but not a constant. 139 bool isNonConstantNegative() const; 140 141 /// Print out the internal representation of this scalar to the specified 142 /// stream. This should really only be used for debugging purposes. 143 void print(raw_ostream &OS) const; 144 145 /// This method is used for debugging. 146 void dump() const; 147 }; 148 149 // Specialize FoldingSetTrait for SCEV to avoid needing to compute 150 // temporary FoldingSetNodeID values. 151 template <> struct FoldingSetTrait<SCEV> : DefaultFoldingSetTrait<SCEV> { 152 static void Profile(const SCEV &X, FoldingSetNodeID &ID) { ID = X.FastID; } 153 154 static bool Equals(const SCEV &X, const FoldingSetNodeID &ID, unsigned IDHash, 155 FoldingSetNodeID &TempID) { 156 return ID == X.FastID; 157 } 158 159 static unsigned ComputeHash(const SCEV &X, FoldingSetNodeID &TempID) { 160 return X.FastID.ComputeHash(); 161 } 162 }; 163 164 inline raw_ostream &operator<<(raw_ostream &OS, const SCEV &S) { 165 S.print(OS); 166 return OS; 167 } 168 169 /// An object of this class is returned by queries that could not be answered. 170 /// For example, if you ask for the number of iterations of a linked-list 171 /// traversal loop, you will get one of these. None of the standard SCEV 172 /// operations are valid on this class, it is just a marker. 173 struct SCEVCouldNotCompute : public SCEV { 174 SCEVCouldNotCompute(); 175 176 /// Methods for support type inquiry through isa, cast, and dyn_cast: 177 static bool classof(const SCEV *S); 178 }; 179 180 /// This class represents an assumption made using SCEV expressions which can 181 /// be checked at run-time. 182 class SCEVPredicate : public FoldingSetNode { 183 friend struct FoldingSetTrait<SCEVPredicate>; 184 185 /// A reference to an Interned FoldingSetNodeID for this node. The 186 /// ScalarEvolution's BumpPtrAllocator holds the data. 187 FoldingSetNodeIDRef FastID; 188 189 public: 190 enum SCEVPredicateKind { P_Union, P_Equal, P_Wrap }; 191 192 protected: 193 SCEVPredicateKind Kind; 194 ~SCEVPredicate() = default; 195 SCEVPredicate(const SCEVPredicate &) = default; 196 SCEVPredicate &operator=(const SCEVPredicate &) = default; 197 198 public: 199 SCEVPredicate(const FoldingSetNodeIDRef ID, SCEVPredicateKind Kind); 200 201 SCEVPredicateKind getKind() const { return Kind; } 202 203 /// Returns the estimated complexity of this predicate. This is roughly 204 /// measured in the number of run-time checks required. 205 virtual unsigned getComplexity() const { return 1; } 206 207 /// Returns true if the predicate is always true. This means that no 208 /// assumptions were made and nothing needs to be checked at run-time. 209 virtual bool isAlwaysTrue() const = 0; 210 211 /// Returns true if this predicate implies \p N. 212 virtual bool implies(const SCEVPredicate *N) const = 0; 213 214 /// Prints a textual representation of this predicate with an indentation of 215 /// \p Depth. 216 virtual void print(raw_ostream &OS, unsigned Depth = 0) const = 0; 217 218 /// Returns the SCEV to which this predicate applies, or nullptr if this is 219 /// a SCEVUnionPredicate. 220 virtual const SCEV *getExpr() const = 0; 221 }; 222 223 inline raw_ostream &operator<<(raw_ostream &OS, const SCEVPredicate &P) { 224 P.print(OS); 225 return OS; 226 } 227 228 // Specialize FoldingSetTrait for SCEVPredicate to avoid needing to compute 229 // temporary FoldingSetNodeID values. 230 template <> 231 struct FoldingSetTrait<SCEVPredicate> : DefaultFoldingSetTrait<SCEVPredicate> { 232 static void Profile(const SCEVPredicate &X, FoldingSetNodeID &ID) { 233 ID = X.FastID; 234 } 235 236 static bool Equals(const SCEVPredicate &X, const FoldingSetNodeID &ID, 237 unsigned IDHash, FoldingSetNodeID &TempID) { 238 return ID == X.FastID; 239 } 240 241 static unsigned ComputeHash(const SCEVPredicate &X, 242 FoldingSetNodeID &TempID) { 243 return X.FastID.ComputeHash(); 244 } 245 }; 246 247 /// This class represents an assumption that two SCEV expressions are equal, 248 /// and this can be checked at run-time. 249 class SCEVEqualPredicate final : public SCEVPredicate { 250 /// We assume that LHS == RHS. 251 const SCEV *LHS; 252 const SCEV *RHS; 253 254 public: 255 SCEVEqualPredicate(const FoldingSetNodeIDRef ID, const SCEV *LHS, 256 const SCEV *RHS); 257 258 /// Implementation of the SCEVPredicate interface 259 bool implies(const SCEVPredicate *N) const override; 260 void print(raw_ostream &OS, unsigned Depth = 0) const override; 261 bool isAlwaysTrue() const override; 262 const SCEV *getExpr() const override; 263 264 /// Returns the left hand side of the equality. 265 const SCEV *getLHS() const { return LHS; } 266 267 /// Returns the right hand side of the equality. 268 const SCEV *getRHS() const { return RHS; } 269 270 /// Methods for support type inquiry through isa, cast, and dyn_cast: 271 static bool classof(const SCEVPredicate *P) { 272 return P->getKind() == P_Equal; 273 } 274 }; 275 276 /// This class represents an assumption made on an AddRec expression. Given an 277 /// affine AddRec expression {a,+,b}, we assume that it has the nssw or nusw 278 /// flags (defined below) in the first X iterations of the loop, where X is a 279 /// SCEV expression returned by getPredicatedBackedgeTakenCount). 280 /// 281 /// Note that this does not imply that X is equal to the backedge taken 282 /// count. This means that if we have a nusw predicate for i32 {0,+,1} with a 283 /// predicated backedge taken count of X, we only guarantee that {0,+,1} has 284 /// nusw in the first X iterations. {0,+,1} may still wrap in the loop if we 285 /// have more than X iterations. 286 class SCEVWrapPredicate final : public SCEVPredicate { 287 public: 288 /// Similar to SCEV::NoWrapFlags, but with slightly different semantics 289 /// for FlagNUSW. The increment is considered to be signed, and a + b 290 /// (where b is the increment) is considered to wrap if: 291 /// zext(a + b) != zext(a) + sext(b) 292 /// 293 /// If Signed is a function that takes an n-bit tuple and maps to the 294 /// integer domain as the tuples value interpreted as twos complement, 295 /// and Unsigned a function that takes an n-bit tuple and maps to the 296 /// integer domain as as the base two value of input tuple, then a + b 297 /// has IncrementNUSW iff: 298 /// 299 /// 0 <= Unsigned(a) + Signed(b) < 2^n 300 /// 301 /// The IncrementNSSW flag has identical semantics with SCEV::FlagNSW. 302 /// 303 /// Note that the IncrementNUSW flag is not commutative: if base + inc 304 /// has IncrementNUSW, then inc + base doesn't neccessarily have this 305 /// property. The reason for this is that this is used for sign/zero 306 /// extending affine AddRec SCEV expressions when a SCEVWrapPredicate is 307 /// assumed. A {base,+,inc} expression is already non-commutative with 308 /// regards to base and inc, since it is interpreted as: 309 /// (((base + inc) + inc) + inc) ... 310 enum IncrementWrapFlags { 311 IncrementAnyWrap = 0, // No guarantee. 312 IncrementNUSW = (1 << 0), // No unsigned with signed increment wrap. 313 IncrementNSSW = (1 << 1), // No signed with signed increment wrap 314 // (equivalent with SCEV::NSW) 315 IncrementNoWrapMask = (1 << 2) - 1 316 }; 317 318 /// Convenient IncrementWrapFlags manipulation methods. 319 LLVM_NODISCARD static SCEVWrapPredicate::IncrementWrapFlags 320 clearFlags(SCEVWrapPredicate::IncrementWrapFlags Flags, 321 SCEVWrapPredicate::IncrementWrapFlags OffFlags) { 322 assert((Flags & IncrementNoWrapMask) == Flags && "Invalid flags value!"); 323 assert((OffFlags & IncrementNoWrapMask) == OffFlags && 324 "Invalid flags value!"); 325 return (SCEVWrapPredicate::IncrementWrapFlags)(Flags & ~OffFlags); 326 } 327 328 LLVM_NODISCARD static SCEVWrapPredicate::IncrementWrapFlags 329 maskFlags(SCEVWrapPredicate::IncrementWrapFlags Flags, int Mask) { 330 assert((Flags & IncrementNoWrapMask) == Flags && "Invalid flags value!"); 331 assert((Mask & IncrementNoWrapMask) == Mask && "Invalid mask value!"); 332 333 return (SCEVWrapPredicate::IncrementWrapFlags)(Flags & Mask); 334 } 335 336 LLVM_NODISCARD static SCEVWrapPredicate::IncrementWrapFlags 337 setFlags(SCEVWrapPredicate::IncrementWrapFlags Flags, 338 SCEVWrapPredicate::IncrementWrapFlags OnFlags) { 339 assert((Flags & IncrementNoWrapMask) == Flags && "Invalid flags value!"); 340 assert((OnFlags & IncrementNoWrapMask) == OnFlags && 341 "Invalid flags value!"); 342 343 return (SCEVWrapPredicate::IncrementWrapFlags)(Flags | OnFlags); 344 } 345 346 /// Returns the set of SCEVWrapPredicate no wrap flags implied by a 347 /// SCEVAddRecExpr. 348 LLVM_NODISCARD static SCEVWrapPredicate::IncrementWrapFlags 349 getImpliedFlags(const SCEVAddRecExpr *AR, ScalarEvolution &SE); 350 351 private: 352 const SCEVAddRecExpr *AR; 353 IncrementWrapFlags Flags; 354 355 public: 356 explicit SCEVWrapPredicate(const FoldingSetNodeIDRef ID, 357 const SCEVAddRecExpr *AR, 358 IncrementWrapFlags Flags); 359 360 /// Returns the set assumed no overflow flags. 361 IncrementWrapFlags getFlags() const { return Flags; } 362 363 /// Implementation of the SCEVPredicate interface 364 const SCEV *getExpr() const override; 365 bool implies(const SCEVPredicate *N) const override; 366 void print(raw_ostream &OS, unsigned Depth = 0) const override; 367 bool isAlwaysTrue() const override; 368 369 /// Methods for support type inquiry through isa, cast, and dyn_cast: 370 static bool classof(const SCEVPredicate *P) { 371 return P->getKind() == P_Wrap; 372 } 373 }; 374 375 /// This class represents a composition of other SCEV predicates, and is the 376 /// class that most clients will interact with. This is equivalent to a 377 /// logical "AND" of all the predicates in the union. 378 /// 379 /// NB! Unlike other SCEVPredicate sub-classes this class does not live in the 380 /// ScalarEvolution::Preds folding set. This is why the \c add function is sound. 381 class SCEVUnionPredicate final : public SCEVPredicate { 382 private: 383 using PredicateMap = 384 DenseMap<const SCEV *, SmallVector<const SCEVPredicate *, 4>>; 385 386 /// Vector with references to all predicates in this union. 387 SmallVector<const SCEVPredicate *, 16> Preds; 388 389 /// Maps SCEVs to predicates for quick look-ups. 390 PredicateMap SCEVToPreds; 391 392 public: 393 SCEVUnionPredicate(); 394 395 const SmallVectorImpl<const SCEVPredicate *> &getPredicates() const { 396 return Preds; 397 } 398 399 /// Adds a predicate to this union. 400 void add(const SCEVPredicate *N); 401 402 /// Returns a reference to a vector containing all predicates which apply to 403 /// \p Expr. 404 ArrayRef<const SCEVPredicate *> getPredicatesForExpr(const SCEV *Expr); 405 406 /// Implementation of the SCEVPredicate interface 407 bool isAlwaysTrue() const override; 408 bool implies(const SCEVPredicate *N) const override; 409 void print(raw_ostream &OS, unsigned Depth) const override; 410 const SCEV *getExpr() const override; 411 412 /// We estimate the complexity of a union predicate as the size number of 413 /// predicates in the union. 414 unsigned getComplexity() const override { return Preds.size(); } 415 416 /// Methods for support type inquiry through isa, cast, and dyn_cast: 417 static bool classof(const SCEVPredicate *P) { 418 return P->getKind() == P_Union; 419 } 420 }; 421 422 struct ExitLimitQuery { 423 ExitLimitQuery(const Loop *L, BasicBlock *ExitingBlock, bool AllowPredicates) 424 : L(L), ExitingBlock(ExitingBlock), AllowPredicates(AllowPredicates) {} 425 426 const Loop *L; 427 BasicBlock *ExitingBlock; 428 bool AllowPredicates; 429 }; 430 431 template <> struct DenseMapInfo<ExitLimitQuery> { 432 static inline ExitLimitQuery getEmptyKey() { 433 return ExitLimitQuery(nullptr, nullptr, true); 434 } 435 436 static inline ExitLimitQuery getTombstoneKey() { 437 return ExitLimitQuery(nullptr, nullptr, false); 438 } 439 440 static unsigned getHashValue(ExitLimitQuery Val) { 441 return hash_combine(hash_combine(Val.L, Val.ExitingBlock), 442 Val.AllowPredicates); 443 } 444 445 static bool isEqual(ExitLimitQuery LHS, ExitLimitQuery RHS) { 446 return LHS.L == RHS.L && LHS.ExitingBlock == RHS.ExitingBlock && 447 LHS.AllowPredicates == RHS.AllowPredicates; 448 } 449 }; 450 451 /// The main scalar evolution driver. Because client code (intentionally) 452 /// can't do much with the SCEV objects directly, they must ask this class 453 /// for services. 454 class ScalarEvolution { 455 public: 456 /// An enum describing the relationship between a SCEV and a loop. 457 enum LoopDisposition { 458 LoopVariant, ///< The SCEV is loop-variant (unknown). 459 LoopInvariant, ///< The SCEV is loop-invariant. 460 LoopComputable ///< The SCEV varies predictably with the loop. 461 }; 462 463 /// An enum describing the relationship between a SCEV and a basic block. 464 enum BlockDisposition { 465 DoesNotDominateBlock, ///< The SCEV does not dominate the block. 466 DominatesBlock, ///< The SCEV dominates the block. 467 ProperlyDominatesBlock ///< The SCEV properly dominates the block. 468 }; 469 470 /// Convenient NoWrapFlags manipulation that hides enum casts and is 471 /// visible in the ScalarEvolution name space. 472 LLVM_NODISCARD static SCEV::NoWrapFlags maskFlags(SCEV::NoWrapFlags Flags, 473 int Mask) { 474 return (SCEV::NoWrapFlags)(Flags & Mask); 475 } 476 LLVM_NODISCARD static SCEV::NoWrapFlags setFlags(SCEV::NoWrapFlags Flags, 477 SCEV::NoWrapFlags OnFlags) { 478 return (SCEV::NoWrapFlags)(Flags | OnFlags); 479 } 480 LLVM_NODISCARD static SCEV::NoWrapFlags 481 clearFlags(SCEV::NoWrapFlags Flags, SCEV::NoWrapFlags OffFlags) { 482 return (SCEV::NoWrapFlags)(Flags & ~OffFlags); 483 } 484 485 ScalarEvolution(Function &F, TargetLibraryInfo &TLI, AssumptionCache &AC, 486 DominatorTree &DT, LoopInfo &LI); 487 ScalarEvolution(ScalarEvolution &&Arg); 488 ~ScalarEvolution(); 489 490 LLVMContext &getContext() const { return F.getContext(); } 491 492 /// Test if values of the given type are analyzable within the SCEV 493 /// framework. This primarily includes integer types, and it can optionally 494 /// include pointer types if the ScalarEvolution class has access to 495 /// target-specific information. 496 bool isSCEVable(Type *Ty) const; 497 498 /// Return the size in bits of the specified type, for which isSCEVable must 499 /// return true. 500 uint64_t getTypeSizeInBits(Type *Ty) const; 501 502 /// Return a type with the same bitwidth as the given type and which 503 /// represents how SCEV will treat the given type, for which isSCEVable must 504 /// return true. For pointer types, this is the pointer-sized integer type. 505 Type *getEffectiveSCEVType(Type *Ty) const; 506 507 // Returns a wider type among {Ty1, Ty2}. 508 Type *getWiderType(Type *Ty1, Type *Ty2) const; 509 510 /// Return true if the SCEV is a scAddRecExpr or it contains 511 /// scAddRecExpr. The result will be cached in HasRecMap. 512 bool containsAddRecurrence(const SCEV *S); 513 514 /// Erase Value from ValueExprMap and ExprValueMap. 515 void eraseValueFromMap(Value *V); 516 517 /// Return a SCEV expression for the full generality of the specified 518 /// expression. 519 const SCEV *getSCEV(Value *V); 520 521 const SCEV *getConstant(ConstantInt *V); 522 const SCEV *getConstant(const APInt &Val); 523 const SCEV *getConstant(Type *Ty, uint64_t V, bool isSigned = false); 524 const SCEV *getTruncateExpr(const SCEV *Op, Type *Ty); 525 const SCEV *getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0); 526 const SCEV *getSignExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0); 527 const SCEV *getAnyExtendExpr(const SCEV *Op, Type *Ty); 528 const SCEV *getAddExpr(SmallVectorImpl<const SCEV *> &Ops, 529 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 530 unsigned Depth = 0); 531 const SCEV *getAddExpr(const SCEV *LHS, const SCEV *RHS, 532 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 533 unsigned Depth = 0) { 534 SmallVector<const SCEV *, 2> Ops = {LHS, RHS}; 535 return getAddExpr(Ops, Flags, Depth); 536 } 537 const SCEV *getAddExpr(const SCEV *Op0, const SCEV *Op1, const SCEV *Op2, 538 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 539 unsigned Depth = 0) { 540 SmallVector<const SCEV *, 3> Ops = {Op0, Op1, Op2}; 541 return getAddExpr(Ops, Flags, Depth); 542 } 543 const SCEV *getMulExpr(SmallVectorImpl<const SCEV *> &Ops, 544 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 545 unsigned Depth = 0); 546 const SCEV *getMulExpr(const SCEV *LHS, const SCEV *RHS, 547 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 548 unsigned Depth = 0) { 549 SmallVector<const SCEV *, 2> Ops = {LHS, RHS}; 550 return getMulExpr(Ops, Flags, Depth); 551 } 552 const SCEV *getMulExpr(const SCEV *Op0, const SCEV *Op1, const SCEV *Op2, 553 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 554 unsigned Depth = 0) { 555 SmallVector<const SCEV *, 3> Ops = {Op0, Op1, Op2}; 556 return getMulExpr(Ops, Flags, Depth); 557 } 558 const SCEV *getUDivExpr(const SCEV *LHS, const SCEV *RHS); 559 const SCEV *getUDivExactExpr(const SCEV *LHS, const SCEV *RHS); 560 const SCEV *getURemExpr(const SCEV *LHS, const SCEV *RHS); 561 const SCEV *getAddRecExpr(const SCEV *Start, const SCEV *Step, const Loop *L, 562 SCEV::NoWrapFlags Flags); 563 const SCEV *getAddRecExpr(SmallVectorImpl<const SCEV *> &Operands, 564 const Loop *L, SCEV::NoWrapFlags Flags); 565 const SCEV *getAddRecExpr(const SmallVectorImpl<const SCEV *> &Operands, 566 const Loop *L, SCEV::NoWrapFlags Flags) { 567 SmallVector<const SCEV *, 4> NewOp(Operands.begin(), Operands.end()); 568 return getAddRecExpr(NewOp, L, Flags); 569 } 570 571 /// Checks if \p SymbolicPHI can be rewritten as an AddRecExpr under some 572 /// Predicates. If successful return these <AddRecExpr, Predicates>; 573 /// The function is intended to be called from PSCEV (the caller will decide 574 /// whether to actually add the predicates and carry out the rewrites). 575 Optional<std::pair<const SCEV *, SmallVector<const SCEVPredicate *, 3>>> 576 createAddRecFromPHIWithCasts(const SCEVUnknown *SymbolicPHI); 577 578 /// Returns an expression for a GEP 579 /// 580 /// \p GEP The GEP. The indices contained in the GEP itself are ignored, 581 /// instead we use IndexExprs. 582 /// \p IndexExprs The expressions for the indices. 583 const SCEV *getGEPExpr(GEPOperator *GEP, 584 const SmallVectorImpl<const SCEV *> &IndexExprs); 585 const SCEV *getSMaxExpr(const SCEV *LHS, const SCEV *RHS); 586 const SCEV *getSMaxExpr(SmallVectorImpl<const SCEV *> &Operands); 587 const SCEV *getUMaxExpr(const SCEV *LHS, const SCEV *RHS); 588 const SCEV *getUMaxExpr(SmallVectorImpl<const SCEV *> &Operands); 589 const SCEV *getSMinExpr(const SCEV *LHS, const SCEV *RHS); 590 const SCEV *getSMinExpr(SmallVectorImpl<const SCEV *> &Operands); 591 const SCEV *getUMinExpr(const SCEV *LHS, const SCEV *RHS); 592 const SCEV *getUMinExpr(SmallVectorImpl<const SCEV *> &Operands); 593 const SCEV *getUnknown(Value *V); 594 const SCEV *getCouldNotCompute(); 595 596 /// Return a SCEV for the constant 0 of a specific type. 597 const SCEV *getZero(Type *Ty) { return getConstant(Ty, 0); } 598 599 /// Return a SCEV for the constant 1 of a specific type. 600 const SCEV *getOne(Type *Ty) { return getConstant(Ty, 1); } 601 602 /// Return an expression for sizeof AllocTy that is type IntTy 603 const SCEV *getSizeOfExpr(Type *IntTy, Type *AllocTy); 604 605 /// Return an expression for offsetof on the given field with type IntTy 606 const SCEV *getOffsetOfExpr(Type *IntTy, StructType *STy, unsigned FieldNo); 607 608 /// Return the SCEV object corresponding to -V. 609 const SCEV *getNegativeSCEV(const SCEV *V, 610 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap); 611 612 /// Return the SCEV object corresponding to ~V. 613 const SCEV *getNotSCEV(const SCEV *V); 614 615 /// Return LHS-RHS. Minus is represented in SCEV as A+B*-1. 616 const SCEV *getMinusSCEV(const SCEV *LHS, const SCEV *RHS, 617 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 618 unsigned Depth = 0); 619 620 /// Return a SCEV corresponding to a conversion of the input value to the 621 /// specified type. If the type must be extended, it is zero extended. 622 const SCEV *getTruncateOrZeroExtend(const SCEV *V, Type *Ty); 623 624 /// Return a SCEV corresponding to a conversion of the input value to the 625 /// specified type. If the type must be extended, it is sign extended. 626 const SCEV *getTruncateOrSignExtend(const SCEV *V, Type *Ty); 627 628 /// Return a SCEV corresponding to a conversion of the input value to the 629 /// specified type. If the type must be extended, it is zero extended. The 630 /// conversion must not be narrowing. 631 const SCEV *getNoopOrZeroExtend(const SCEV *V, Type *Ty); 632 633 /// Return a SCEV corresponding to a conversion of the input value to the 634 /// specified type. If the type must be extended, it is sign extended. The 635 /// conversion must not be narrowing. 636 const SCEV *getNoopOrSignExtend(const SCEV *V, Type *Ty); 637 638 /// Return a SCEV corresponding to a conversion of the input value to the 639 /// specified type. If the type must be extended, it is extended with 640 /// unspecified bits. The conversion must not be narrowing. 641 const SCEV *getNoopOrAnyExtend(const SCEV *V, Type *Ty); 642 643 /// Return a SCEV corresponding to a conversion of the input value to the 644 /// specified type. The conversion must not be widening. 645 const SCEV *getTruncateOrNoop(const SCEV *V, Type *Ty); 646 647 /// Promote the operands to the wider of the types using zero-extension, and 648 /// then perform a umax operation with them. 649 const SCEV *getUMaxFromMismatchedTypes(const SCEV *LHS, const SCEV *RHS); 650 651 /// Promote the operands to the wider of the types using zero-extension, and 652 /// then perform a umin operation with them. 653 const SCEV *getUMinFromMismatchedTypes(const SCEV *LHS, const SCEV *RHS); 654 655 /// Promote the operands to the wider of the types using zero-extension, and 656 /// then perform a umin operation with them. N-ary function. 657 const SCEV *getUMinFromMismatchedTypes(SmallVectorImpl<const SCEV *> &Ops); 658 659 /// Transitively follow the chain of pointer-type operands until reaching a 660 /// SCEV that does not have a single pointer operand. This returns a 661 /// SCEVUnknown pointer for well-formed pointer-type expressions, but corner 662 /// cases do exist. 663 const SCEV *getPointerBase(const SCEV *V); 664 665 /// Return a SCEV expression for the specified value at the specified scope 666 /// in the program. The L value specifies a loop nest to evaluate the 667 /// expression at, where null is the top-level or a specified loop is 668 /// immediately inside of the loop. 669 /// 670 /// This method can be used to compute the exit value for a variable defined 671 /// in a loop by querying what the value will hold in the parent loop. 672 /// 673 /// In the case that a relevant loop exit value cannot be computed, the 674 /// original value V is returned. 675 const SCEV *getSCEVAtScope(const SCEV *S, const Loop *L); 676 677 /// This is a convenience function which does getSCEVAtScope(getSCEV(V), L). 678 const SCEV *getSCEVAtScope(Value *V, const Loop *L); 679 680 /// Test whether entry to the loop is protected by a conditional between LHS 681 /// and RHS. This is used to help avoid max expressions in loop trip 682 /// counts, and to eliminate casts. 683 bool isLoopEntryGuardedByCond(const Loop *L, ICmpInst::Predicate Pred, 684 const SCEV *LHS, const SCEV *RHS); 685 686 /// Test whether the backedge of the loop is protected by a conditional 687 /// between LHS and RHS. This is used to eliminate casts. 688 bool isLoopBackedgeGuardedByCond(const Loop *L, ICmpInst::Predicate Pred, 689 const SCEV *LHS, const SCEV *RHS); 690 691 /// Returns the maximum trip count of the loop if it is a single-exit 692 /// loop and we can compute a small maximum for that loop. 693 /// 694 /// Implemented in terms of the \c getSmallConstantTripCount overload with 695 /// the single exiting block passed to it. See that routine for details. 696 unsigned getSmallConstantTripCount(const Loop *L); 697 698 /// Returns the maximum trip count of this loop as a normal unsigned 699 /// value. Returns 0 if the trip count is unknown or not constant. This 700 /// "trip count" assumes that control exits via ExitingBlock. More 701 /// precisely, it is the number of times that control may reach ExitingBlock 702 /// before taking the branch. For loops with multiple exits, it may not be 703 /// the number times that the loop header executes if the loop exits 704 /// prematurely via another branch. 705 unsigned getSmallConstantTripCount(const Loop *L, BasicBlock *ExitingBlock); 706 707 /// Returns the upper bound of the loop trip count as a normal unsigned 708 /// value. 709 /// Returns 0 if the trip count is unknown or not constant. 710 unsigned getSmallConstantMaxTripCount(const Loop *L); 711 712 /// Returns the largest constant divisor of the trip count of the 713 /// loop if it is a single-exit loop and we can compute a small maximum for 714 /// that loop. 715 /// 716 /// Implemented in terms of the \c getSmallConstantTripMultiple overload with 717 /// the single exiting block passed to it. See that routine for details. 718 unsigned getSmallConstantTripMultiple(const Loop *L); 719 720 /// Returns the largest constant divisor of the trip count of this loop as a 721 /// normal unsigned value, if possible. This means that the actual trip 722 /// count is always a multiple of the returned value (don't forget the trip 723 /// count could very well be zero as well!). As explained in the comments 724 /// for getSmallConstantTripCount, this assumes that control exits the loop 725 /// via ExitingBlock. 726 unsigned getSmallConstantTripMultiple(const Loop *L, 727 BasicBlock *ExitingBlock); 728 729 /// Get the expression for the number of loop iterations for which this loop 730 /// is guaranteed not to exit via ExitingBlock. Otherwise return 731 /// SCEVCouldNotCompute. 732 const SCEV *getExitCount(const Loop *L, BasicBlock *ExitingBlock); 733 734 /// If the specified loop has a predictable backedge-taken count, return it, 735 /// otherwise return a SCEVCouldNotCompute object. The backedge-taken count is 736 /// the number of times the loop header will be branched to from within the 737 /// loop, assuming there are no abnormal exists like exception throws. This is 738 /// one less than the trip count of the loop, since it doesn't count the first 739 /// iteration, when the header is branched to from outside the loop. 740 /// 741 /// Note that it is not valid to call this method on a loop without a 742 /// loop-invariant backedge-taken count (see 743 /// hasLoopInvariantBackedgeTakenCount). 744 const SCEV *getBackedgeTakenCount(const Loop *L); 745 746 /// Similar to getBackedgeTakenCount, except it will add a set of 747 /// SCEV predicates to Predicates that are required to be true in order for 748 /// the answer to be correct. Predicates can be checked with run-time 749 /// checks and can be used to perform loop versioning. 750 const SCEV *getPredicatedBackedgeTakenCount(const Loop *L, 751 SCEVUnionPredicate &Predicates); 752 753 /// When successful, this returns a SCEVConstant that is greater than or equal 754 /// to (i.e. a "conservative over-approximation") of the value returend by 755 /// getBackedgeTakenCount. If such a value cannot be computed, it returns the 756 /// SCEVCouldNotCompute object. 757 const SCEV *getMaxBackedgeTakenCount(const Loop *L); 758 759 /// Return true if the backedge taken count is either the value returned by 760 /// getMaxBackedgeTakenCount or zero. 761 bool isBackedgeTakenCountMaxOrZero(const Loop *L); 762 763 /// Return true if the specified loop has an analyzable loop-invariant 764 /// backedge-taken count. 765 bool hasLoopInvariantBackedgeTakenCount(const Loop *L); 766 767 /// This method should be called by the client when it has changed a loop in 768 /// a way that may effect ScalarEvolution's ability to compute a trip count, 769 /// or if the loop is deleted. This call is potentially expensive for large 770 /// loop bodies. 771 void forgetLoop(const Loop *L); 772 773 // This method invokes forgetLoop for the outermost loop of the given loop 774 // \p L, making ScalarEvolution forget about all this subtree. This needs to 775 // be done whenever we make a transform that may affect the parameters of the 776 // outer loop, such as exit counts for branches. 777 void forgetTopmostLoop(const Loop *L); 778 779 /// This method should be called by the client when it has changed a value 780 /// in a way that may effect its value, or which may disconnect it from a 781 /// def-use chain linking it to a loop. 782 void forgetValue(Value *V); 783 784 /// Called when the client has changed the disposition of values in 785 /// this loop. 786 /// 787 /// We don't have a way to invalidate per-loop dispositions. Clear and 788 /// recompute is simpler. 789 void forgetLoopDispositions(const Loop *L) { LoopDispositions.clear(); } 790 791 /// Determine the minimum number of zero bits that S is guaranteed to end in 792 /// (at every loop iteration). It is, at the same time, the minimum number 793 /// of times S is divisible by 2. For example, given {4,+,8} it returns 2. 794 /// If S is guaranteed to be 0, it returns the bitwidth of S. 795 uint32_t GetMinTrailingZeros(const SCEV *S); 796 797 /// Determine the unsigned range for a particular SCEV. 798 /// NOTE: This returns a copy of the reference returned by getRangeRef. 799 ConstantRange getUnsignedRange(const SCEV *S) { 800 return getRangeRef(S, HINT_RANGE_UNSIGNED); 801 } 802 803 /// Determine the min of the unsigned range for a particular SCEV. 804 APInt getUnsignedRangeMin(const SCEV *S) { 805 return getRangeRef(S, HINT_RANGE_UNSIGNED).getUnsignedMin(); 806 } 807 808 /// Determine the max of the unsigned range for a particular SCEV. 809 APInt getUnsignedRangeMax(const SCEV *S) { 810 return getRangeRef(S, HINT_RANGE_UNSIGNED).getUnsignedMax(); 811 } 812 813 /// Determine the signed range for a particular SCEV. 814 /// NOTE: This returns a copy of the reference returned by getRangeRef. 815 ConstantRange getSignedRange(const SCEV *S) { 816 return getRangeRef(S, HINT_RANGE_SIGNED); 817 } 818 819 /// Determine the min of the signed range for a particular SCEV. 820 APInt getSignedRangeMin(const SCEV *S) { 821 return getRangeRef(S, HINT_RANGE_SIGNED).getSignedMin(); 822 } 823 824 /// Determine the max of the signed range for a particular SCEV. 825 APInt getSignedRangeMax(const SCEV *S) { 826 return getRangeRef(S, HINT_RANGE_SIGNED).getSignedMax(); 827 } 828 829 /// Test if the given expression is known to be negative. 830 bool isKnownNegative(const SCEV *S); 831 832 /// Test if the given expression is known to be positive. 833 bool isKnownPositive(const SCEV *S); 834 835 /// Test if the given expression is known to be non-negative. 836 bool isKnownNonNegative(const SCEV *S); 837 838 /// Test if the given expression is known to be non-positive. 839 bool isKnownNonPositive(const SCEV *S); 840 841 /// Test if the given expression is known to be non-zero. 842 bool isKnownNonZero(const SCEV *S); 843 844 /// Splits SCEV expression \p S into two SCEVs. One of them is obtained from 845 /// \p S by substitution of all AddRec sub-expression related to loop \p L 846 /// with initial value of that SCEV. The second is obtained from \p S by 847 /// substitution of all AddRec sub-expressions related to loop \p L with post 848 /// increment of this AddRec in the loop \p L. In both cases all other AddRec 849 /// sub-expressions (not related to \p L) remain the same. 850 /// If the \p S contains non-invariant unknown SCEV the function returns 851 /// CouldNotCompute SCEV in both values of std::pair. 852 /// For example, for SCEV S={0, +, 1}<L1> + {0, +, 1}<L2> and loop L=L1 853 /// the function returns pair: 854 /// first = {0, +, 1}<L2> 855 /// second = {1, +, 1}<L1> + {0, +, 1}<L2> 856 /// We can see that for the first AddRec sub-expression it was replaced with 857 /// 0 (initial value) for the first element and to {1, +, 1}<L1> (post 858 /// increment value) for the second one. In both cases AddRec expression 859 /// related to L2 remains the same. 860 std::pair<const SCEV *, const SCEV *> SplitIntoInitAndPostInc(const Loop *L, 861 const SCEV *S); 862 863 /// We'd like to check the predicate on every iteration of the most dominated 864 /// loop between loops used in LHS and RHS. 865 /// To do this we use the following list of steps: 866 /// 1. Collect set S all loops on which either LHS or RHS depend. 867 /// 2. If S is non-empty 868 /// a. Let PD be the element of S which is dominated by all other elements. 869 /// b. Let E(LHS) be value of LHS on entry of PD. 870 /// To get E(LHS), we should just take LHS and replace all AddRecs that are 871 /// attached to PD on with their entry values. 872 /// Define E(RHS) in the same way. 873 /// c. Let B(LHS) be value of L on backedge of PD. 874 /// To get B(LHS), we should just take LHS and replace all AddRecs that are 875 /// attached to PD on with their backedge values. 876 /// Define B(RHS) in the same way. 877 /// d. Note that E(LHS) and E(RHS) are automatically available on entry of PD, 878 /// so we can assert on that. 879 /// e. Return true if isLoopEntryGuardedByCond(Pred, E(LHS), E(RHS)) && 880 /// isLoopBackedgeGuardedByCond(Pred, B(LHS), B(RHS)) 881 bool isKnownViaInduction(ICmpInst::Predicate Pred, const SCEV *LHS, 882 const SCEV *RHS); 883 884 /// Test if the given expression is known to satisfy the condition described 885 /// by Pred, LHS, and RHS. 886 bool isKnownPredicate(ICmpInst::Predicate Pred, const SCEV *LHS, 887 const SCEV *RHS); 888 889 /// Test if the condition described by Pred, LHS, RHS is known to be true on 890 /// every iteration of the loop of the recurrency LHS. 891 bool isKnownOnEveryIteration(ICmpInst::Predicate Pred, 892 const SCEVAddRecExpr *LHS, const SCEV *RHS); 893 894 /// Return true if, for all loop invariant X, the predicate "LHS `Pred` X" 895 /// is monotonically increasing or decreasing. In the former case set 896 /// `Increasing` to true and in the latter case set `Increasing` to false. 897 /// 898 /// A predicate is said to be monotonically increasing if may go from being 899 /// false to being true as the loop iterates, but never the other way 900 /// around. A predicate is said to be monotonically decreasing if may go 901 /// from being true to being false as the loop iterates, but never the other 902 /// way around. 903 bool isMonotonicPredicate(const SCEVAddRecExpr *LHS, ICmpInst::Predicate Pred, 904 bool &Increasing); 905 906 /// Return true if the result of the predicate LHS `Pred` RHS is loop 907 /// invariant with respect to L. Set InvariantPred, InvariantLHS and 908 /// InvariantLHS so that InvariantLHS `InvariantPred` InvariantRHS is the 909 /// loop invariant form of LHS `Pred` RHS. 910 bool isLoopInvariantPredicate(ICmpInst::Predicate Pred, const SCEV *LHS, 911 const SCEV *RHS, const Loop *L, 912 ICmpInst::Predicate &InvariantPred, 913 const SCEV *&InvariantLHS, 914 const SCEV *&InvariantRHS); 915 916 /// Simplify LHS and RHS in a comparison with predicate Pred. Return true 917 /// iff any changes were made. If the operands are provably equal or 918 /// unequal, LHS and RHS are set to the same value and Pred is set to either 919 /// ICMP_EQ or ICMP_NE. 920 bool SimplifyICmpOperands(ICmpInst::Predicate &Pred, const SCEV *&LHS, 921 const SCEV *&RHS, unsigned Depth = 0); 922 923 /// Return the "disposition" of the given SCEV with respect to the given 924 /// loop. 925 LoopDisposition getLoopDisposition(const SCEV *S, const Loop *L); 926 927 /// Return true if the value of the given SCEV is unchanging in the 928 /// specified loop. 929 bool isLoopInvariant(const SCEV *S, const Loop *L); 930 931 /// Determine if the SCEV can be evaluated at loop's entry. It is true if it 932 /// doesn't depend on a SCEVUnknown of an instruction which is dominated by 933 /// the header of loop L. 934 bool isAvailableAtLoopEntry(const SCEV *S, const Loop *L); 935 936 /// Return true if the given SCEV changes value in a known way in the 937 /// specified loop. This property being true implies that the value is 938 /// variant in the loop AND that we can emit an expression to compute the 939 /// value of the expression at any particular loop iteration. 940 bool hasComputableLoopEvolution(const SCEV *S, const Loop *L); 941 942 /// Return the "disposition" of the given SCEV with respect to the given 943 /// block. 944 BlockDisposition getBlockDisposition(const SCEV *S, const BasicBlock *BB); 945 946 /// Return true if elements that makes up the given SCEV dominate the 947 /// specified basic block. 948 bool dominates(const SCEV *S, const BasicBlock *BB); 949 950 /// Return true if elements that makes up the given SCEV properly dominate 951 /// the specified basic block. 952 bool properlyDominates(const SCEV *S, const BasicBlock *BB); 953 954 /// Test whether the given SCEV has Op as a direct or indirect operand. 955 bool hasOperand(const SCEV *S, const SCEV *Op) const; 956 957 /// Return the size of an element read or written by Inst. 958 const SCEV *getElementSize(Instruction *Inst); 959 960 /// Compute the array dimensions Sizes from the set of Terms extracted from 961 /// the memory access function of this SCEVAddRecExpr (second step of 962 /// delinearization). 963 void findArrayDimensions(SmallVectorImpl<const SCEV *> &Terms, 964 SmallVectorImpl<const SCEV *> &Sizes, 965 const SCEV *ElementSize); 966 967 void print(raw_ostream &OS) const; 968 void verify() const; 969 bool invalidate(Function &F, const PreservedAnalyses &PA, 970 FunctionAnalysisManager::Invalidator &Inv); 971 972 /// Collect parametric terms occurring in step expressions (first step of 973 /// delinearization). 974 void collectParametricTerms(const SCEV *Expr, 975 SmallVectorImpl<const SCEV *> &Terms); 976 977 /// Return in Subscripts the access functions for each dimension in Sizes 978 /// (third step of delinearization). 979 void computeAccessFunctions(const SCEV *Expr, 980 SmallVectorImpl<const SCEV *> &Subscripts, 981 SmallVectorImpl<const SCEV *> &Sizes); 982 983 /// Split this SCEVAddRecExpr into two vectors of SCEVs representing the 984 /// subscripts and sizes of an array access. 985 /// 986 /// The delinearization is a 3 step process: the first two steps compute the 987 /// sizes of each subscript and the third step computes the access functions 988 /// for the delinearized array: 989 /// 990 /// 1. Find the terms in the step functions 991 /// 2. Compute the array size 992 /// 3. Compute the access function: divide the SCEV by the array size 993 /// starting with the innermost dimensions found in step 2. The Quotient 994 /// is the SCEV to be divided in the next step of the recursion. The 995 /// Remainder is the subscript of the innermost dimension. Loop over all 996 /// array dimensions computed in step 2. 997 /// 998 /// To compute a uniform array size for several memory accesses to the same 999 /// object, one can collect in step 1 all the step terms for all the memory 1000 /// accesses, and compute in step 2 a unique array shape. This guarantees 1001 /// that the array shape will be the same across all memory accesses. 1002 /// 1003 /// FIXME: We could derive the result of steps 1 and 2 from a description of 1004 /// the array shape given in metadata. 1005 /// 1006 /// Example: 1007 /// 1008 /// A[][n][m] 1009 /// 1010 /// for i 1011 /// for j 1012 /// for k 1013 /// A[j+k][2i][5i] = 1014 /// 1015 /// The initial SCEV: 1016 /// 1017 /// A[{{{0,+,2*m+5}_i, +, n*m}_j, +, n*m}_k] 1018 /// 1019 /// 1. Find the different terms in the step functions: 1020 /// -> [2*m, 5, n*m, n*m] 1021 /// 1022 /// 2. Compute the array size: sort and unique them 1023 /// -> [n*m, 2*m, 5] 1024 /// find the GCD of all the terms = 1 1025 /// divide by the GCD and erase constant terms 1026 /// -> [n*m, 2*m] 1027 /// GCD = m 1028 /// divide by GCD -> [n, 2] 1029 /// remove constant terms 1030 /// -> [n] 1031 /// size of the array is A[unknown][n][m] 1032 /// 1033 /// 3. Compute the access function 1034 /// a. Divide {{{0,+,2*m+5}_i, +, n*m}_j, +, n*m}_k by the innermost size m 1035 /// Quotient: {{{0,+,2}_i, +, n}_j, +, n}_k 1036 /// Remainder: {{{0,+,5}_i, +, 0}_j, +, 0}_k 1037 /// The remainder is the subscript of the innermost array dimension: [5i]. 1038 /// 1039 /// b. Divide Quotient: {{{0,+,2}_i, +, n}_j, +, n}_k by next outer size n 1040 /// Quotient: {{{0,+,0}_i, +, 1}_j, +, 1}_k 1041 /// Remainder: {{{0,+,2}_i, +, 0}_j, +, 0}_k 1042 /// The Remainder is the subscript of the next array dimension: [2i]. 1043 /// 1044 /// The subscript of the outermost dimension is the Quotient: [j+k]. 1045 /// 1046 /// Overall, we have: A[][n][m], and the access function: A[j+k][2i][5i]. 1047 void delinearize(const SCEV *Expr, SmallVectorImpl<const SCEV *> &Subscripts, 1048 SmallVectorImpl<const SCEV *> &Sizes, 1049 const SCEV *ElementSize); 1050 1051 /// Return the DataLayout associated with the module this SCEV instance is 1052 /// operating on. 1053 const DataLayout &getDataLayout() const { 1054 return F.getParent()->getDataLayout(); 1055 } 1056 1057 const SCEVPredicate *getEqualPredicate(const SCEV *LHS, const SCEV *RHS); 1058 1059 const SCEVPredicate * 1060 getWrapPredicate(const SCEVAddRecExpr *AR, 1061 SCEVWrapPredicate::IncrementWrapFlags AddedFlags); 1062 1063 /// Re-writes the SCEV according to the Predicates in \p A. 1064 const SCEV *rewriteUsingPredicate(const SCEV *S, const Loop *L, 1065 SCEVUnionPredicate &A); 1066 /// Tries to convert the \p S expression to an AddRec expression, 1067 /// adding additional predicates to \p Preds as required. 1068 const SCEVAddRecExpr *convertSCEVToAddRecWithPredicates( 1069 const SCEV *S, const Loop *L, 1070 SmallPtrSetImpl<const SCEVPredicate *> &Preds); 1071 1072 private: 1073 /// A CallbackVH to arrange for ScalarEvolution to be notified whenever a 1074 /// Value is deleted. 1075 class SCEVCallbackVH final : public CallbackVH { 1076 ScalarEvolution *SE; 1077 1078 void deleted() override; 1079 void allUsesReplacedWith(Value *New) override; 1080 1081 public: 1082 SCEVCallbackVH(Value *V, ScalarEvolution *SE = nullptr); 1083 }; 1084 1085 friend class SCEVCallbackVH; 1086 friend class SCEVExpander; 1087 friend class SCEVUnknown; 1088 1089 /// The function we are analyzing. 1090 Function &F; 1091 1092 /// Does the module have any calls to the llvm.experimental.guard intrinsic 1093 /// at all? If this is false, we avoid doing work that will only help if 1094 /// thare are guards present in the IR. 1095 bool HasGuards; 1096 1097 /// The target library information for the target we are targeting. 1098 TargetLibraryInfo &TLI; 1099 1100 /// The tracker for \@llvm.assume intrinsics in this function. 1101 AssumptionCache &AC; 1102 1103 /// The dominator tree. 1104 DominatorTree &DT; 1105 1106 /// The loop information for the function we are currently analyzing. 1107 LoopInfo &LI; 1108 1109 /// This SCEV is used to represent unknown trip counts and things. 1110 std::unique_ptr<SCEVCouldNotCompute> CouldNotCompute; 1111 1112 /// The type for HasRecMap. 1113 using HasRecMapType = DenseMap<const SCEV *, bool>; 1114 1115 /// This is a cache to record whether a SCEV contains any scAddRecExpr. 1116 HasRecMapType HasRecMap; 1117 1118 /// The type for ExprValueMap. 1119 using ValueOffsetPair = std::pair<Value *, ConstantInt *>; 1120 using ExprValueMapType = DenseMap<const SCEV *, SetVector<ValueOffsetPair>>; 1121 1122 /// ExprValueMap -- This map records the original values from which 1123 /// the SCEV expr is generated from. 1124 /// 1125 /// We want to represent the mapping as SCEV -> ValueOffsetPair instead 1126 /// of SCEV -> Value: 1127 /// Suppose we know S1 expands to V1, and 1128 /// S1 = S2 + C_a 1129 /// S3 = S2 + C_b 1130 /// where C_a and C_b are different SCEVConstants. Then we'd like to 1131 /// expand S3 as V1 - C_a + C_b instead of expanding S2 literally. 1132 /// It is helpful when S2 is a complex SCEV expr. 1133 /// 1134 /// In order to do that, we represent ExprValueMap as a mapping from 1135 /// SCEV to ValueOffsetPair. We will save both S1->{V1, 0} and 1136 /// S2->{V1, C_a} into the map when we create SCEV for V1. When S3 1137 /// is expanded, it will first expand S2 to V1 - C_a because of 1138 /// S2->{V1, C_a} in the map, then expand S3 to V1 - C_a + C_b. 1139 /// 1140 /// Note: S->{V, Offset} in the ExprValueMap means S can be expanded 1141 /// to V - Offset. 1142 ExprValueMapType ExprValueMap; 1143 1144 /// The type for ValueExprMap. 1145 using ValueExprMapType = 1146 DenseMap<SCEVCallbackVH, const SCEV *, DenseMapInfo<Value *>>; 1147 1148 /// This is a cache of the values we have analyzed so far. 1149 ValueExprMapType ValueExprMap; 1150 1151 /// Mark predicate values currently being processed by isImpliedCond. 1152 SmallPtrSet<Value *, 6> PendingLoopPredicates; 1153 1154 /// Mark SCEVUnknown Phis currently being processed by getRangeRef. 1155 SmallPtrSet<const PHINode *, 6> PendingPhiRanges; 1156 1157 // Mark SCEVUnknown Phis currently being processed by isImpliedViaMerge. 1158 SmallPtrSet<const PHINode *, 6> PendingMerges; 1159 1160 /// Set to true by isLoopBackedgeGuardedByCond when we're walking the set of 1161 /// conditions dominating the backedge of a loop. 1162 bool WalkingBEDominatingConds = false; 1163 1164 /// Set to true by isKnownPredicateViaSplitting when we're trying to prove a 1165 /// predicate by splitting it into a set of independent predicates. 1166 bool ProvingSplitPredicate = false; 1167 1168 /// Memoized values for the GetMinTrailingZeros 1169 DenseMap<const SCEV *, uint32_t> MinTrailingZerosCache; 1170 1171 /// Return the Value set from which the SCEV expr is generated. 1172 SetVector<ValueOffsetPair> *getSCEVValues(const SCEV *S); 1173 1174 /// Private helper method for the GetMinTrailingZeros method 1175 uint32_t GetMinTrailingZerosImpl(const SCEV *S); 1176 1177 /// Information about the number of loop iterations for which a loop exit's 1178 /// branch condition evaluates to the not-taken path. This is a temporary 1179 /// pair of exact and max expressions that are eventually summarized in 1180 /// ExitNotTakenInfo and BackedgeTakenInfo. 1181 struct ExitLimit { 1182 const SCEV *ExactNotTaken; // The exit is not taken exactly this many times 1183 const SCEV *MaxNotTaken; // The exit is not taken at most this many times 1184 1185 // Not taken either exactly MaxNotTaken or zero times 1186 bool MaxOrZero = false; 1187 1188 /// A set of predicate guards for this ExitLimit. The result is only valid 1189 /// if all of the predicates in \c Predicates evaluate to 'true' at 1190 /// run-time. 1191 SmallPtrSet<const SCEVPredicate *, 4> Predicates; 1192 1193 void addPredicate(const SCEVPredicate *P) { 1194 assert(!isa<SCEVUnionPredicate>(P) && "Only add leaf predicates here!"); 1195 Predicates.insert(P); 1196 } 1197 1198 /*implicit*/ ExitLimit(const SCEV *E); 1199 1200 ExitLimit( 1201 const SCEV *E, const SCEV *M, bool MaxOrZero, 1202 ArrayRef<const SmallPtrSetImpl<const SCEVPredicate *> *> PredSetList); 1203 1204 ExitLimit(const SCEV *E, const SCEV *M, bool MaxOrZero, 1205 const SmallPtrSetImpl<const SCEVPredicate *> &PredSet); 1206 1207 ExitLimit(const SCEV *E, const SCEV *M, bool MaxOrZero); 1208 1209 /// Test whether this ExitLimit contains any computed information, or 1210 /// whether it's all SCEVCouldNotCompute values. 1211 bool hasAnyInfo() const { 1212 return !isa<SCEVCouldNotCompute>(ExactNotTaken) || 1213 !isa<SCEVCouldNotCompute>(MaxNotTaken); 1214 } 1215 1216 bool hasOperand(const SCEV *S) const; 1217 1218 /// Test whether this ExitLimit contains all information. 1219 bool hasFullInfo() const { 1220 return !isa<SCEVCouldNotCompute>(ExactNotTaken); 1221 } 1222 }; 1223 1224 /// Information about the number of times a particular loop exit may be 1225 /// reached before exiting the loop. 1226 struct ExitNotTakenInfo { 1227 PoisoningVH<BasicBlock> ExitingBlock; 1228 const SCEV *ExactNotTaken; 1229 std::unique_ptr<SCEVUnionPredicate> Predicate; 1230 1231 explicit ExitNotTakenInfo(PoisoningVH<BasicBlock> ExitingBlock, 1232 const SCEV *ExactNotTaken, 1233 std::unique_ptr<SCEVUnionPredicate> Predicate) 1234 : ExitingBlock(ExitingBlock), ExactNotTaken(ExactNotTaken), 1235 Predicate(std::move(Predicate)) {} 1236 1237 bool hasAlwaysTruePredicate() const { 1238 return !Predicate || Predicate->isAlwaysTrue(); 1239 } 1240 }; 1241 1242 /// Information about the backedge-taken count of a loop. This currently 1243 /// includes an exact count and a maximum count. 1244 /// 1245 class BackedgeTakenInfo { 1246 /// A list of computable exits and their not-taken counts. Loops almost 1247 /// never have more than one computable exit. 1248 SmallVector<ExitNotTakenInfo, 1> ExitNotTaken; 1249 1250 /// The pointer part of \c MaxAndComplete is an expression indicating the 1251 /// least maximum backedge-taken count of the loop that is known, or a 1252 /// SCEVCouldNotCompute. This expression is only valid if the predicates 1253 /// associated with all loop exits are true. 1254 /// 1255 /// The integer part of \c MaxAndComplete is a boolean indicating if \c 1256 /// ExitNotTaken has an element for every exiting block in the loop. 1257 PointerIntPair<const SCEV *, 1> MaxAndComplete; 1258 1259 /// True iff the backedge is taken either exactly Max or zero times. 1260 bool MaxOrZero = false; 1261 1262 /// \name Helper projection functions on \c MaxAndComplete. 1263 /// @{ 1264 bool isComplete() const { return MaxAndComplete.getInt(); } 1265 const SCEV *getMax() const { return MaxAndComplete.getPointer(); } 1266 /// @} 1267 1268 public: 1269 BackedgeTakenInfo() : MaxAndComplete(nullptr, 0) {} 1270 BackedgeTakenInfo(BackedgeTakenInfo &&) = default; 1271 BackedgeTakenInfo &operator=(BackedgeTakenInfo &&) = default; 1272 1273 using EdgeExitInfo = std::pair<BasicBlock *, ExitLimit>; 1274 1275 /// Initialize BackedgeTakenInfo from a list of exact exit counts. 1276 BackedgeTakenInfo(SmallVectorImpl<EdgeExitInfo> &&ExitCounts, bool Complete, 1277 const SCEV *MaxCount, bool MaxOrZero); 1278 1279 /// Test whether this BackedgeTakenInfo contains any computed information, 1280 /// or whether it's all SCEVCouldNotCompute values. 1281 bool hasAnyInfo() const { 1282 return !ExitNotTaken.empty() || !isa<SCEVCouldNotCompute>(getMax()); 1283 } 1284 1285 /// Test whether this BackedgeTakenInfo contains complete information. 1286 bool hasFullInfo() const { return isComplete(); } 1287 1288 /// Return an expression indicating the exact *backedge-taken* 1289 /// count of the loop if it is known or SCEVCouldNotCompute 1290 /// otherwise. If execution makes it to the backedge on every 1291 /// iteration (i.e. there are no abnormal exists like exception 1292 /// throws and thread exits) then this is the number of times the 1293 /// loop header will execute minus one. 1294 /// 1295 /// If the SCEV predicate associated with the answer can be different 1296 /// from AlwaysTrue, we must add a (non null) Predicates argument. 1297 /// The SCEV predicate associated with the answer will be added to 1298 /// Predicates. A run-time check needs to be emitted for the SCEV 1299 /// predicate in order for the answer to be valid. 1300 /// 1301 /// Note that we should always know if we need to pass a predicate 1302 /// argument or not from the way the ExitCounts vector was computed. 1303 /// If we allowed SCEV predicates to be generated when populating this 1304 /// vector, this information can contain them and therefore a 1305 /// SCEVPredicate argument should be added to getExact. 1306 const SCEV *getExact(const Loop *L, ScalarEvolution *SE, 1307 SCEVUnionPredicate *Predicates = nullptr) const; 1308 1309 /// Return the number of times this loop exit may fall through to the back 1310 /// edge, or SCEVCouldNotCompute. The loop is guaranteed not to exit via 1311 /// this block before this number of iterations, but may exit via another 1312 /// block. 1313 const SCEV *getExact(BasicBlock *ExitingBlock, ScalarEvolution *SE) const; 1314 1315 /// Get the max backedge taken count for the loop. 1316 const SCEV *getMax(ScalarEvolution *SE) const; 1317 1318 /// Return true if the number of times this backedge is taken is either the 1319 /// value returned by getMax or zero. 1320 bool isMaxOrZero(ScalarEvolution *SE) const; 1321 1322 /// Return true if any backedge taken count expressions refer to the given 1323 /// subexpression. 1324 bool hasOperand(const SCEV *S, ScalarEvolution *SE) const; 1325 1326 /// Invalidate this result and free associated memory. 1327 void clear(); 1328 }; 1329 1330 /// Cache the backedge-taken count of the loops for this function as they 1331 /// are computed. 1332 DenseMap<const Loop *, BackedgeTakenInfo> BackedgeTakenCounts; 1333 1334 /// Cache the predicated backedge-taken count of the loops for this 1335 /// function as they are computed. 1336 DenseMap<const Loop *, BackedgeTakenInfo> PredicatedBackedgeTakenCounts; 1337 1338 /// This map contains entries for all of the PHI instructions that we 1339 /// attempt to compute constant evolutions for. This allows us to avoid 1340 /// potentially expensive recomputation of these properties. An instruction 1341 /// maps to null if we are unable to compute its exit value. 1342 DenseMap<PHINode *, Constant *> ConstantEvolutionLoopExitValue; 1343 1344 /// This map contains entries for all the expressions that we attempt to 1345 /// compute getSCEVAtScope information for, which can be expensive in 1346 /// extreme cases. 1347 DenseMap<const SCEV *, SmallVector<std::pair<const Loop *, const SCEV *>, 2>> 1348 ValuesAtScopes; 1349 1350 /// Memoized computeLoopDisposition results. 1351 DenseMap<const SCEV *, 1352 SmallVector<PointerIntPair<const Loop *, 2, LoopDisposition>, 2>> 1353 LoopDispositions; 1354 1355 struct LoopProperties { 1356 /// Set to true if the loop contains no instruction that can have side 1357 /// effects (i.e. via throwing an exception, volatile or atomic access). 1358 bool HasNoAbnormalExits; 1359 1360 /// Set to true if the loop contains no instruction that can abnormally exit 1361 /// the loop (i.e. via throwing an exception, by terminating the thread 1362 /// cleanly or by infinite looping in a called function). Strictly 1363 /// speaking, the last one is not leaving the loop, but is identical to 1364 /// leaving the loop for reasoning about undefined behavior. 1365 bool HasNoSideEffects; 1366 }; 1367 1368 /// Cache for \c getLoopProperties. 1369 DenseMap<const Loop *, LoopProperties> LoopPropertiesCache; 1370 1371 /// Return a \c LoopProperties instance for \p L, creating one if necessary. 1372 LoopProperties getLoopProperties(const Loop *L); 1373 1374 bool loopHasNoSideEffects(const Loop *L) { 1375 return getLoopProperties(L).HasNoSideEffects; 1376 } 1377 1378 bool loopHasNoAbnormalExits(const Loop *L) { 1379 return getLoopProperties(L).HasNoAbnormalExits; 1380 } 1381 1382 /// Compute a LoopDisposition value. 1383 LoopDisposition computeLoopDisposition(const SCEV *S, const Loop *L); 1384 1385 /// Memoized computeBlockDisposition results. 1386 DenseMap< 1387 const SCEV *, 1388 SmallVector<PointerIntPair<const BasicBlock *, 2, BlockDisposition>, 2>> 1389 BlockDispositions; 1390 1391 /// Compute a BlockDisposition value. 1392 BlockDisposition computeBlockDisposition(const SCEV *S, const BasicBlock *BB); 1393 1394 /// Memoized results from getRange 1395 DenseMap<const SCEV *, ConstantRange> UnsignedRanges; 1396 1397 /// Memoized results from getRange 1398 DenseMap<const SCEV *, ConstantRange> SignedRanges; 1399 1400 /// Used to parameterize getRange 1401 enum RangeSignHint { HINT_RANGE_UNSIGNED, HINT_RANGE_SIGNED }; 1402 1403 /// Set the memoized range for the given SCEV. 1404 const ConstantRange &setRange(const SCEV *S, RangeSignHint Hint, 1405 ConstantRange CR) { 1406 DenseMap<const SCEV *, ConstantRange> &Cache = 1407 Hint == HINT_RANGE_UNSIGNED ? UnsignedRanges : SignedRanges; 1408 1409 auto Pair = Cache.try_emplace(S, std::move(CR)); 1410 if (!Pair.second) 1411 Pair.first->second = std::move(CR); 1412 return Pair.first->second; 1413 } 1414 1415 /// Determine the range for a particular SCEV. 1416 /// NOTE: This returns a reference to an entry in a cache. It must be 1417 /// copied if its needed for longer. 1418 const ConstantRange &getRangeRef(const SCEV *S, RangeSignHint Hint); 1419 1420 /// Determines the range for the affine SCEVAddRecExpr {\p Start,+,\p Stop}. 1421 /// Helper for \c getRange. 1422 ConstantRange getRangeForAffineAR(const SCEV *Start, const SCEV *Stop, 1423 const SCEV *MaxBECount, unsigned BitWidth); 1424 1425 /// Try to compute a range for the affine SCEVAddRecExpr {\p Start,+,\p 1426 /// Stop} by "factoring out" a ternary expression from the add recurrence. 1427 /// Helper called by \c getRange. 1428 ConstantRange getRangeViaFactoring(const SCEV *Start, const SCEV *Stop, 1429 const SCEV *MaxBECount, unsigned BitWidth); 1430 1431 /// We know that there is no SCEV for the specified value. Analyze the 1432 /// expression. 1433 const SCEV *createSCEV(Value *V); 1434 1435 /// Provide the special handling we need to analyze PHI SCEVs. 1436 const SCEV *createNodeForPHI(PHINode *PN); 1437 1438 /// Helper function called from createNodeForPHI. 1439 const SCEV *createAddRecFromPHI(PHINode *PN); 1440 1441 /// A helper function for createAddRecFromPHI to handle simple cases. 1442 const SCEV *createSimpleAffineAddRec(PHINode *PN, Value *BEValueV, 1443 Value *StartValueV); 1444 1445 /// Helper function called from createNodeForPHI. 1446 const SCEV *createNodeFromSelectLikePHI(PHINode *PN); 1447 1448 /// Provide special handling for a select-like instruction (currently this 1449 /// is either a select instruction or a phi node). \p I is the instruction 1450 /// being processed, and it is assumed equivalent to "Cond ? TrueVal : 1451 /// FalseVal". 1452 const SCEV *createNodeForSelectOrPHI(Instruction *I, Value *Cond, 1453 Value *TrueVal, Value *FalseVal); 1454 1455 /// Provide the special handling we need to analyze GEP SCEVs. 1456 const SCEV *createNodeForGEP(GEPOperator *GEP); 1457 1458 /// Implementation code for getSCEVAtScope; called at most once for each 1459 /// SCEV+Loop pair. 1460 const SCEV *computeSCEVAtScope(const SCEV *S, const Loop *L); 1461 1462 /// This looks up computed SCEV values for all instructions that depend on 1463 /// the given instruction and removes them from the ValueExprMap map if they 1464 /// reference SymName. This is used during PHI resolution. 1465 void forgetSymbolicName(Instruction *I, const SCEV *SymName); 1466 1467 /// Return the BackedgeTakenInfo for the given loop, lazily computing new 1468 /// values if the loop hasn't been analyzed yet. The returned result is 1469 /// guaranteed not to be predicated. 1470 const BackedgeTakenInfo &getBackedgeTakenInfo(const Loop *L); 1471 1472 /// Similar to getBackedgeTakenInfo, but will add predicates as required 1473 /// with the purpose of returning complete information. 1474 const BackedgeTakenInfo &getPredicatedBackedgeTakenInfo(const Loop *L); 1475 1476 /// Compute the number of times the specified loop will iterate. 1477 /// If AllowPredicates is set, we will create new SCEV predicates as 1478 /// necessary in order to return an exact answer. 1479 BackedgeTakenInfo computeBackedgeTakenCount(const Loop *L, 1480 bool AllowPredicates = false); 1481 1482 /// Compute the number of times the backedge of the specified loop will 1483 /// execute if it exits via the specified block. If AllowPredicates is set, 1484 /// this call will try to use a minimal set of SCEV predicates in order to 1485 /// return an exact answer. 1486 ExitLimit computeExitLimit(const Loop *L, BasicBlock *ExitingBlock, 1487 bool AllowPredicates = false); 1488 1489 /// Compute the number of times the backedge of the specified loop will 1490 /// execute if its exit condition were a conditional branch of ExitCond. 1491 /// 1492 /// \p ControlsExit is true if ExitCond directly controls the exit 1493 /// branch. In this case, we can assume that the loop exits only if the 1494 /// condition is true and can infer that failing to meet the condition prior 1495 /// to integer wraparound results in undefined behavior. 1496 /// 1497 /// If \p AllowPredicates is set, this call will try to use a minimal set of 1498 /// SCEV predicates in order to return an exact answer. 1499 ExitLimit computeExitLimitFromCond(const Loop *L, Value *ExitCond, 1500 bool ExitIfTrue, bool ControlsExit, 1501 bool AllowPredicates = false); 1502 1503 // Helper functions for computeExitLimitFromCond to avoid exponential time 1504 // complexity. 1505 1506 class ExitLimitCache { 1507 // It may look like we need key on the whole (L, ExitIfTrue, ControlsExit, 1508 // AllowPredicates) tuple, but recursive calls to 1509 // computeExitLimitFromCondCached from computeExitLimitFromCondImpl only 1510 // vary the in \c ExitCond and \c ControlsExit parameters. We remember the 1511 // initial values of the other values to assert our assumption. 1512 SmallDenseMap<PointerIntPair<Value *, 1>, ExitLimit> TripCountMap; 1513 1514 const Loop *L; 1515 bool ExitIfTrue; 1516 bool AllowPredicates; 1517 1518 public: 1519 ExitLimitCache(const Loop *L, bool ExitIfTrue, bool AllowPredicates) 1520 : L(L), ExitIfTrue(ExitIfTrue), AllowPredicates(AllowPredicates) {} 1521 1522 Optional<ExitLimit> find(const Loop *L, Value *ExitCond, bool ExitIfTrue, 1523 bool ControlsExit, bool AllowPredicates); 1524 1525 void insert(const Loop *L, Value *ExitCond, bool ExitIfTrue, 1526 bool ControlsExit, bool AllowPredicates, const ExitLimit &EL); 1527 }; 1528 1529 using ExitLimitCacheTy = ExitLimitCache; 1530 1531 ExitLimit computeExitLimitFromCondCached(ExitLimitCacheTy &Cache, 1532 const Loop *L, Value *ExitCond, 1533 bool ExitIfTrue, 1534 bool ControlsExit, 1535 bool AllowPredicates); 1536 ExitLimit computeExitLimitFromCondImpl(ExitLimitCacheTy &Cache, const Loop *L, 1537 Value *ExitCond, bool ExitIfTrue, 1538 bool ControlsExit, 1539 bool AllowPredicates); 1540 1541 /// Compute the number of times the backedge of the specified loop will 1542 /// execute if its exit condition were a conditional branch of the ICmpInst 1543 /// ExitCond and ExitIfTrue. If AllowPredicates is set, this call will try 1544 /// to use a minimal set of SCEV predicates in order to return an exact 1545 /// answer. 1546 ExitLimit computeExitLimitFromICmp(const Loop *L, ICmpInst *ExitCond, 1547 bool ExitIfTrue, 1548 bool IsSubExpr, 1549 bool AllowPredicates = false); 1550 1551 /// Compute the number of times the backedge of the specified loop will 1552 /// execute if its exit condition were a switch with a single exiting case 1553 /// to ExitingBB. 1554 ExitLimit computeExitLimitFromSingleExitSwitch(const Loop *L, 1555 SwitchInst *Switch, 1556 BasicBlock *ExitingBB, 1557 bool IsSubExpr); 1558 1559 /// Given an exit condition of 'icmp op load X, cst', try to see if we can 1560 /// compute the backedge-taken count. 1561 ExitLimit computeLoadConstantCompareExitLimit(LoadInst *LI, Constant *RHS, 1562 const Loop *L, 1563 ICmpInst::Predicate p); 1564 1565 /// Compute the exit limit of a loop that is controlled by a 1566 /// "(IV >> 1) != 0" type comparison. We cannot compute the exact trip 1567 /// count in these cases (since SCEV has no way of expressing them), but we 1568 /// can still sometimes compute an upper bound. 1569 /// 1570 /// Return an ExitLimit for a loop whose backedge is guarded by `LHS Pred 1571 /// RHS`. 1572 ExitLimit computeShiftCompareExitLimit(Value *LHS, Value *RHS, const Loop *L, 1573 ICmpInst::Predicate Pred); 1574 1575 /// If the loop is known to execute a constant number of times (the 1576 /// condition evolves only from constants), try to evaluate a few iterations 1577 /// of the loop until we get the exit condition gets a value of ExitWhen 1578 /// (true or false). If we cannot evaluate the exit count of the loop, 1579 /// return CouldNotCompute. 1580 const SCEV *computeExitCountExhaustively(const Loop *L, Value *Cond, 1581 bool ExitWhen); 1582 1583 /// Return the number of times an exit condition comparing the specified 1584 /// value to zero will execute. If not computable, return CouldNotCompute. 1585 /// If AllowPredicates is set, this call will try to use a minimal set of 1586 /// SCEV predicates in order to return an exact answer. 1587 ExitLimit howFarToZero(const SCEV *V, const Loop *L, bool IsSubExpr, 1588 bool AllowPredicates = false); 1589 1590 /// Return the number of times an exit condition checking the specified 1591 /// value for nonzero will execute. If not computable, return 1592 /// CouldNotCompute. 1593 ExitLimit howFarToNonZero(const SCEV *V, const Loop *L); 1594 1595 /// Return the number of times an exit condition containing the specified 1596 /// less-than comparison will execute. If not computable, return 1597 /// CouldNotCompute. 1598 /// 1599 /// \p isSigned specifies whether the less-than is signed. 1600 /// 1601 /// \p ControlsExit is true when the LHS < RHS condition directly controls 1602 /// the branch (loops exits only if condition is true). In this case, we can 1603 /// use NoWrapFlags to skip overflow checks. 1604 /// 1605 /// If \p AllowPredicates is set, this call will try to use a minimal set of 1606 /// SCEV predicates in order to return an exact answer. 1607 ExitLimit howManyLessThans(const SCEV *LHS, const SCEV *RHS, const Loop *L, 1608 bool isSigned, bool ControlsExit, 1609 bool AllowPredicates = false); 1610 1611 ExitLimit howManyGreaterThans(const SCEV *LHS, const SCEV *RHS, const Loop *L, 1612 bool isSigned, bool IsSubExpr, 1613 bool AllowPredicates = false); 1614 1615 /// Return a predecessor of BB (which may not be an immediate predecessor) 1616 /// which has exactly one successor from which BB is reachable, or null if 1617 /// no such block is found. 1618 std::pair<BasicBlock *, BasicBlock *> 1619 getPredecessorWithUniqueSuccessorForBB(BasicBlock *BB); 1620 1621 /// Test whether the condition described by Pred, LHS, and RHS is true 1622 /// whenever the given FoundCondValue value evaluates to true. 1623 bool isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS, 1624 Value *FoundCondValue, bool Inverse); 1625 1626 /// Test whether the condition described by Pred, LHS, and RHS is true 1627 /// whenever the condition described by FoundPred, FoundLHS, FoundRHS is 1628 /// true. 1629 bool isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS, 1630 ICmpInst::Predicate FoundPred, const SCEV *FoundLHS, 1631 const SCEV *FoundRHS); 1632 1633 /// Test whether the condition described by Pred, LHS, and RHS is true 1634 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1635 /// true. 1636 bool isImpliedCondOperands(ICmpInst::Predicate Pred, const SCEV *LHS, 1637 const SCEV *RHS, const SCEV *FoundLHS, 1638 const SCEV *FoundRHS); 1639 1640 /// Test whether the condition described by Pred, LHS, and RHS is true 1641 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1642 /// true. Here LHS is an operation that includes FoundLHS as one of its 1643 /// arguments. 1644 bool isImpliedViaOperations(ICmpInst::Predicate Pred, 1645 const SCEV *LHS, const SCEV *RHS, 1646 const SCEV *FoundLHS, const SCEV *FoundRHS, 1647 unsigned Depth = 0); 1648 1649 /// Test whether the condition described by Pred, LHS, and RHS is true. 1650 /// Use only simple non-recursive types of checks, such as range analysis etc. 1651 bool isKnownViaNonRecursiveReasoning(ICmpInst::Predicate Pred, 1652 const SCEV *LHS, const SCEV *RHS); 1653 1654 /// Test whether the condition described by Pred, LHS, and RHS is true 1655 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1656 /// true. 1657 bool isImpliedCondOperandsHelper(ICmpInst::Predicate Pred, const SCEV *LHS, 1658 const SCEV *RHS, const SCEV *FoundLHS, 1659 const SCEV *FoundRHS); 1660 1661 /// Test whether the condition described by Pred, LHS, and RHS is true 1662 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1663 /// true. Utility function used by isImpliedCondOperands. Tries to get 1664 /// cases like "X `sgt` 0 => X - 1 `sgt` -1". 1665 bool isImpliedCondOperandsViaRanges(ICmpInst::Predicate Pred, const SCEV *LHS, 1666 const SCEV *RHS, const SCEV *FoundLHS, 1667 const SCEV *FoundRHS); 1668 1669 /// Return true if the condition denoted by \p LHS \p Pred \p RHS is implied 1670 /// by a call to \c @llvm.experimental.guard in \p BB. 1671 bool isImpliedViaGuard(BasicBlock *BB, ICmpInst::Predicate Pred, 1672 const SCEV *LHS, const SCEV *RHS); 1673 1674 /// Test whether the condition described by Pred, LHS, and RHS is true 1675 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1676 /// true. 1677 /// 1678 /// This routine tries to rule out certain kinds of integer overflow, and 1679 /// then tries to reason about arithmetic properties of the predicates. 1680 bool isImpliedCondOperandsViaNoOverflow(ICmpInst::Predicate Pred, 1681 const SCEV *LHS, const SCEV *RHS, 1682 const SCEV *FoundLHS, 1683 const SCEV *FoundRHS); 1684 1685 /// Test whether the condition described by Pred, LHS, and RHS is true 1686 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1687 /// true. 1688 /// 1689 /// This routine tries to figure out predicate for Phis which are SCEVUnknown 1690 /// if it is true for every possible incoming value from their respective 1691 /// basic blocks. 1692 bool isImpliedViaMerge(ICmpInst::Predicate Pred, 1693 const SCEV *LHS, const SCEV *RHS, 1694 const SCEV *FoundLHS, const SCEV *FoundRHS, 1695 unsigned Depth); 1696 1697 /// If we know that the specified Phi is in the header of its containing 1698 /// loop, we know the loop executes a constant number of times, and the PHI 1699 /// node is just a recurrence involving constants, fold it. 1700 Constant *getConstantEvolutionLoopExitValue(PHINode *PN, const APInt &BEs, 1701 const Loop *L); 1702 1703 /// Test if the given expression is known to satisfy the condition described 1704 /// by Pred and the known constant ranges of LHS and RHS. 1705 bool isKnownPredicateViaConstantRanges(ICmpInst::Predicate Pred, 1706 const SCEV *LHS, const SCEV *RHS); 1707 1708 /// Try to prove the condition described by "LHS Pred RHS" by ruling out 1709 /// integer overflow. 1710 /// 1711 /// For instance, this will return true for "A s< (A + C)<nsw>" if C is 1712 /// positive. 1713 bool isKnownPredicateViaNoOverflow(ICmpInst::Predicate Pred, const SCEV *LHS, 1714 const SCEV *RHS); 1715 1716 /// Try to split Pred LHS RHS into logical conjunctions (and's) and try to 1717 /// prove them individually. 1718 bool isKnownPredicateViaSplitting(ICmpInst::Predicate Pred, const SCEV *LHS, 1719 const SCEV *RHS); 1720 1721 /// Try to match the Expr as "(L + R)<Flags>". 1722 bool splitBinaryAdd(const SCEV *Expr, const SCEV *&L, const SCEV *&R, 1723 SCEV::NoWrapFlags &Flags); 1724 1725 /// Compute \p LHS - \p RHS and returns the result as an APInt if it is a 1726 /// constant, and None if it isn't. 1727 /// 1728 /// This is intended to be a cheaper version of getMinusSCEV. We can be 1729 /// frugal here since we just bail out of actually constructing and 1730 /// canonicalizing an expression in the cases where the result isn't going 1731 /// to be a constant. 1732 Optional<APInt> computeConstantDifference(const SCEV *LHS, const SCEV *RHS); 1733 1734 /// Drop memoized information computed for S. 1735 void forgetMemoizedResults(const SCEV *S); 1736 1737 /// Return an existing SCEV for V if there is one, otherwise return nullptr. 1738 const SCEV *getExistingSCEV(Value *V); 1739 1740 /// Return false iff given SCEV contains a SCEVUnknown with NULL value- 1741 /// pointer. 1742 bool checkValidity(const SCEV *S) const; 1743 1744 /// Return true if `ExtendOpTy`({`Start`,+,`Step`}) can be proved to be 1745 /// equal to {`ExtendOpTy`(`Start`),+,`ExtendOpTy`(`Step`)}. This is 1746 /// equivalent to proving no signed (resp. unsigned) wrap in 1747 /// {`Start`,+,`Step`} if `ExtendOpTy` is `SCEVSignExtendExpr` 1748 /// (resp. `SCEVZeroExtendExpr`). 1749 template <typename ExtendOpTy> 1750 bool proveNoWrapByVaryingStart(const SCEV *Start, const SCEV *Step, 1751 const Loop *L); 1752 1753 /// Try to prove NSW or NUW on \p AR relying on ConstantRange manipulation. 1754 SCEV::NoWrapFlags proveNoWrapViaConstantRanges(const SCEVAddRecExpr *AR); 1755 1756 bool isMonotonicPredicateImpl(const SCEVAddRecExpr *LHS, 1757 ICmpInst::Predicate Pred, bool &Increasing); 1758 1759 /// Return SCEV no-wrap flags that can be proven based on reasoning about 1760 /// how poison produced from no-wrap flags on this value (e.g. a nuw add) 1761 /// would trigger undefined behavior on overflow. 1762 SCEV::NoWrapFlags getNoWrapFlagsFromUB(const Value *V); 1763 1764 /// Return true if the SCEV corresponding to \p I is never poison. Proving 1765 /// this is more complex than proving that just \p I is never poison, since 1766 /// SCEV commons expressions across control flow, and you can have cases 1767 /// like: 1768 /// 1769 /// idx0 = a + b; 1770 /// ptr[idx0] = 100; 1771 /// if (<condition>) { 1772 /// idx1 = a +nsw b; 1773 /// ptr[idx1] = 200; 1774 /// } 1775 /// 1776 /// where the SCEV expression (+ a b) is guaranteed to not be poison (and 1777 /// hence not sign-overflow) only if "<condition>" is true. Since both 1778 /// `idx0` and `idx1` will be mapped to the same SCEV expression, (+ a b), 1779 /// it is not okay to annotate (+ a b) with <nsw> in the above example. 1780 bool isSCEVExprNeverPoison(const Instruction *I); 1781 1782 /// This is like \c isSCEVExprNeverPoison but it specifically works for 1783 /// instructions that will get mapped to SCEV add recurrences. Return true 1784 /// if \p I will never generate poison under the assumption that \p I is an 1785 /// add recurrence on the loop \p L. 1786 bool isAddRecNeverPoison(const Instruction *I, const Loop *L); 1787 1788 /// Similar to createAddRecFromPHI, but with the additional flexibility of 1789 /// suggesting runtime overflow checks in case casts are encountered. 1790 /// If successful, the analysis records that for this loop, \p SymbolicPHI, 1791 /// which is the UnknownSCEV currently representing the PHI, can be rewritten 1792 /// into an AddRec, assuming some predicates; The function then returns the 1793 /// AddRec and the predicates as a pair, and caches this pair in 1794 /// PredicatedSCEVRewrites. 1795 /// If the analysis is not successful, a mapping from the \p SymbolicPHI to 1796 /// itself (with no predicates) is recorded, and a nullptr with an empty 1797 /// predicates vector is returned as a pair. 1798 Optional<std::pair<const SCEV *, SmallVector<const SCEVPredicate *, 3>>> 1799 createAddRecFromPHIWithCastsImpl(const SCEVUnknown *SymbolicPHI); 1800 1801 /// Compute the backedge taken count knowing the interval difference, the 1802 /// stride and presence of the equality in the comparison. 1803 const SCEV *computeBECount(const SCEV *Delta, const SCEV *Stride, 1804 bool Equality); 1805 1806 /// Compute the maximum backedge count based on the range of values 1807 /// permitted by Start, End, and Stride. This is for loops of the form 1808 /// {Start, +, Stride} LT End. 1809 /// 1810 /// Precondition: the induction variable is known to be positive. We *don't* 1811 /// assert these preconditions so please be careful. 1812 const SCEV *computeMaxBECountForLT(const SCEV *Start, const SCEV *Stride, 1813 const SCEV *End, unsigned BitWidth, 1814 bool IsSigned); 1815 1816 /// Verify if an linear IV with positive stride can overflow when in a 1817 /// less-than comparison, knowing the invariant term of the comparison, 1818 /// the stride and the knowledge of NSW/NUW flags on the recurrence. 1819 bool doesIVOverflowOnLT(const SCEV *RHS, const SCEV *Stride, bool IsSigned, 1820 bool NoWrap); 1821 1822 /// Verify if an linear IV with negative stride can overflow when in a 1823 /// greater-than comparison, knowing the invariant term of the comparison, 1824 /// the stride and the knowledge of NSW/NUW flags on the recurrence. 1825 bool doesIVOverflowOnGT(const SCEV *RHS, const SCEV *Stride, bool IsSigned, 1826 bool NoWrap); 1827 1828 /// Get add expr already created or create a new one. 1829 const SCEV *getOrCreateAddExpr(SmallVectorImpl<const SCEV *> &Ops, 1830 SCEV::NoWrapFlags Flags); 1831 1832 /// Get mul expr already created or create a new one. 1833 const SCEV *getOrCreateMulExpr(SmallVectorImpl<const SCEV *> &Ops, 1834 SCEV::NoWrapFlags Flags); 1835 1836 // Get addrec expr already created or create a new one. 1837 const SCEV *getOrCreateAddRecExpr(SmallVectorImpl<const SCEV *> &Ops, 1838 const Loop *L, SCEV::NoWrapFlags Flags); 1839 1840 /// Return x if \p Val is f(x) where f is a 1-1 function. 1841 const SCEV *stripInjectiveFunctions(const SCEV *Val) const; 1842 1843 /// Find all of the loops transitively used in \p S, and fill \p LoopsUsed. 1844 /// A loop is considered "used" by an expression if it contains 1845 /// an add rec on said loop. 1846 void getUsedLoops(const SCEV *S, SmallPtrSetImpl<const Loop *> &LoopsUsed); 1847 1848 /// Find all of the loops transitively used in \p S, and update \c LoopUsers 1849 /// accordingly. 1850 void addToLoopUseLists(const SCEV *S); 1851 1852 /// Try to match the pattern generated by getURemExpr(A, B). If successful, 1853 /// Assign A and B to LHS and RHS, respectively. 1854 bool matchURem(const SCEV *Expr, const SCEV *&LHS, const SCEV *&RHS); 1855 1856 FoldingSet<SCEV> UniqueSCEVs; 1857 FoldingSet<SCEVPredicate> UniquePreds; 1858 BumpPtrAllocator SCEVAllocator; 1859 1860 /// This maps loops to a list of SCEV expressions that (transitively) use said 1861 /// loop. 1862 DenseMap<const Loop *, SmallVector<const SCEV *, 4>> LoopUsers; 1863 1864 /// Cache tentative mappings from UnknownSCEVs in a Loop, to a SCEV expression 1865 /// they can be rewritten into under certain predicates. 1866 DenseMap<std::pair<const SCEVUnknown *, const Loop *>, 1867 std::pair<const SCEV *, SmallVector<const SCEVPredicate *, 3>>> 1868 PredicatedSCEVRewrites; 1869 1870 /// The head of a linked list of all SCEVUnknown values that have been 1871 /// allocated. This is used by releaseMemory to locate them all and call 1872 /// their destructors. 1873 SCEVUnknown *FirstUnknown = nullptr; 1874 }; 1875 1876 /// Analysis pass that exposes the \c ScalarEvolution for a function. 1877 class ScalarEvolutionAnalysis 1878 : public AnalysisInfoMixin<ScalarEvolutionAnalysis> { 1879 friend AnalysisInfoMixin<ScalarEvolutionAnalysis>; 1880 1881 static AnalysisKey Key; 1882 1883 public: 1884 using Result = ScalarEvolution; 1885 1886 ScalarEvolution run(Function &F, FunctionAnalysisManager &AM); 1887 }; 1888 1889 /// Printer pass for the \c ScalarEvolutionAnalysis results. 1890 class ScalarEvolutionPrinterPass 1891 : public PassInfoMixin<ScalarEvolutionPrinterPass> { 1892 raw_ostream &OS; 1893 1894 public: 1895 explicit ScalarEvolutionPrinterPass(raw_ostream &OS) : OS(OS) {} 1896 1897 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 1898 }; 1899 1900 class ScalarEvolutionWrapperPass : public FunctionPass { 1901 std::unique_ptr<ScalarEvolution> SE; 1902 1903 public: 1904 static char ID; 1905 1906 ScalarEvolutionWrapperPass(); 1907 1908 ScalarEvolution &getSE() { return *SE; } 1909 const ScalarEvolution &getSE() const { return *SE; } 1910 1911 bool runOnFunction(Function &F) override; 1912 void releaseMemory() override; 1913 void getAnalysisUsage(AnalysisUsage &AU) const override; 1914 void print(raw_ostream &OS, const Module * = nullptr) const override; 1915 void verifyAnalysis() const override; 1916 }; 1917 1918 /// An interface layer with SCEV used to manage how we see SCEV expressions 1919 /// for values in the context of existing predicates. We can add new 1920 /// predicates, but we cannot remove them. 1921 /// 1922 /// This layer has multiple purposes: 1923 /// - provides a simple interface for SCEV versioning. 1924 /// - guarantees that the order of transformations applied on a SCEV 1925 /// expression for a single Value is consistent across two different 1926 /// getSCEV calls. This means that, for example, once we've obtained 1927 /// an AddRec expression for a certain value through expression 1928 /// rewriting, we will continue to get an AddRec expression for that 1929 /// Value. 1930 /// - lowers the number of expression rewrites. 1931 class PredicatedScalarEvolution { 1932 public: 1933 PredicatedScalarEvolution(ScalarEvolution &SE, Loop &L); 1934 1935 const SCEVUnionPredicate &getUnionPredicate() const; 1936 1937 /// Returns the SCEV expression of V, in the context of the current SCEV 1938 /// predicate. The order of transformations applied on the expression of V 1939 /// returned by ScalarEvolution is guaranteed to be preserved, even when 1940 /// adding new predicates. 1941 const SCEV *getSCEV(Value *V); 1942 1943 /// Get the (predicated) backedge count for the analyzed loop. 1944 const SCEV *getBackedgeTakenCount(); 1945 1946 /// Adds a new predicate. 1947 void addPredicate(const SCEVPredicate &Pred); 1948 1949 /// Attempts to produce an AddRecExpr for V by adding additional SCEV 1950 /// predicates. If we can't transform the expression into an AddRecExpr we 1951 /// return nullptr and not add additional SCEV predicates to the current 1952 /// context. 1953 const SCEVAddRecExpr *getAsAddRec(Value *V); 1954 1955 /// Proves that V doesn't overflow by adding SCEV predicate. 1956 void setNoOverflow(Value *V, SCEVWrapPredicate::IncrementWrapFlags Flags); 1957 1958 /// Returns true if we've proved that V doesn't wrap by means of a SCEV 1959 /// predicate. 1960 bool hasNoOverflow(Value *V, SCEVWrapPredicate::IncrementWrapFlags Flags); 1961 1962 /// Returns the ScalarEvolution analysis used. 1963 ScalarEvolution *getSE() const { return &SE; } 1964 1965 /// We need to explicitly define the copy constructor because of FlagsMap. 1966 PredicatedScalarEvolution(const PredicatedScalarEvolution &); 1967 1968 /// Print the SCEV mappings done by the Predicated Scalar Evolution. 1969 /// The printed text is indented by \p Depth. 1970 void print(raw_ostream &OS, unsigned Depth) const; 1971 1972 /// Check if \p AR1 and \p AR2 are equal, while taking into account 1973 /// Equal predicates in Preds. 1974 bool areAddRecsEqualWithPreds(const SCEVAddRecExpr *AR1, 1975 const SCEVAddRecExpr *AR2) const; 1976 1977 private: 1978 /// Increments the version number of the predicate. This needs to be called 1979 /// every time the SCEV predicate changes. 1980 void updateGeneration(); 1981 1982 /// Holds a SCEV and the version number of the SCEV predicate used to 1983 /// perform the rewrite of the expression. 1984 using RewriteEntry = std::pair<unsigned, const SCEV *>; 1985 1986 /// Maps a SCEV to the rewrite result of that SCEV at a certain version 1987 /// number. If this number doesn't match the current Generation, we will 1988 /// need to do a rewrite. To preserve the transformation order of previous 1989 /// rewrites, we will rewrite the previous result instead of the original 1990 /// SCEV. 1991 DenseMap<const SCEV *, RewriteEntry> RewriteMap; 1992 1993 /// Records what NoWrap flags we've added to a Value *. 1994 ValueMap<Value *, SCEVWrapPredicate::IncrementWrapFlags> FlagsMap; 1995 1996 /// The ScalarEvolution analysis. 1997 ScalarEvolution &SE; 1998 1999 /// The analyzed Loop. 2000 const Loop &L; 2001 2002 /// The SCEVPredicate that forms our context. We will rewrite all 2003 /// expressions assuming that this predicate true. 2004 SCEVUnionPredicate Preds; 2005 2006 /// Marks the version of the SCEV predicate used. When rewriting a SCEV 2007 /// expression we mark it with the version of the predicate. We use this to 2008 /// figure out if the predicate has changed from the last rewrite of the 2009 /// SCEV. If so, we need to perform a new rewrite. 2010 unsigned Generation = 0; 2011 2012 /// The backedge taken count. 2013 const SCEV *BackedgeCount = nullptr; 2014 }; 2015 2016 } // end namespace llvm 2017 2018 #endif // LLVM_ANALYSIS_SCALAREVOLUTION_H 2019