1 //===- llvm/Analysis/ScalarEvolution.h - Scalar Evolution -------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // The ScalarEvolution class is an LLVM pass which can be used to analyze and 10 // categorize scalar expressions in loops. It specializes in recognizing 11 // general induction variables, representing them with the abstract and opaque 12 // SCEV class. Given this analysis, trip counts of loops and other important 13 // properties can be obtained. 14 // 15 // This analysis is primarily useful for induction variable substitution and 16 // strength reduction. 17 // 18 //===----------------------------------------------------------------------===// 19 20 #ifndef LLVM_ANALYSIS_SCALAREVOLUTION_H 21 #define LLVM_ANALYSIS_SCALAREVOLUTION_H 22 23 #include "llvm/ADT/APInt.h" 24 #include "llvm/ADT/ArrayRef.h" 25 #include "llvm/ADT/DenseMap.h" 26 #include "llvm/ADT/DenseMapInfo.h" 27 #include "llvm/ADT/FoldingSet.h" 28 #include "llvm/ADT/PointerIntPair.h" 29 #include "llvm/ADT/SetVector.h" 30 #include "llvm/ADT/SmallPtrSet.h" 31 #include "llvm/ADT/SmallVector.h" 32 #include "llvm/IR/ConstantRange.h" 33 #include "llvm/IR/InstrTypes.h" 34 #include "llvm/IR/Instructions.h" 35 #include "llvm/IR/PassManager.h" 36 #include "llvm/IR/ValueHandle.h" 37 #include "llvm/IR/ValueMap.h" 38 #include "llvm/Pass.h" 39 #include <cassert> 40 #include <cstdint> 41 #include <memory> 42 #include <optional> 43 #include <utility> 44 45 namespace llvm { 46 47 class OverflowingBinaryOperator; 48 class AssumptionCache; 49 class BasicBlock; 50 class Constant; 51 class ConstantInt; 52 class DataLayout; 53 class DominatorTree; 54 class Function; 55 class GEPOperator; 56 class Instruction; 57 class LLVMContext; 58 class Loop; 59 class LoopInfo; 60 class raw_ostream; 61 class ScalarEvolution; 62 class SCEVAddRecExpr; 63 class SCEVUnknown; 64 class StructType; 65 class TargetLibraryInfo; 66 class Type; 67 class Value; 68 enum SCEVTypes : unsigned short; 69 70 extern bool VerifySCEV; 71 72 /// This class represents an analyzed expression in the program. These are 73 /// opaque objects that the client is not allowed to do much with directly. 74 /// 75 class SCEV : public FoldingSetNode { 76 friend struct FoldingSetTrait<SCEV>; 77 78 /// A reference to an Interned FoldingSetNodeID for this node. The 79 /// ScalarEvolution's BumpPtrAllocator holds the data. 80 FoldingSetNodeIDRef FastID; 81 82 // The SCEV baseclass this node corresponds to 83 const SCEVTypes SCEVType; 84 85 protected: 86 // Estimated complexity of this node's expression tree size. 87 const unsigned short ExpressionSize; 88 89 /// This field is initialized to zero and may be used in subclasses to store 90 /// miscellaneous information. 91 unsigned short SubclassData = 0; 92 93 public: 94 /// NoWrapFlags are bitfield indices into SubclassData. 95 /// 96 /// Add and Mul expressions may have no-unsigned-wrap <NUW> or 97 /// no-signed-wrap <NSW> properties, which are derived from the IR 98 /// operator. NSW is a misnomer that we use to mean no signed overflow or 99 /// underflow. 100 /// 101 /// AddRec expressions may have a no-self-wraparound <NW> property if, in 102 /// the integer domain, abs(step) * max-iteration(loop) <= 103 /// unsigned-max(bitwidth). This means that the recurrence will never reach 104 /// its start value if the step is non-zero. Computing the same value on 105 /// each iteration is not considered wrapping, and recurrences with step = 0 106 /// are trivially <NW>. <NW> is independent of the sign of step and the 107 /// value the add recurrence starts with. 108 /// 109 /// Note that NUW and NSW are also valid properties of a recurrence, and 110 /// either implies NW. For convenience, NW will be set for a recurrence 111 /// whenever either NUW or NSW are set. 112 /// 113 /// We require that the flag on a SCEV apply to the entire scope in which 114 /// that SCEV is defined. A SCEV's scope is set of locations dominated by 115 /// a defining location, which is in turn described by the following rules: 116 /// * A SCEVUnknown is at the point of definition of the Value. 117 /// * A SCEVConstant is defined at all points. 118 /// * A SCEVAddRec is defined starting with the header of the associated 119 /// loop. 120 /// * All other SCEVs are defined at the earlest point all operands are 121 /// defined. 122 /// 123 /// The above rules describe a maximally hoisted form (without regards to 124 /// potential control dependence). A SCEV is defined anywhere a 125 /// corresponding instruction could be defined in said maximally hoisted 126 /// form. Note that SCEVUDivExpr (currently the only expression type which 127 /// can trap) can be defined per these rules in regions where it would trap 128 /// at runtime. A SCEV being defined does not require the existence of any 129 /// instruction within the defined scope. 130 enum NoWrapFlags { 131 FlagAnyWrap = 0, // No guarantee. 132 FlagNW = (1 << 0), // No self-wrap. 133 FlagNUW = (1 << 1), // No unsigned wrap. 134 FlagNSW = (1 << 2), // No signed wrap. 135 NoWrapMask = (1 << 3) - 1 136 }; 137 138 explicit SCEV(const FoldingSetNodeIDRef ID, SCEVTypes SCEVTy, 139 unsigned short ExpressionSize) 140 : FastID(ID), SCEVType(SCEVTy), ExpressionSize(ExpressionSize) {} 141 SCEV(const SCEV &) = delete; 142 SCEV &operator=(const SCEV &) = delete; 143 144 SCEVTypes getSCEVType() const { return SCEVType; } 145 146 /// Return the LLVM type of this SCEV expression. 147 Type *getType() const; 148 149 /// Return operands of this SCEV expression. 150 ArrayRef<const SCEV *> operands() const; 151 152 /// Return true if the expression is a constant zero. 153 bool isZero() const; 154 155 /// Return true if the expression is a constant one. 156 bool isOne() const; 157 158 /// Return true if the expression is a constant all-ones value. 159 bool isAllOnesValue() const; 160 161 /// Return true if the specified scev is negated, but not a constant. 162 bool isNonConstantNegative() const; 163 164 // Returns estimated size of the mathematical expression represented by this 165 // SCEV. The rules of its calculation are following: 166 // 1) Size of a SCEV without operands (like constants and SCEVUnknown) is 1; 167 // 2) Size SCEV with operands Op1, Op2, ..., OpN is calculated by formula: 168 // (1 + Size(Op1) + ... + Size(OpN)). 169 // This value gives us an estimation of time we need to traverse through this 170 // SCEV and all its operands recursively. We may use it to avoid performing 171 // heavy transformations on SCEVs of excessive size for sake of saving the 172 // compilation time. 173 unsigned short getExpressionSize() const { 174 return ExpressionSize; 175 } 176 177 /// Print out the internal representation of this scalar to the specified 178 /// stream. This should really only be used for debugging purposes. 179 void print(raw_ostream &OS) const; 180 181 /// This method is used for debugging. 182 void dump() const; 183 }; 184 185 // Specialize FoldingSetTrait for SCEV to avoid needing to compute 186 // temporary FoldingSetNodeID values. 187 template <> struct FoldingSetTrait<SCEV> : DefaultFoldingSetTrait<SCEV> { 188 static void Profile(const SCEV &X, FoldingSetNodeID &ID) { ID = X.FastID; } 189 190 static bool Equals(const SCEV &X, const FoldingSetNodeID &ID, unsigned IDHash, 191 FoldingSetNodeID &TempID) { 192 return ID == X.FastID; 193 } 194 195 static unsigned ComputeHash(const SCEV &X, FoldingSetNodeID &TempID) { 196 return X.FastID.ComputeHash(); 197 } 198 }; 199 200 inline raw_ostream &operator<<(raw_ostream &OS, const SCEV &S) { 201 S.print(OS); 202 return OS; 203 } 204 205 /// An object of this class is returned by queries that could not be answered. 206 /// For example, if you ask for the number of iterations of a linked-list 207 /// traversal loop, you will get one of these. None of the standard SCEV 208 /// operations are valid on this class, it is just a marker. 209 struct SCEVCouldNotCompute : public SCEV { 210 SCEVCouldNotCompute(); 211 212 /// Methods for support type inquiry through isa, cast, and dyn_cast: 213 static bool classof(const SCEV *S); 214 }; 215 216 /// This class represents an assumption made using SCEV expressions which can 217 /// be checked at run-time. 218 class SCEVPredicate : public FoldingSetNode { 219 friend struct FoldingSetTrait<SCEVPredicate>; 220 221 /// A reference to an Interned FoldingSetNodeID for this node. The 222 /// ScalarEvolution's BumpPtrAllocator holds the data. 223 FoldingSetNodeIDRef FastID; 224 225 public: 226 enum SCEVPredicateKind { P_Union, P_Compare, P_Wrap }; 227 228 protected: 229 SCEVPredicateKind Kind; 230 ~SCEVPredicate() = default; 231 SCEVPredicate(const SCEVPredicate &) = default; 232 SCEVPredicate &operator=(const SCEVPredicate &) = default; 233 234 public: 235 SCEVPredicate(const FoldingSetNodeIDRef ID, SCEVPredicateKind Kind); 236 237 SCEVPredicateKind getKind() const { return Kind; } 238 239 /// Returns the estimated complexity of this predicate. This is roughly 240 /// measured in the number of run-time checks required. 241 virtual unsigned getComplexity() const { return 1; } 242 243 /// Returns true if the predicate is always true. This means that no 244 /// assumptions were made and nothing needs to be checked at run-time. 245 virtual bool isAlwaysTrue() const = 0; 246 247 /// Returns true if this predicate implies \p N. 248 virtual bool implies(const SCEVPredicate *N) const = 0; 249 250 /// Prints a textual representation of this predicate with an indentation of 251 /// \p Depth. 252 virtual void print(raw_ostream &OS, unsigned Depth = 0) const = 0; 253 }; 254 255 inline raw_ostream &operator<<(raw_ostream &OS, const SCEVPredicate &P) { 256 P.print(OS); 257 return OS; 258 } 259 260 // Specialize FoldingSetTrait for SCEVPredicate to avoid needing to compute 261 // temporary FoldingSetNodeID values. 262 template <> 263 struct FoldingSetTrait<SCEVPredicate> : DefaultFoldingSetTrait<SCEVPredicate> { 264 static void Profile(const SCEVPredicate &X, FoldingSetNodeID &ID) { 265 ID = X.FastID; 266 } 267 268 static bool Equals(const SCEVPredicate &X, const FoldingSetNodeID &ID, 269 unsigned IDHash, FoldingSetNodeID &TempID) { 270 return ID == X.FastID; 271 } 272 273 static unsigned ComputeHash(const SCEVPredicate &X, 274 FoldingSetNodeID &TempID) { 275 return X.FastID.ComputeHash(); 276 } 277 }; 278 279 /// This class represents an assumption that the expression LHS Pred RHS 280 /// evaluates to true, and this can be checked at run-time. 281 class SCEVComparePredicate final : public SCEVPredicate { 282 /// We assume that LHS Pred RHS is true. 283 const ICmpInst::Predicate Pred; 284 const SCEV *LHS; 285 const SCEV *RHS; 286 287 public: 288 SCEVComparePredicate(const FoldingSetNodeIDRef ID, 289 const ICmpInst::Predicate Pred, 290 const SCEV *LHS, const SCEV *RHS); 291 292 /// Implementation of the SCEVPredicate interface 293 bool implies(const SCEVPredicate *N) const override; 294 void print(raw_ostream &OS, unsigned Depth = 0) const override; 295 bool isAlwaysTrue() const override; 296 297 ICmpInst::Predicate getPredicate() const { return Pred; } 298 299 /// Returns the left hand side of the predicate. 300 const SCEV *getLHS() const { return LHS; } 301 302 /// Returns the right hand side of the predicate. 303 const SCEV *getRHS() const { return RHS; } 304 305 /// Methods for support type inquiry through isa, cast, and dyn_cast: 306 static bool classof(const SCEVPredicate *P) { 307 return P->getKind() == P_Compare; 308 } 309 }; 310 311 /// This class represents an assumption made on an AddRec expression. Given an 312 /// affine AddRec expression {a,+,b}, we assume that it has the nssw or nusw 313 /// flags (defined below) in the first X iterations of the loop, where X is a 314 /// SCEV expression returned by getPredicatedBackedgeTakenCount). 315 /// 316 /// Note that this does not imply that X is equal to the backedge taken 317 /// count. This means that if we have a nusw predicate for i32 {0,+,1} with a 318 /// predicated backedge taken count of X, we only guarantee that {0,+,1} has 319 /// nusw in the first X iterations. {0,+,1} may still wrap in the loop if we 320 /// have more than X iterations. 321 class SCEVWrapPredicate final : public SCEVPredicate { 322 public: 323 /// Similar to SCEV::NoWrapFlags, but with slightly different semantics 324 /// for FlagNUSW. The increment is considered to be signed, and a + b 325 /// (where b is the increment) is considered to wrap if: 326 /// zext(a + b) != zext(a) + sext(b) 327 /// 328 /// If Signed is a function that takes an n-bit tuple and maps to the 329 /// integer domain as the tuples value interpreted as twos complement, 330 /// and Unsigned a function that takes an n-bit tuple and maps to the 331 /// integer domain as the base two value of input tuple, then a + b 332 /// has IncrementNUSW iff: 333 /// 334 /// 0 <= Unsigned(a) + Signed(b) < 2^n 335 /// 336 /// The IncrementNSSW flag has identical semantics with SCEV::FlagNSW. 337 /// 338 /// Note that the IncrementNUSW flag is not commutative: if base + inc 339 /// has IncrementNUSW, then inc + base doesn't neccessarily have this 340 /// property. The reason for this is that this is used for sign/zero 341 /// extending affine AddRec SCEV expressions when a SCEVWrapPredicate is 342 /// assumed. A {base,+,inc} expression is already non-commutative with 343 /// regards to base and inc, since it is interpreted as: 344 /// (((base + inc) + inc) + inc) ... 345 enum IncrementWrapFlags { 346 IncrementAnyWrap = 0, // No guarantee. 347 IncrementNUSW = (1 << 0), // No unsigned with signed increment wrap. 348 IncrementNSSW = (1 << 1), // No signed with signed increment wrap 349 // (equivalent with SCEV::NSW) 350 IncrementNoWrapMask = (1 << 2) - 1 351 }; 352 353 /// Convenient IncrementWrapFlags manipulation methods. 354 [[nodiscard]] static SCEVWrapPredicate::IncrementWrapFlags 355 clearFlags(SCEVWrapPredicate::IncrementWrapFlags Flags, 356 SCEVWrapPredicate::IncrementWrapFlags OffFlags) { 357 assert((Flags & IncrementNoWrapMask) == Flags && "Invalid flags value!"); 358 assert((OffFlags & IncrementNoWrapMask) == OffFlags && 359 "Invalid flags value!"); 360 return (SCEVWrapPredicate::IncrementWrapFlags)(Flags & ~OffFlags); 361 } 362 363 [[nodiscard]] static SCEVWrapPredicate::IncrementWrapFlags 364 maskFlags(SCEVWrapPredicate::IncrementWrapFlags Flags, int Mask) { 365 assert((Flags & IncrementNoWrapMask) == Flags && "Invalid flags value!"); 366 assert((Mask & IncrementNoWrapMask) == Mask && "Invalid mask value!"); 367 368 return (SCEVWrapPredicate::IncrementWrapFlags)(Flags & Mask); 369 } 370 371 [[nodiscard]] static SCEVWrapPredicate::IncrementWrapFlags 372 setFlags(SCEVWrapPredicate::IncrementWrapFlags Flags, 373 SCEVWrapPredicate::IncrementWrapFlags OnFlags) { 374 assert((Flags & IncrementNoWrapMask) == Flags && "Invalid flags value!"); 375 assert((OnFlags & IncrementNoWrapMask) == OnFlags && 376 "Invalid flags value!"); 377 378 return (SCEVWrapPredicate::IncrementWrapFlags)(Flags | OnFlags); 379 } 380 381 /// Returns the set of SCEVWrapPredicate no wrap flags implied by a 382 /// SCEVAddRecExpr. 383 [[nodiscard]] static SCEVWrapPredicate::IncrementWrapFlags 384 getImpliedFlags(const SCEVAddRecExpr *AR, ScalarEvolution &SE); 385 386 private: 387 const SCEVAddRecExpr *AR; 388 IncrementWrapFlags Flags; 389 390 public: 391 explicit SCEVWrapPredicate(const FoldingSetNodeIDRef ID, 392 const SCEVAddRecExpr *AR, 393 IncrementWrapFlags Flags); 394 395 /// Returns the set assumed no overflow flags. 396 IncrementWrapFlags getFlags() const { return Flags; } 397 398 /// Implementation of the SCEVPredicate interface 399 const SCEVAddRecExpr *getExpr() const; 400 bool implies(const SCEVPredicate *N) const override; 401 void print(raw_ostream &OS, unsigned Depth = 0) const override; 402 bool isAlwaysTrue() const override; 403 404 /// Methods for support type inquiry through isa, cast, and dyn_cast: 405 static bool classof(const SCEVPredicate *P) { 406 return P->getKind() == P_Wrap; 407 } 408 }; 409 410 /// This class represents a composition of other SCEV predicates, and is the 411 /// class that most clients will interact with. This is equivalent to a 412 /// logical "AND" of all the predicates in the union. 413 /// 414 /// NB! Unlike other SCEVPredicate sub-classes this class does not live in the 415 /// ScalarEvolution::Preds folding set. This is why the \c add function is sound. 416 class SCEVUnionPredicate final : public SCEVPredicate { 417 private: 418 using PredicateMap = 419 DenseMap<const SCEV *, SmallVector<const SCEVPredicate *, 4>>; 420 421 /// Vector with references to all predicates in this union. 422 SmallVector<const SCEVPredicate *, 16> Preds; 423 424 /// Adds a predicate to this union. 425 void add(const SCEVPredicate *N); 426 427 public: 428 SCEVUnionPredicate(ArrayRef<const SCEVPredicate *> Preds); 429 430 const SmallVectorImpl<const SCEVPredicate *> &getPredicates() const { 431 return Preds; 432 } 433 434 /// Implementation of the SCEVPredicate interface 435 bool isAlwaysTrue() const override; 436 bool implies(const SCEVPredicate *N) const override; 437 void print(raw_ostream &OS, unsigned Depth) const override; 438 439 /// We estimate the complexity of a union predicate as the size number of 440 /// predicates in the union. 441 unsigned getComplexity() const override { return Preds.size(); } 442 443 /// Methods for support type inquiry through isa, cast, and dyn_cast: 444 static bool classof(const SCEVPredicate *P) { 445 return P->getKind() == P_Union; 446 } 447 }; 448 449 /// The main scalar evolution driver. Because client code (intentionally) 450 /// can't do much with the SCEV objects directly, they must ask this class 451 /// for services. 452 class ScalarEvolution { 453 friend class ScalarEvolutionsTest; 454 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 [[nodiscard]] static SCEV::NoWrapFlags maskFlags(SCEV::NoWrapFlags Flags, 473 int Mask) { 474 return (SCEV::NoWrapFlags)(Flags & Mask); 475 } 476 [[nodiscard]] static SCEV::NoWrapFlags setFlags(SCEV::NoWrapFlags Flags, 477 SCEV::NoWrapFlags OnFlags) { 478 return (SCEV::NoWrapFlags)(Flags | OnFlags); 479 } 480 [[nodiscard]] static SCEV::NoWrapFlags 481 clearFlags(SCEV::NoWrapFlags Flags, SCEV::NoWrapFlags OffFlags) { 482 return (SCEV::NoWrapFlags)(Flags & ~OffFlags); 483 } 484 [[nodiscard]] static bool hasFlags(SCEV::NoWrapFlags Flags, 485 SCEV::NoWrapFlags TestFlags) { 486 return TestFlags == maskFlags(Flags, TestFlags); 487 }; 488 489 ScalarEvolution(Function &F, TargetLibraryInfo &TLI, AssumptionCache &AC, 490 DominatorTree &DT, LoopInfo &LI); 491 ScalarEvolution(ScalarEvolution &&Arg); 492 ~ScalarEvolution(); 493 494 LLVMContext &getContext() const { return F.getContext(); } 495 496 /// Test if values of the given type are analyzable within the SCEV 497 /// framework. This primarily includes integer types, and it can optionally 498 /// include pointer types if the ScalarEvolution class has access to 499 /// target-specific information. 500 bool isSCEVable(Type *Ty) const; 501 502 /// Return the size in bits of the specified type, for which isSCEVable must 503 /// return true. 504 uint64_t getTypeSizeInBits(Type *Ty) const; 505 506 /// Return a type with the same bitwidth as the given type and which 507 /// represents how SCEV will treat the given type, for which isSCEVable must 508 /// return true. For pointer types, this is the pointer-sized integer type. 509 Type *getEffectiveSCEVType(Type *Ty) const; 510 511 // Returns a wider type among {Ty1, Ty2}. 512 Type *getWiderType(Type *Ty1, Type *Ty2) const; 513 514 /// Return true if there exists a point in the program at which both 515 /// A and B could be operands to the same instruction. 516 /// SCEV expressions are generally assumed to correspond to instructions 517 /// which could exists in IR. In general, this requires that there exists 518 /// a use point in the program where all operands dominate the use. 519 /// 520 /// Example: 521 /// loop { 522 /// if 523 /// loop { v1 = load @global1; } 524 /// else 525 /// loop { v2 = load @global2; } 526 /// } 527 /// No SCEV with operand V1, and v2 can exist in this program. 528 bool instructionCouldExistWithOperands(const SCEV *A, const SCEV *B); 529 530 /// Return true if the SCEV is a scAddRecExpr or it contains 531 /// scAddRecExpr. The result will be cached in HasRecMap. 532 bool containsAddRecurrence(const SCEV *S); 533 534 /// Is operation \p BinOp between \p LHS and \p RHS provably does not have 535 /// a signed/unsigned overflow (\p Signed)? If \p CtxI is specified, the 536 /// no-overflow fact should be true in the context of this instruction. 537 bool willNotOverflow(Instruction::BinaryOps BinOp, bool Signed, 538 const SCEV *LHS, const SCEV *RHS, 539 const Instruction *CtxI = nullptr); 540 541 /// Parse NSW/NUW flags from add/sub/mul IR binary operation \p Op into 542 /// SCEV no-wrap flags, and deduce flag[s] that aren't known yet. 543 /// Does not mutate the original instruction. Returns std::nullopt if it could 544 /// not deduce more precise flags than the instruction already has, otherwise 545 /// returns proven flags. 546 std::optional<SCEV::NoWrapFlags> 547 getStrengthenedNoWrapFlagsFromBinOp(const OverflowingBinaryOperator *OBO); 548 549 /// Notify this ScalarEvolution that \p User directly uses SCEVs in \p Ops. 550 void registerUser(const SCEV *User, ArrayRef<const SCEV *> Ops); 551 552 /// Return true if the SCEV expression contains an undef value. 553 bool containsUndefs(const SCEV *S) const; 554 555 /// Return true if the SCEV expression contains a Value that has been 556 /// optimised out and is now a nullptr. 557 bool containsErasedValue(const SCEV *S) const; 558 559 /// Return a SCEV expression for the full generality of the specified 560 /// expression. 561 const SCEV *getSCEV(Value *V); 562 563 /// Return an existing SCEV for V if there is one, otherwise return nullptr. 564 const SCEV *getExistingSCEV(Value *V); 565 566 const SCEV *getConstant(ConstantInt *V); 567 const SCEV *getConstant(const APInt &Val); 568 const SCEV *getConstant(Type *Ty, uint64_t V, bool isSigned = false); 569 const SCEV *getLosslessPtrToIntExpr(const SCEV *Op, unsigned Depth = 0); 570 const SCEV *getPtrToIntExpr(const SCEV *Op, Type *Ty); 571 const SCEV *getTruncateExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0); 572 const SCEV *getVScale(Type *Ty); 573 const SCEV *getElementCount(Type *Ty, ElementCount EC); 574 const SCEV *getZeroExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0); 575 const SCEV *getZeroExtendExprImpl(const SCEV *Op, Type *Ty, 576 unsigned Depth = 0); 577 const SCEV *getSignExtendExpr(const SCEV *Op, Type *Ty, unsigned Depth = 0); 578 const SCEV *getSignExtendExprImpl(const SCEV *Op, Type *Ty, 579 unsigned Depth = 0); 580 const SCEV *getCastExpr(SCEVTypes Kind, const SCEV *Op, Type *Ty); 581 const SCEV *getAnyExtendExpr(const SCEV *Op, Type *Ty); 582 const SCEV *getAddExpr(SmallVectorImpl<const SCEV *> &Ops, 583 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 584 unsigned Depth = 0); 585 const SCEV *getAddExpr(const SCEV *LHS, const SCEV *RHS, 586 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 587 unsigned Depth = 0) { 588 SmallVector<const SCEV *, 2> Ops = {LHS, RHS}; 589 return getAddExpr(Ops, Flags, Depth); 590 } 591 const SCEV *getAddExpr(const SCEV *Op0, const SCEV *Op1, const SCEV *Op2, 592 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 593 unsigned Depth = 0) { 594 SmallVector<const SCEV *, 3> Ops = {Op0, Op1, Op2}; 595 return getAddExpr(Ops, Flags, Depth); 596 } 597 const SCEV *getMulExpr(SmallVectorImpl<const SCEV *> &Ops, 598 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 599 unsigned Depth = 0); 600 const SCEV *getMulExpr(const SCEV *LHS, const SCEV *RHS, 601 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 602 unsigned Depth = 0) { 603 SmallVector<const SCEV *, 2> Ops = {LHS, RHS}; 604 return getMulExpr(Ops, Flags, Depth); 605 } 606 const SCEV *getMulExpr(const SCEV *Op0, const SCEV *Op1, const SCEV *Op2, 607 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 608 unsigned Depth = 0) { 609 SmallVector<const SCEV *, 3> Ops = {Op0, Op1, Op2}; 610 return getMulExpr(Ops, Flags, Depth); 611 } 612 const SCEV *getUDivExpr(const SCEV *LHS, const SCEV *RHS); 613 const SCEV *getUDivExactExpr(const SCEV *LHS, const SCEV *RHS); 614 const SCEV *getURemExpr(const SCEV *LHS, const SCEV *RHS); 615 const SCEV *getAddRecExpr(const SCEV *Start, const SCEV *Step, const Loop *L, 616 SCEV::NoWrapFlags Flags); 617 const SCEV *getAddRecExpr(SmallVectorImpl<const SCEV *> &Operands, 618 const Loop *L, SCEV::NoWrapFlags Flags); 619 const SCEV *getAddRecExpr(const SmallVectorImpl<const SCEV *> &Operands, 620 const Loop *L, SCEV::NoWrapFlags Flags) { 621 SmallVector<const SCEV *, 4> NewOp(Operands.begin(), Operands.end()); 622 return getAddRecExpr(NewOp, L, Flags); 623 } 624 625 /// Checks if \p SymbolicPHI can be rewritten as an AddRecExpr under some 626 /// Predicates. If successful return these <AddRecExpr, Predicates>; 627 /// The function is intended to be called from PSCEV (the caller will decide 628 /// whether to actually add the predicates and carry out the rewrites). 629 std::optional<std::pair<const SCEV *, SmallVector<const SCEVPredicate *, 3>>> 630 createAddRecFromPHIWithCasts(const SCEVUnknown *SymbolicPHI); 631 632 /// Returns an expression for a GEP 633 /// 634 /// \p GEP The GEP. The indices contained in the GEP itself are ignored, 635 /// instead we use IndexExprs. 636 /// \p IndexExprs The expressions for the indices. 637 const SCEV *getGEPExpr(GEPOperator *GEP, 638 const SmallVectorImpl<const SCEV *> &IndexExprs); 639 const SCEV *getAbsExpr(const SCEV *Op, bool IsNSW); 640 const SCEV *getMinMaxExpr(SCEVTypes Kind, 641 SmallVectorImpl<const SCEV *> &Operands); 642 const SCEV *getSequentialMinMaxExpr(SCEVTypes Kind, 643 SmallVectorImpl<const SCEV *> &Operands); 644 const SCEV *getSMaxExpr(const SCEV *LHS, const SCEV *RHS); 645 const SCEV *getSMaxExpr(SmallVectorImpl<const SCEV *> &Operands); 646 const SCEV *getUMaxExpr(const SCEV *LHS, const SCEV *RHS); 647 const SCEV *getUMaxExpr(SmallVectorImpl<const SCEV *> &Operands); 648 const SCEV *getSMinExpr(const SCEV *LHS, const SCEV *RHS); 649 const SCEV *getSMinExpr(SmallVectorImpl<const SCEV *> &Operands); 650 const SCEV *getUMinExpr(const SCEV *LHS, const SCEV *RHS, 651 bool Sequential = false); 652 const SCEV *getUMinExpr(SmallVectorImpl<const SCEV *> &Operands, 653 bool Sequential = false); 654 const SCEV *getUnknown(Value *V); 655 const SCEV *getCouldNotCompute(); 656 657 /// Return a SCEV for the constant 0 of a specific type. 658 const SCEV *getZero(Type *Ty) { return getConstant(Ty, 0); } 659 660 /// Return a SCEV for the constant 1 of a specific type. 661 const SCEV *getOne(Type *Ty) { return getConstant(Ty, 1); } 662 663 /// Return a SCEV for the constant \p Power of two. 664 const SCEV *getPowerOfTwo(Type *Ty, unsigned Power) { 665 assert(Power < getTypeSizeInBits(Ty) && "Power out of range"); 666 return getConstant(APInt::getOneBitSet(getTypeSizeInBits(Ty), Power)); 667 } 668 669 /// Return a SCEV for the constant -1 of a specific type. 670 const SCEV *getMinusOne(Type *Ty) { 671 return getConstant(Ty, -1, /*isSigned=*/true); 672 } 673 674 /// Return an expression for a TypeSize. 675 const SCEV *getSizeOfExpr(Type *IntTy, TypeSize Size); 676 677 /// Return an expression for the alloc size of AllocTy that is type IntTy 678 const SCEV *getSizeOfExpr(Type *IntTy, Type *AllocTy); 679 680 /// Return an expression for the store size of StoreTy that is type IntTy 681 const SCEV *getStoreSizeOfExpr(Type *IntTy, Type *StoreTy); 682 683 /// Return an expression for offsetof on the given field with type IntTy 684 const SCEV *getOffsetOfExpr(Type *IntTy, StructType *STy, unsigned FieldNo); 685 686 /// Return the SCEV object corresponding to -V. 687 const SCEV *getNegativeSCEV(const SCEV *V, 688 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap); 689 690 /// Return the SCEV object corresponding to ~V. 691 const SCEV *getNotSCEV(const SCEV *V); 692 693 /// Return LHS-RHS. Minus is represented in SCEV as A+B*-1. 694 /// 695 /// If the LHS and RHS are pointers which don't share a common base 696 /// (according to getPointerBase()), this returns a SCEVCouldNotCompute. 697 /// To compute the difference between two unrelated pointers, you can 698 /// explicitly convert the arguments using getPtrToIntExpr(), for pointer 699 /// types that support it. 700 const SCEV *getMinusSCEV(const SCEV *LHS, const SCEV *RHS, 701 SCEV::NoWrapFlags Flags = SCEV::FlagAnyWrap, 702 unsigned Depth = 0); 703 704 /// Compute ceil(N / D). N and D are treated as unsigned values. 705 /// 706 /// Since SCEV doesn't have native ceiling division, this generates a 707 /// SCEV expression of the following form: 708 /// 709 /// umin(N, 1) + floor((N - umin(N, 1)) / D) 710 /// 711 /// A denominator of zero or poison is handled the same way as getUDivExpr(). 712 const SCEV *getUDivCeilSCEV(const SCEV *N, const SCEV *D); 713 714 /// Return a SCEV corresponding to a conversion of the input value to the 715 /// specified type. If the type must be extended, it is zero extended. 716 const SCEV *getTruncateOrZeroExtend(const SCEV *V, Type *Ty, 717 unsigned Depth = 0); 718 719 /// Return a SCEV corresponding to a conversion of the input value to the 720 /// specified type. If the type must be extended, it is sign extended. 721 const SCEV *getTruncateOrSignExtend(const SCEV *V, Type *Ty, 722 unsigned Depth = 0); 723 724 /// Return a SCEV corresponding to a conversion of the input value to the 725 /// specified type. If the type must be extended, it is zero extended. The 726 /// conversion must not be narrowing. 727 const SCEV *getNoopOrZeroExtend(const SCEV *V, Type *Ty); 728 729 /// Return a SCEV corresponding to a conversion of the input value to the 730 /// specified type. If the type must be extended, it is sign extended. The 731 /// conversion must not be narrowing. 732 const SCEV *getNoopOrSignExtend(const SCEV *V, Type *Ty); 733 734 /// Return a SCEV corresponding to a conversion of the input value to the 735 /// specified type. If the type must be extended, it is extended with 736 /// unspecified bits. The conversion must not be narrowing. 737 const SCEV *getNoopOrAnyExtend(const SCEV *V, Type *Ty); 738 739 /// Return a SCEV corresponding to a conversion of the input value to the 740 /// specified type. The conversion must not be widening. 741 const SCEV *getTruncateOrNoop(const SCEV *V, Type *Ty); 742 743 /// Promote the operands to the wider of the types using zero-extension, and 744 /// then perform a umax operation with them. 745 const SCEV *getUMaxFromMismatchedTypes(const SCEV *LHS, const SCEV *RHS); 746 747 /// Promote the operands to the wider of the types using zero-extension, and 748 /// then perform a umin operation with them. 749 const SCEV *getUMinFromMismatchedTypes(const SCEV *LHS, const SCEV *RHS, 750 bool Sequential = false); 751 752 /// Promote the operands to the wider of the types using zero-extension, and 753 /// then perform a umin operation with them. N-ary function. 754 const SCEV *getUMinFromMismatchedTypes(SmallVectorImpl<const SCEV *> &Ops, 755 bool Sequential = false); 756 757 /// Transitively follow the chain of pointer-type operands until reaching a 758 /// SCEV that does not have a single pointer operand. This returns a 759 /// SCEVUnknown pointer for well-formed pointer-type expressions, but corner 760 /// cases do exist. 761 const SCEV *getPointerBase(const SCEV *V); 762 763 /// Compute an expression equivalent to S - getPointerBase(S). 764 const SCEV *removePointerBase(const SCEV *S); 765 766 /// Return a SCEV expression for the specified value at the specified scope 767 /// in the program. The L value specifies a loop nest to evaluate the 768 /// expression at, where null is the top-level or a specified loop is 769 /// immediately inside of the loop. 770 /// 771 /// This method can be used to compute the exit value for a variable defined 772 /// in a loop by querying what the value will hold in the parent loop. 773 /// 774 /// In the case that a relevant loop exit value cannot be computed, the 775 /// original value V is returned. 776 const SCEV *getSCEVAtScope(const SCEV *S, const Loop *L); 777 778 /// This is a convenience function which does getSCEVAtScope(getSCEV(V), L). 779 const SCEV *getSCEVAtScope(Value *V, const Loop *L); 780 781 /// Test whether entry to the loop is protected by a conditional between LHS 782 /// and RHS. This is used to help avoid max expressions in loop trip 783 /// counts, and to eliminate casts. 784 bool isLoopEntryGuardedByCond(const Loop *L, ICmpInst::Predicate Pred, 785 const SCEV *LHS, const SCEV *RHS); 786 787 /// Test whether entry to the basic block is protected by a conditional 788 /// between LHS and RHS. 789 bool isBasicBlockEntryGuardedByCond(const BasicBlock *BB, 790 ICmpInst::Predicate Pred, const SCEV *LHS, 791 const SCEV *RHS); 792 793 /// Test whether the backedge of the loop is protected by a conditional 794 /// between LHS and RHS. This is used to eliminate casts. 795 bool isLoopBackedgeGuardedByCond(const Loop *L, ICmpInst::Predicate Pred, 796 const SCEV *LHS, const SCEV *RHS); 797 798 /// A version of getTripCountFromExitCount below which always picks an 799 /// evaluation type which can not result in overflow. 800 const SCEV *getTripCountFromExitCount(const SCEV *ExitCount); 801 802 /// Convert from an "exit count" (i.e. "backedge taken count") to a "trip 803 /// count". A "trip count" is the number of times the header of the loop 804 /// will execute if an exit is taken after the specified number of backedges 805 /// have been taken. (e.g. TripCount = ExitCount + 1). Note that the 806 /// expression can overflow if ExitCount = UINT_MAX. If EvalTy is not wide 807 /// enough to hold the result without overflow, result unsigned wraps with 808 /// 2s-complement semantics. ex: EC = 255 (i8), TC = 0 (i8) 809 const SCEV *getTripCountFromExitCount(const SCEV *ExitCount, Type *EvalTy, 810 const Loop *L); 811 812 /// Returns the exact trip count of the loop if we can compute it, and 813 /// the result is a small constant. '0' is used to represent an unknown 814 /// or non-constant trip count. Note that a trip count is simply one more 815 /// than the backedge taken count for the loop. 816 unsigned getSmallConstantTripCount(const Loop *L); 817 818 /// Return the exact trip count for this loop if we exit through ExitingBlock. 819 /// '0' is used to represent an unknown or non-constant trip count. Note 820 /// that a trip count is simply one more than the backedge taken count for 821 /// the same exit. 822 /// This "trip count" assumes that control exits via ExitingBlock. More 823 /// precisely, it is the number of times that control will reach ExitingBlock 824 /// before taking the branch. For loops with multiple exits, it may not be 825 /// the number times that the loop header executes if the loop exits 826 /// prematurely via another branch. 827 unsigned getSmallConstantTripCount(const Loop *L, 828 const BasicBlock *ExitingBlock); 829 830 /// Returns the upper bound of the loop trip count as a normal unsigned 831 /// value. 832 /// Returns 0 if the trip count is unknown or not constant. 833 unsigned getSmallConstantMaxTripCount(const Loop *L); 834 835 /// Returns the largest constant divisor of the trip count as a normal 836 /// unsigned value, if possible. This means that the actual trip count is 837 /// always a multiple of the returned value. Returns 1 if the trip count is 838 /// unknown or not guaranteed to be the multiple of a constant., Will also 839 /// return 1 if the trip count is very large (>= 2^32). 840 /// Note that the argument is an exit count for loop L, NOT a trip count. 841 unsigned getSmallConstantTripMultiple(const Loop *L, 842 const SCEV *ExitCount); 843 844 /// Returns the largest constant divisor of the trip count of the 845 /// loop. Will return 1 if no trip count could be computed, or if a 846 /// divisor could not be found. 847 unsigned getSmallConstantTripMultiple(const Loop *L); 848 849 /// Returns the largest constant divisor of the trip count of this loop as a 850 /// normal unsigned value, if possible. This means that the actual trip 851 /// count is always a multiple of the returned value (don't forget the trip 852 /// count could very well be zero as well!). As explained in the comments 853 /// for getSmallConstantTripCount, this assumes that control exits the loop 854 /// via ExitingBlock. 855 unsigned getSmallConstantTripMultiple(const Loop *L, 856 const BasicBlock *ExitingBlock); 857 858 /// The terms "backedge taken count" and "exit count" are used 859 /// interchangeably to refer to the number of times the backedge of a loop 860 /// has executed before the loop is exited. 861 enum ExitCountKind { 862 /// An expression exactly describing the number of times the backedge has 863 /// executed when a loop is exited. 864 Exact, 865 /// A constant which provides an upper bound on the exact trip count. 866 ConstantMaximum, 867 /// An expression which provides an upper bound on the exact trip count. 868 SymbolicMaximum, 869 }; 870 871 /// Return the number of times the backedge executes before the given exit 872 /// would be taken; if not exactly computable, return SCEVCouldNotCompute. 873 /// For a single exit loop, this value is equivelent to the result of 874 /// getBackedgeTakenCount. The loop is guaranteed to exit (via *some* exit) 875 /// before the backedge is executed (ExitCount + 1) times. Note that there 876 /// is no guarantee about *which* exit is taken on the exiting iteration. 877 const SCEV *getExitCount(const Loop *L, const BasicBlock *ExitingBlock, 878 ExitCountKind Kind = Exact); 879 880 /// If the specified loop has a predictable backedge-taken count, return it, 881 /// otherwise return a SCEVCouldNotCompute object. The backedge-taken count is 882 /// the number of times the loop header will be branched to from within the 883 /// loop, assuming there are no abnormal exists like exception throws. This is 884 /// one less than the trip count of the loop, since it doesn't count the first 885 /// iteration, when the header is branched to from outside the loop. 886 /// 887 /// Note that it is not valid to call this method on a loop without a 888 /// loop-invariant backedge-taken count (see 889 /// hasLoopInvariantBackedgeTakenCount). 890 const SCEV *getBackedgeTakenCount(const Loop *L, ExitCountKind Kind = Exact); 891 892 /// Similar to getBackedgeTakenCount, except it will add a set of 893 /// SCEV predicates to Predicates that are required to be true in order for 894 /// the answer to be correct. Predicates can be checked with run-time 895 /// checks and can be used to perform loop versioning. 896 const SCEV *getPredicatedBackedgeTakenCount(const Loop *L, 897 SmallVector<const SCEVPredicate *, 4> &Predicates); 898 899 /// When successful, this returns a SCEVConstant that is greater than or equal 900 /// to (i.e. a "conservative over-approximation") of the value returend by 901 /// getBackedgeTakenCount. If such a value cannot be computed, it returns the 902 /// SCEVCouldNotCompute object. 903 const SCEV *getConstantMaxBackedgeTakenCount(const Loop *L) { 904 return getBackedgeTakenCount(L, ConstantMaximum); 905 } 906 907 /// When successful, this returns a SCEV that is greater than or equal 908 /// to (i.e. a "conservative over-approximation") of the value returend by 909 /// getBackedgeTakenCount. If such a value cannot be computed, it returns the 910 /// SCEVCouldNotCompute object. 911 const SCEV *getSymbolicMaxBackedgeTakenCount(const Loop *L) { 912 return getBackedgeTakenCount(L, SymbolicMaximum); 913 } 914 915 /// Similar to getSymbolicMaxBackedgeTakenCount, except it will add a set of 916 /// SCEV predicates to Predicates that are required to be true in order for 917 /// the answer to be correct. Predicates can be checked with run-time 918 /// checks and can be used to perform loop versioning. 919 const SCEV *getPredicatedSymbolicMaxBackedgeTakenCount( 920 const Loop *L, SmallVector<const SCEVPredicate *, 4> &Predicates); 921 922 /// Return true if the backedge taken count is either the value returned by 923 /// getConstantMaxBackedgeTakenCount or zero. 924 bool isBackedgeTakenCountMaxOrZero(const Loop *L); 925 926 /// Return true if the specified loop has an analyzable loop-invariant 927 /// backedge-taken count. 928 bool hasLoopInvariantBackedgeTakenCount(const Loop *L); 929 930 // This method should be called by the client when it made any change that 931 // would invalidate SCEV's answers, and the client wants to remove all loop 932 // information held internally by ScalarEvolution. This is intended to be used 933 // when the alternative to forget a loop is too expensive (i.e. large loop 934 // bodies). 935 void forgetAllLoops(); 936 937 /// This method should be called by the client when it has changed a loop in 938 /// a way that may effect ScalarEvolution's ability to compute a trip count, 939 /// or if the loop is deleted. This call is potentially expensive for large 940 /// loop bodies. 941 void forgetLoop(const Loop *L); 942 943 // This method invokes forgetLoop for the outermost loop of the given loop 944 // \p L, making ScalarEvolution forget about all this subtree. This needs to 945 // be done whenever we make a transform that may affect the parameters of the 946 // outer loop, such as exit counts for branches. 947 void forgetTopmostLoop(const Loop *L); 948 949 /// This method should be called by the client when it has changed a value 950 /// in a way that may effect its value, or which may disconnect it from a 951 /// def-use chain linking it to a loop. 952 void forgetValue(Value *V); 953 954 /// Forget LCSSA phi node V of loop L to which a new predecessor was added, 955 /// such that it may no longer be trivial. 956 void forgetLcssaPhiWithNewPredecessor(Loop *L, PHINode *V); 957 958 /// Called when the client has changed the disposition of values in 959 /// this loop. 960 /// 961 /// We don't have a way to invalidate per-loop dispositions. Clear and 962 /// recompute is simpler. 963 void forgetLoopDispositions(); 964 965 /// Called when the client has changed the disposition of values in 966 /// a loop or block. 967 /// 968 /// We don't have a way to invalidate per-loop/per-block dispositions. Clear 969 /// and recompute is simpler. 970 void forgetBlockAndLoopDispositions(Value *V = nullptr); 971 972 /// Determine the minimum number of zero bits that S is guaranteed to end in 973 /// (at every loop iteration). It is, at the same time, the minimum number 974 /// of times S is divisible by 2. For example, given {4,+,8} it returns 2. 975 /// If S is guaranteed to be 0, it returns the bitwidth of S. 976 uint32_t getMinTrailingZeros(const SCEV *S); 977 978 /// Returns the max constant multiple of S. 979 APInt getConstantMultiple(const SCEV *S); 980 981 // Returns the max constant multiple of S. If S is exactly 0, return 1. 982 APInt getNonZeroConstantMultiple(const SCEV *S); 983 984 /// Determine the unsigned range for a particular SCEV. 985 /// NOTE: This returns a copy of the reference returned by getRangeRef. 986 ConstantRange getUnsignedRange(const SCEV *S) { 987 return getRangeRef(S, HINT_RANGE_UNSIGNED); 988 } 989 990 /// Determine the min of the unsigned range for a particular SCEV. 991 APInt getUnsignedRangeMin(const SCEV *S) { 992 return getRangeRef(S, HINT_RANGE_UNSIGNED).getUnsignedMin(); 993 } 994 995 /// Determine the max of the unsigned range for a particular SCEV. 996 APInt getUnsignedRangeMax(const SCEV *S) { 997 return getRangeRef(S, HINT_RANGE_UNSIGNED).getUnsignedMax(); 998 } 999 1000 /// Determine the signed range for a particular SCEV. 1001 /// NOTE: This returns a copy of the reference returned by getRangeRef. 1002 ConstantRange getSignedRange(const SCEV *S) { 1003 return getRangeRef(S, HINT_RANGE_SIGNED); 1004 } 1005 1006 /// Determine the min of the signed range for a particular SCEV. 1007 APInt getSignedRangeMin(const SCEV *S) { 1008 return getRangeRef(S, HINT_RANGE_SIGNED).getSignedMin(); 1009 } 1010 1011 /// Determine the max of the signed range for a particular SCEV. 1012 APInt getSignedRangeMax(const SCEV *S) { 1013 return getRangeRef(S, HINT_RANGE_SIGNED).getSignedMax(); 1014 } 1015 1016 /// Test if the given expression is known to be negative. 1017 bool isKnownNegative(const SCEV *S); 1018 1019 /// Test if the given expression is known to be positive. 1020 bool isKnownPositive(const SCEV *S); 1021 1022 /// Test if the given expression is known to be non-negative. 1023 bool isKnownNonNegative(const SCEV *S); 1024 1025 /// Test if the given expression is known to be non-positive. 1026 bool isKnownNonPositive(const SCEV *S); 1027 1028 /// Test if the given expression is known to be non-zero. 1029 bool isKnownNonZero(const SCEV *S); 1030 1031 /// Splits SCEV expression \p S into two SCEVs. One of them is obtained from 1032 /// \p S by substitution of all AddRec sub-expression related to loop \p L 1033 /// with initial value of that SCEV. The second is obtained from \p S by 1034 /// substitution of all AddRec sub-expressions related to loop \p L with post 1035 /// increment of this AddRec in the loop \p L. In both cases all other AddRec 1036 /// sub-expressions (not related to \p L) remain the same. 1037 /// If the \p S contains non-invariant unknown SCEV the function returns 1038 /// CouldNotCompute SCEV in both values of std::pair. 1039 /// For example, for SCEV S={0, +, 1}<L1> + {0, +, 1}<L2> and loop L=L1 1040 /// the function returns pair: 1041 /// first = {0, +, 1}<L2> 1042 /// second = {1, +, 1}<L1> + {0, +, 1}<L2> 1043 /// We can see that for the first AddRec sub-expression it was replaced with 1044 /// 0 (initial value) for the first element and to {1, +, 1}<L1> (post 1045 /// increment value) for the second one. In both cases AddRec expression 1046 /// related to L2 remains the same. 1047 std::pair<const SCEV *, const SCEV *> SplitIntoInitAndPostInc(const Loop *L, 1048 const SCEV *S); 1049 1050 /// We'd like to check the predicate on every iteration of the most dominated 1051 /// loop between loops used in LHS and RHS. 1052 /// To do this we use the following list of steps: 1053 /// 1. Collect set S all loops on which either LHS or RHS depend. 1054 /// 2. If S is non-empty 1055 /// a. Let PD be the element of S which is dominated by all other elements. 1056 /// b. Let E(LHS) be value of LHS on entry of PD. 1057 /// To get E(LHS), we should just take LHS and replace all AddRecs that are 1058 /// attached to PD on with their entry values. 1059 /// Define E(RHS) in the same way. 1060 /// c. Let B(LHS) be value of L on backedge of PD. 1061 /// To get B(LHS), we should just take LHS and replace all AddRecs that are 1062 /// attached to PD on with their backedge values. 1063 /// Define B(RHS) in the same way. 1064 /// d. Note that E(LHS) and E(RHS) are automatically available on entry of PD, 1065 /// so we can assert on that. 1066 /// e. Return true if isLoopEntryGuardedByCond(Pred, E(LHS), E(RHS)) && 1067 /// isLoopBackedgeGuardedByCond(Pred, B(LHS), B(RHS)) 1068 bool isKnownViaInduction(ICmpInst::Predicate Pred, const SCEV *LHS, 1069 const SCEV *RHS); 1070 1071 /// Test if the given expression is known to satisfy the condition described 1072 /// by Pred, LHS, and RHS. 1073 bool isKnownPredicate(ICmpInst::Predicate Pred, const SCEV *LHS, 1074 const SCEV *RHS); 1075 1076 /// Check whether the condition described by Pred, LHS, and RHS is true or 1077 /// false. If we know it, return the evaluation of this condition. If neither 1078 /// is proved, return std::nullopt. 1079 std::optional<bool> evaluatePredicate(ICmpInst::Predicate Pred, 1080 const SCEV *LHS, const SCEV *RHS); 1081 1082 /// Test if the given expression is known to satisfy the condition described 1083 /// by Pred, LHS, and RHS in the given Context. 1084 bool isKnownPredicateAt(ICmpInst::Predicate Pred, const SCEV *LHS, 1085 const SCEV *RHS, const Instruction *CtxI); 1086 1087 /// Check whether the condition described by Pred, LHS, and RHS is true or 1088 /// false in the given \p Context. If we know it, return the evaluation of 1089 /// this condition. If neither is proved, return std::nullopt. 1090 std::optional<bool> evaluatePredicateAt(ICmpInst::Predicate Pred, 1091 const SCEV *LHS, const SCEV *RHS, 1092 const Instruction *CtxI); 1093 1094 /// Test if the condition described by Pred, LHS, RHS is known to be true on 1095 /// every iteration of the loop of the recurrency LHS. 1096 bool isKnownOnEveryIteration(ICmpInst::Predicate Pred, 1097 const SCEVAddRecExpr *LHS, const SCEV *RHS); 1098 1099 /// Information about the number of loop iterations for which a loop exit's 1100 /// branch condition evaluates to the not-taken path. This is a temporary 1101 /// pair of exact and max expressions that are eventually summarized in 1102 /// ExitNotTakenInfo and BackedgeTakenInfo. 1103 struct ExitLimit { 1104 const SCEV *ExactNotTaken; // The exit is not taken exactly this many times 1105 const SCEV *ConstantMaxNotTaken; // The exit is not taken at most this many 1106 // times 1107 const SCEV *SymbolicMaxNotTaken; 1108 1109 // Not taken either exactly ConstantMaxNotTaken or zero times 1110 bool MaxOrZero = false; 1111 1112 /// A set of predicate guards for this ExitLimit. The result is only valid 1113 /// if all of the predicates in \c Predicates evaluate to 'true' at 1114 /// run-time. 1115 SmallPtrSet<const SCEVPredicate *, 4> Predicates; 1116 1117 void addPredicate(const SCEVPredicate *P) { 1118 assert(!isa<SCEVUnionPredicate>(P) && "Only add leaf predicates here!"); 1119 Predicates.insert(P); 1120 } 1121 1122 /// Construct either an exact exit limit from a constant, or an unknown 1123 /// one from a SCEVCouldNotCompute. No other types of SCEVs are allowed 1124 /// as arguments and asserts enforce that internally. 1125 /*implicit*/ ExitLimit(const SCEV *E); 1126 1127 ExitLimit( 1128 const SCEV *E, const SCEV *ConstantMaxNotTaken, 1129 const SCEV *SymbolicMaxNotTaken, bool MaxOrZero, 1130 ArrayRef<const SmallPtrSetImpl<const SCEVPredicate *> *> PredSetList = 1131 std::nullopt); 1132 1133 ExitLimit(const SCEV *E, const SCEV *ConstantMaxNotTaken, 1134 const SCEV *SymbolicMaxNotTaken, bool MaxOrZero, 1135 const SmallPtrSetImpl<const SCEVPredicate *> &PredSet); 1136 1137 /// Test whether this ExitLimit contains any computed information, or 1138 /// whether it's all SCEVCouldNotCompute values. 1139 bool hasAnyInfo() const { 1140 return !isa<SCEVCouldNotCompute>(ExactNotTaken) || 1141 !isa<SCEVCouldNotCompute>(ConstantMaxNotTaken); 1142 } 1143 1144 /// Test whether this ExitLimit contains all information. 1145 bool hasFullInfo() const { 1146 return !isa<SCEVCouldNotCompute>(ExactNotTaken); 1147 } 1148 }; 1149 1150 /// Compute the number of times the backedge of the specified loop will 1151 /// execute if its exit condition were a conditional branch of ExitCond. 1152 /// 1153 /// \p ControlsOnlyExit is true if ExitCond directly controls the only exit 1154 /// branch. In this case, we can assume that the loop exits only if the 1155 /// condition is true and can infer that failing to meet the condition prior 1156 /// to integer wraparound results in undefined behavior. 1157 /// 1158 /// If \p AllowPredicates is set, this call will try to use a minimal set of 1159 /// SCEV predicates in order to return an exact answer. 1160 ExitLimit computeExitLimitFromCond(const Loop *L, Value *ExitCond, 1161 bool ExitIfTrue, bool ControlsOnlyExit, 1162 bool AllowPredicates = false); 1163 1164 /// A predicate is said to be monotonically increasing if may go from being 1165 /// false to being true as the loop iterates, but never the other way 1166 /// around. A predicate is said to be monotonically decreasing if may go 1167 /// from being true to being false as the loop iterates, but never the other 1168 /// way around. 1169 enum MonotonicPredicateType { 1170 MonotonicallyIncreasing, 1171 MonotonicallyDecreasing 1172 }; 1173 1174 /// If, for all loop invariant X, the predicate "LHS `Pred` X" is 1175 /// monotonically increasing or decreasing, returns 1176 /// Some(MonotonicallyIncreasing) and Some(MonotonicallyDecreasing) 1177 /// respectively. If we could not prove either of these facts, returns 1178 /// std::nullopt. 1179 std::optional<MonotonicPredicateType> 1180 getMonotonicPredicateType(const SCEVAddRecExpr *LHS, 1181 ICmpInst::Predicate Pred); 1182 1183 struct LoopInvariantPredicate { 1184 ICmpInst::Predicate Pred; 1185 const SCEV *LHS; 1186 const SCEV *RHS; 1187 1188 LoopInvariantPredicate(ICmpInst::Predicate Pred, const SCEV *LHS, 1189 const SCEV *RHS) 1190 : Pred(Pred), LHS(LHS), RHS(RHS) {} 1191 }; 1192 /// If the result of the predicate LHS `Pred` RHS is loop invariant with 1193 /// respect to L, return a LoopInvariantPredicate with LHS and RHS being 1194 /// invariants, available at L's entry. Otherwise, return std::nullopt. 1195 std::optional<LoopInvariantPredicate> 1196 getLoopInvariantPredicate(ICmpInst::Predicate Pred, const SCEV *LHS, 1197 const SCEV *RHS, const Loop *L, 1198 const Instruction *CtxI = nullptr); 1199 1200 /// If the result of the predicate LHS `Pred` RHS is loop invariant with 1201 /// respect to L at given Context during at least first MaxIter iterations, 1202 /// return a LoopInvariantPredicate with LHS and RHS being invariants, 1203 /// available at L's entry. Otherwise, return std::nullopt. The predicate 1204 /// should be the loop's exit condition. 1205 std::optional<LoopInvariantPredicate> 1206 getLoopInvariantExitCondDuringFirstIterations(ICmpInst::Predicate Pred, 1207 const SCEV *LHS, 1208 const SCEV *RHS, const Loop *L, 1209 const Instruction *CtxI, 1210 const SCEV *MaxIter); 1211 1212 std::optional<LoopInvariantPredicate> 1213 getLoopInvariantExitCondDuringFirstIterationsImpl( 1214 ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS, const Loop *L, 1215 const Instruction *CtxI, const SCEV *MaxIter); 1216 1217 /// Simplify LHS and RHS in a comparison with predicate Pred. Return true 1218 /// iff any changes were made. If the operands are provably equal or 1219 /// unequal, LHS and RHS are set to the same value and Pred is set to either 1220 /// ICMP_EQ or ICMP_NE. 1221 bool SimplifyICmpOperands(ICmpInst::Predicate &Pred, const SCEV *&LHS, 1222 const SCEV *&RHS, unsigned Depth = 0); 1223 1224 /// Return the "disposition" of the given SCEV with respect to the given 1225 /// loop. 1226 LoopDisposition getLoopDisposition(const SCEV *S, const Loop *L); 1227 1228 /// Return true if the value of the given SCEV is unchanging in the 1229 /// specified loop. 1230 bool isLoopInvariant(const SCEV *S, const Loop *L); 1231 1232 /// Determine if the SCEV can be evaluated at loop's entry. It is true if it 1233 /// doesn't depend on a SCEVUnknown of an instruction which is dominated by 1234 /// the header of loop L. 1235 bool isAvailableAtLoopEntry(const SCEV *S, const Loop *L); 1236 1237 /// Return true if the given SCEV changes value in a known way in the 1238 /// specified loop. This property being true implies that the value is 1239 /// variant in the loop AND that we can emit an expression to compute the 1240 /// value of the expression at any particular loop iteration. 1241 bool hasComputableLoopEvolution(const SCEV *S, const Loop *L); 1242 1243 /// Return the "disposition" of the given SCEV with respect to the given 1244 /// block. 1245 BlockDisposition getBlockDisposition(const SCEV *S, const BasicBlock *BB); 1246 1247 /// Return true if elements that makes up the given SCEV dominate the 1248 /// specified basic block. 1249 bool dominates(const SCEV *S, const BasicBlock *BB); 1250 1251 /// Return true if elements that makes up the given SCEV properly dominate 1252 /// the specified basic block. 1253 bool properlyDominates(const SCEV *S, const BasicBlock *BB); 1254 1255 /// Test whether the given SCEV has Op as a direct or indirect operand. 1256 bool hasOperand(const SCEV *S, const SCEV *Op) const; 1257 1258 /// Return the size of an element read or written by Inst. 1259 const SCEV *getElementSize(Instruction *Inst); 1260 1261 void print(raw_ostream &OS) const; 1262 void verify() const; 1263 bool invalidate(Function &F, const PreservedAnalyses &PA, 1264 FunctionAnalysisManager::Invalidator &Inv); 1265 1266 /// Return the DataLayout associated with the module this SCEV instance is 1267 /// operating on. 1268 const DataLayout &getDataLayout() const { return DL; } 1269 1270 const SCEVPredicate *getEqualPredicate(const SCEV *LHS, const SCEV *RHS); 1271 const SCEVPredicate *getComparePredicate(ICmpInst::Predicate Pred, 1272 const SCEV *LHS, const SCEV *RHS); 1273 1274 const SCEVPredicate * 1275 getWrapPredicate(const SCEVAddRecExpr *AR, 1276 SCEVWrapPredicate::IncrementWrapFlags AddedFlags); 1277 1278 /// Re-writes the SCEV according to the Predicates in \p A. 1279 const SCEV *rewriteUsingPredicate(const SCEV *S, const Loop *L, 1280 const SCEVPredicate &A); 1281 /// Tries to convert the \p S expression to an AddRec expression, 1282 /// adding additional predicates to \p Preds as required. 1283 const SCEVAddRecExpr *convertSCEVToAddRecWithPredicates( 1284 const SCEV *S, const Loop *L, 1285 SmallPtrSetImpl<const SCEVPredicate *> &Preds); 1286 1287 /// Compute \p LHS - \p RHS and returns the result as an APInt if it is a 1288 /// constant, and std::nullopt if it isn't. 1289 /// 1290 /// This is intended to be a cheaper version of getMinusSCEV. We can be 1291 /// frugal here since we just bail out of actually constructing and 1292 /// canonicalizing an expression in the cases where the result isn't going 1293 /// to be a constant. 1294 std::optional<APInt> computeConstantDifference(const SCEV *LHS, 1295 const SCEV *RHS); 1296 1297 /// Update no-wrap flags of an AddRec. This may drop the cached info about 1298 /// this AddRec (such as range info) in case if new flags may potentially 1299 /// sharpen it. 1300 void setNoWrapFlags(SCEVAddRecExpr *AddRec, SCEV::NoWrapFlags Flags); 1301 1302 class LoopGuards { 1303 DenseMap<const SCEV *, const SCEV *> RewriteMap; 1304 bool PreserveNUW = false; 1305 bool PreserveNSW = false; 1306 ScalarEvolution &SE; 1307 1308 LoopGuards(ScalarEvolution &SE) : SE(SE) {} 1309 1310 public: 1311 /// Collect rewrite map for loop guards for loop \p L, together with flags 1312 /// indicating if NUW and NSW can be preserved during rewriting. 1313 static LoopGuards collect(const Loop *L, ScalarEvolution &SE); 1314 1315 /// Try to apply the collected loop guards to \p Expr. 1316 const SCEV *rewrite(const SCEV *Expr) const; 1317 }; 1318 1319 /// Try to apply information from loop guards for \p L to \p Expr. 1320 const SCEV *applyLoopGuards(const SCEV *Expr, const Loop *L); 1321 const SCEV *applyLoopGuards(const SCEV *Expr, const LoopGuards &Guards); 1322 1323 /// Return true if the loop has no abnormal exits. That is, if the loop 1324 /// is not infinite, it must exit through an explicit edge in the CFG. 1325 /// (As opposed to either a) throwing out of the function or b) entering a 1326 /// well defined infinite loop in some callee.) 1327 bool loopHasNoAbnormalExits(const Loop *L) { 1328 return getLoopProperties(L).HasNoAbnormalExits; 1329 } 1330 1331 /// Return true if this loop is finite by assumption. That is, 1332 /// to be infinite, it must also be undefined. 1333 bool loopIsFiniteByAssumption(const Loop *L); 1334 1335 /// Return the set of Values that, if poison, will definitively result in S 1336 /// being poison as well. The returned set may be incomplete, i.e. there can 1337 /// be additional Values that also result in S being poison. 1338 void getPoisonGeneratingValues(SmallPtrSetImpl<const Value *> &Result, 1339 const SCEV *S); 1340 1341 /// Check whether it is poison-safe to represent the expression S using the 1342 /// instruction I. If such a replacement is performed, the poison flags of 1343 /// instructions in DropPoisonGeneratingInsts must be dropped. 1344 bool canReuseInstruction( 1345 const SCEV *S, Instruction *I, 1346 SmallVectorImpl<Instruction *> &DropPoisonGeneratingInsts); 1347 1348 class FoldID { 1349 const SCEV *Op = nullptr; 1350 const Type *Ty = nullptr; 1351 unsigned short C; 1352 1353 public: 1354 FoldID(SCEVTypes C, const SCEV *Op, const Type *Ty) : Op(Op), Ty(Ty), C(C) { 1355 assert(Op); 1356 assert(Ty); 1357 } 1358 1359 FoldID(unsigned short C) : C(C) {} 1360 1361 unsigned computeHash() const { 1362 return detail::combineHashValue( 1363 C, detail::combineHashValue(reinterpret_cast<uintptr_t>(Op), 1364 reinterpret_cast<uintptr_t>(Ty))); 1365 } 1366 1367 bool operator==(const FoldID &RHS) const { 1368 return std::tie(Op, Ty, C) == std::tie(RHS.Op, RHS.Ty, RHS.C); 1369 } 1370 }; 1371 1372 private: 1373 /// A CallbackVH to arrange for ScalarEvolution to be notified whenever a 1374 /// Value is deleted. 1375 class SCEVCallbackVH final : public CallbackVH { 1376 ScalarEvolution *SE; 1377 1378 void deleted() override; 1379 void allUsesReplacedWith(Value *New) override; 1380 1381 public: 1382 SCEVCallbackVH(Value *V, ScalarEvolution *SE = nullptr); 1383 }; 1384 1385 friend class SCEVCallbackVH; 1386 friend class SCEVExpander; 1387 friend class SCEVUnknown; 1388 1389 /// The function we are analyzing. 1390 Function &F; 1391 1392 /// Data layout of the module. 1393 const DataLayout &DL; 1394 1395 /// Does the module have any calls to the llvm.experimental.guard intrinsic 1396 /// at all? If this is false, we avoid doing work that will only help if 1397 /// thare are guards present in the IR. 1398 bool HasGuards; 1399 1400 /// The target library information for the target we are targeting. 1401 TargetLibraryInfo &TLI; 1402 1403 /// The tracker for \@llvm.assume intrinsics in this function. 1404 AssumptionCache &AC; 1405 1406 /// The dominator tree. 1407 DominatorTree &DT; 1408 1409 /// The loop information for the function we are currently analyzing. 1410 LoopInfo &LI; 1411 1412 /// This SCEV is used to represent unknown trip counts and things. 1413 std::unique_ptr<SCEVCouldNotCompute> CouldNotCompute; 1414 1415 /// The type for HasRecMap. 1416 using HasRecMapType = DenseMap<const SCEV *, bool>; 1417 1418 /// This is a cache to record whether a SCEV contains any scAddRecExpr. 1419 HasRecMapType HasRecMap; 1420 1421 /// The type for ExprValueMap. 1422 using ValueSetVector = SmallSetVector<Value *, 4>; 1423 using ExprValueMapType = DenseMap<const SCEV *, ValueSetVector>; 1424 1425 /// ExprValueMap -- This map records the original values from which 1426 /// the SCEV expr is generated from. 1427 ExprValueMapType ExprValueMap; 1428 1429 /// The type for ValueExprMap. 1430 using ValueExprMapType = 1431 DenseMap<SCEVCallbackVH, const SCEV *, DenseMapInfo<Value *>>; 1432 1433 /// This is a cache of the values we have analyzed so far. 1434 ValueExprMapType ValueExprMap; 1435 1436 /// This is a cache for expressions that got folded to a different existing 1437 /// SCEV. 1438 DenseMap<FoldID, const SCEV *> FoldCache; 1439 DenseMap<const SCEV *, SmallVector<FoldID, 2>> FoldCacheUser; 1440 1441 /// Mark predicate values currently being processed by isImpliedCond. 1442 SmallPtrSet<const Value *, 6> PendingLoopPredicates; 1443 1444 /// Mark SCEVUnknown Phis currently being processed by getRangeRef. 1445 SmallPtrSet<const PHINode *, 6> PendingPhiRanges; 1446 1447 /// Mark SCEVUnknown Phis currently being processed by getRangeRefIter. 1448 SmallPtrSet<const PHINode *, 6> PendingPhiRangesIter; 1449 1450 // Mark SCEVUnknown Phis currently being processed by isImpliedViaMerge. 1451 SmallPtrSet<const PHINode *, 6> PendingMerges; 1452 1453 /// Set to true by isLoopBackedgeGuardedByCond when we're walking the set of 1454 /// conditions dominating the backedge of a loop. 1455 bool WalkingBEDominatingConds = false; 1456 1457 /// Set to true by isKnownPredicateViaSplitting when we're trying to prove a 1458 /// predicate by splitting it into a set of independent predicates. 1459 bool ProvingSplitPredicate = false; 1460 1461 /// Memoized values for the getConstantMultiple 1462 DenseMap<const SCEV *, APInt> ConstantMultipleCache; 1463 1464 /// Return the Value set from which the SCEV expr is generated. 1465 ArrayRef<Value *> getSCEVValues(const SCEV *S); 1466 1467 /// Private helper method for the getConstantMultiple method. 1468 APInt getConstantMultipleImpl(const SCEV *S); 1469 1470 /// Information about the number of times a particular loop exit may be 1471 /// reached before exiting the loop. 1472 struct ExitNotTakenInfo { 1473 PoisoningVH<BasicBlock> ExitingBlock; 1474 const SCEV *ExactNotTaken; 1475 const SCEV *ConstantMaxNotTaken; 1476 const SCEV *SymbolicMaxNotTaken; 1477 SmallPtrSet<const SCEVPredicate *, 4> Predicates; 1478 1479 explicit ExitNotTakenInfo( 1480 PoisoningVH<BasicBlock> ExitingBlock, const SCEV *ExactNotTaken, 1481 const SCEV *ConstantMaxNotTaken, const SCEV *SymbolicMaxNotTaken, 1482 const SmallPtrSet<const SCEVPredicate *, 4> &Predicates) 1483 : ExitingBlock(ExitingBlock), ExactNotTaken(ExactNotTaken), 1484 ConstantMaxNotTaken(ConstantMaxNotTaken), 1485 SymbolicMaxNotTaken(SymbolicMaxNotTaken), Predicates(Predicates) {} 1486 1487 bool hasAlwaysTruePredicate() const { 1488 return Predicates.empty(); 1489 } 1490 }; 1491 1492 /// Information about the backedge-taken count of a loop. This currently 1493 /// includes an exact count and a maximum count. 1494 /// 1495 class BackedgeTakenInfo { 1496 friend class ScalarEvolution; 1497 1498 /// A list of computable exits and their not-taken counts. Loops almost 1499 /// never have more than one computable exit. 1500 SmallVector<ExitNotTakenInfo, 1> ExitNotTaken; 1501 1502 /// Expression indicating the least constant maximum backedge-taken count of 1503 /// the loop that is known, or a SCEVCouldNotCompute. This expression is 1504 /// only valid if the redicates associated with all loop exits are true. 1505 const SCEV *ConstantMax = nullptr; 1506 1507 /// Indicating if \c ExitNotTaken has an element for every exiting block in 1508 /// the loop. 1509 bool IsComplete = false; 1510 1511 /// Expression indicating the least maximum backedge-taken count of the loop 1512 /// that is known, or a SCEVCouldNotCompute. Lazily computed on first query. 1513 const SCEV *SymbolicMax = nullptr; 1514 1515 /// True iff the backedge is taken either exactly Max or zero times. 1516 bool MaxOrZero = false; 1517 1518 bool isComplete() const { return IsComplete; } 1519 const SCEV *getConstantMax() const { return ConstantMax; } 1520 1521 public: 1522 BackedgeTakenInfo() = default; 1523 BackedgeTakenInfo(BackedgeTakenInfo &&) = default; 1524 BackedgeTakenInfo &operator=(BackedgeTakenInfo &&) = default; 1525 1526 using EdgeExitInfo = std::pair<BasicBlock *, ExitLimit>; 1527 1528 /// Initialize BackedgeTakenInfo from a list of exact exit counts. 1529 BackedgeTakenInfo(ArrayRef<EdgeExitInfo> ExitCounts, bool IsComplete, 1530 const SCEV *ConstantMax, bool MaxOrZero); 1531 1532 /// Test whether this BackedgeTakenInfo contains any computed information, 1533 /// or whether it's all SCEVCouldNotCompute values. 1534 bool hasAnyInfo() const { 1535 return !ExitNotTaken.empty() || 1536 !isa<SCEVCouldNotCompute>(getConstantMax()); 1537 } 1538 1539 /// Test whether this BackedgeTakenInfo contains complete information. 1540 bool hasFullInfo() const { return isComplete(); } 1541 1542 /// Return an expression indicating the exact *backedge-taken* 1543 /// count of the loop if it is known or SCEVCouldNotCompute 1544 /// otherwise. If execution makes it to the backedge on every 1545 /// iteration (i.e. there are no abnormal exists like exception 1546 /// throws and thread exits) then this is the number of times the 1547 /// loop header will execute minus one. 1548 /// 1549 /// If the SCEV predicate associated with the answer can be different 1550 /// from AlwaysTrue, we must add a (non null) Predicates argument. 1551 /// The SCEV predicate associated with the answer will be added to 1552 /// Predicates. A run-time check needs to be emitted for the SCEV 1553 /// predicate in order for the answer to be valid. 1554 /// 1555 /// Note that we should always know if we need to pass a predicate 1556 /// argument or not from the way the ExitCounts vector was computed. 1557 /// If we allowed SCEV predicates to be generated when populating this 1558 /// vector, this information can contain them and therefore a 1559 /// SCEVPredicate argument should be added to getExact. 1560 const SCEV *getExact(const Loop *L, ScalarEvolution *SE, 1561 SmallVector<const SCEVPredicate *, 4> *Predicates = nullptr) const; 1562 1563 /// Return the number of times this loop exit may fall through to the back 1564 /// edge, or SCEVCouldNotCompute. The loop is guaranteed not to exit via 1565 /// this block before this number of iterations, but may exit via another 1566 /// block. 1567 const SCEV *getExact(const BasicBlock *ExitingBlock, 1568 ScalarEvolution *SE) const; 1569 1570 /// Get the constant max backedge taken count for the loop. 1571 const SCEV *getConstantMax(ScalarEvolution *SE) const; 1572 1573 /// Get the constant max backedge taken count for the particular loop exit. 1574 const SCEV *getConstantMax(const BasicBlock *ExitingBlock, 1575 ScalarEvolution *SE) const; 1576 1577 /// Get the symbolic max backedge taken count for the loop. 1578 const SCEV * 1579 getSymbolicMax(const Loop *L, ScalarEvolution *SE, 1580 SmallVector<const SCEVPredicate *, 4> *Predicates = nullptr); 1581 1582 /// Get the symbolic max backedge taken count for the particular loop exit. 1583 const SCEV *getSymbolicMax(const BasicBlock *ExitingBlock, 1584 ScalarEvolution *SE) const; 1585 1586 /// Return true if the number of times this backedge is taken is either the 1587 /// value returned by getConstantMax or zero. 1588 bool isConstantMaxOrZero(ScalarEvolution *SE) const; 1589 }; 1590 1591 /// Cache the backedge-taken count of the loops for this function as they 1592 /// are computed. 1593 DenseMap<const Loop *, BackedgeTakenInfo> BackedgeTakenCounts; 1594 1595 /// Cache the predicated backedge-taken count of the loops for this 1596 /// function as they are computed. 1597 DenseMap<const Loop *, BackedgeTakenInfo> PredicatedBackedgeTakenCounts; 1598 1599 /// Loops whose backedge taken counts directly use this non-constant SCEV. 1600 DenseMap<const SCEV *, SmallPtrSet<PointerIntPair<const Loop *, 1, bool>, 4>> 1601 BECountUsers; 1602 1603 /// This map contains entries for all of the PHI instructions that we 1604 /// attempt to compute constant evolutions for. This allows us to avoid 1605 /// potentially expensive recomputation of these properties. An instruction 1606 /// maps to null if we are unable to compute its exit value. 1607 DenseMap<PHINode *, Constant *> ConstantEvolutionLoopExitValue; 1608 1609 /// This map contains entries for all the expressions that we attempt to 1610 /// compute getSCEVAtScope information for, which can be expensive in 1611 /// extreme cases. 1612 DenseMap<const SCEV *, SmallVector<std::pair<const Loop *, const SCEV *>, 2>> 1613 ValuesAtScopes; 1614 1615 /// Reverse map for invalidation purposes: Stores of which SCEV and which 1616 /// loop this is the value-at-scope of. 1617 DenseMap<const SCEV *, SmallVector<std::pair<const Loop *, const SCEV *>, 2>> 1618 ValuesAtScopesUsers; 1619 1620 /// Memoized computeLoopDisposition results. 1621 DenseMap<const SCEV *, 1622 SmallVector<PointerIntPair<const Loop *, 2, LoopDisposition>, 2>> 1623 LoopDispositions; 1624 1625 struct LoopProperties { 1626 /// Set to true if the loop contains no instruction that can abnormally exit 1627 /// the loop (i.e. via throwing an exception, by terminating the thread 1628 /// cleanly or by infinite looping in a called function). Strictly 1629 /// speaking, the last one is not leaving the loop, but is identical to 1630 /// leaving the loop for reasoning about undefined behavior. 1631 bool HasNoAbnormalExits; 1632 1633 /// Set to true if the loop contains no instruction that can have side 1634 /// effects (i.e. via throwing an exception, volatile or atomic access). 1635 bool HasNoSideEffects; 1636 }; 1637 1638 /// Cache for \c getLoopProperties. 1639 DenseMap<const Loop *, LoopProperties> LoopPropertiesCache; 1640 1641 /// Return a \c LoopProperties instance for \p L, creating one if necessary. 1642 LoopProperties getLoopProperties(const Loop *L); 1643 1644 bool loopHasNoSideEffects(const Loop *L) { 1645 return getLoopProperties(L).HasNoSideEffects; 1646 } 1647 1648 /// Compute a LoopDisposition value. 1649 LoopDisposition computeLoopDisposition(const SCEV *S, const Loop *L); 1650 1651 /// Memoized computeBlockDisposition results. 1652 DenseMap< 1653 const SCEV *, 1654 SmallVector<PointerIntPair<const BasicBlock *, 2, BlockDisposition>, 2>> 1655 BlockDispositions; 1656 1657 /// Compute a BlockDisposition value. 1658 BlockDisposition computeBlockDisposition(const SCEV *S, const BasicBlock *BB); 1659 1660 /// Stores all SCEV that use a given SCEV as its direct operand. 1661 DenseMap<const SCEV *, SmallPtrSet<const SCEV *, 8> > SCEVUsers; 1662 1663 /// Memoized results from getRange 1664 DenseMap<const SCEV *, ConstantRange> UnsignedRanges; 1665 1666 /// Memoized results from getRange 1667 DenseMap<const SCEV *, ConstantRange> SignedRanges; 1668 1669 /// Used to parameterize getRange 1670 enum RangeSignHint { HINT_RANGE_UNSIGNED, HINT_RANGE_SIGNED }; 1671 1672 /// Set the memoized range for the given SCEV. 1673 const ConstantRange &setRange(const SCEV *S, RangeSignHint Hint, 1674 ConstantRange CR) { 1675 DenseMap<const SCEV *, ConstantRange> &Cache = 1676 Hint == HINT_RANGE_UNSIGNED ? UnsignedRanges : SignedRanges; 1677 1678 auto Pair = Cache.insert_or_assign(S, std::move(CR)); 1679 return Pair.first->second; 1680 } 1681 1682 /// Determine the range for a particular SCEV. 1683 /// NOTE: This returns a reference to an entry in a cache. It must be 1684 /// copied if its needed for longer. 1685 const ConstantRange &getRangeRef(const SCEV *S, RangeSignHint Hint, 1686 unsigned Depth = 0); 1687 1688 /// Determine the range for a particular SCEV, but evaluates ranges for 1689 /// operands iteratively first. 1690 const ConstantRange &getRangeRefIter(const SCEV *S, RangeSignHint Hint); 1691 1692 /// Determines the range for the affine SCEVAddRecExpr {\p Start,+,\p Step}. 1693 /// Helper for \c getRange. 1694 ConstantRange getRangeForAffineAR(const SCEV *Start, const SCEV *Step, 1695 const APInt &MaxBECount); 1696 1697 /// Determines the range for the affine non-self-wrapping SCEVAddRecExpr {\p 1698 /// Start,+,\p Step}<nw>. 1699 ConstantRange getRangeForAffineNoSelfWrappingAR(const SCEVAddRecExpr *AddRec, 1700 const SCEV *MaxBECount, 1701 unsigned BitWidth, 1702 RangeSignHint SignHint); 1703 1704 /// Try to compute a range for the affine SCEVAddRecExpr {\p Start,+,\p 1705 /// Step} by "factoring out" a ternary expression from the add recurrence. 1706 /// Helper called by \c getRange. 1707 ConstantRange getRangeViaFactoring(const SCEV *Start, const SCEV *Step, 1708 const APInt &MaxBECount); 1709 1710 /// If the unknown expression U corresponds to a simple recurrence, return 1711 /// a constant range which represents the entire recurrence. Note that 1712 /// *add* recurrences with loop invariant steps aren't represented by 1713 /// SCEVUnknowns and thus don't use this mechanism. 1714 ConstantRange getRangeForUnknownRecurrence(const SCEVUnknown *U); 1715 1716 /// We know that there is no SCEV for the specified value. Analyze the 1717 /// expression recursively. 1718 const SCEV *createSCEV(Value *V); 1719 1720 /// We know that there is no SCEV for the specified value. Create a new SCEV 1721 /// for \p V iteratively. 1722 const SCEV *createSCEVIter(Value *V); 1723 /// Collect operands of \p V for which SCEV expressions should be constructed 1724 /// first. Returns a SCEV directly if it can be constructed trivially for \p 1725 /// V. 1726 const SCEV *getOperandsToCreate(Value *V, SmallVectorImpl<Value *> &Ops); 1727 1728 /// Provide the special handling we need to analyze PHI SCEVs. 1729 const SCEV *createNodeForPHI(PHINode *PN); 1730 1731 /// Helper function called from createNodeForPHI. 1732 const SCEV *createAddRecFromPHI(PHINode *PN); 1733 1734 /// A helper function for createAddRecFromPHI to handle simple cases. 1735 const SCEV *createSimpleAffineAddRec(PHINode *PN, Value *BEValueV, 1736 Value *StartValueV); 1737 1738 /// Helper function called from createNodeForPHI. 1739 const SCEV *createNodeFromSelectLikePHI(PHINode *PN); 1740 1741 /// Provide special handling for a select-like instruction (currently this 1742 /// is either a select instruction or a phi node). \p Ty is the type of the 1743 /// instruction being processed, that is assumed equivalent to 1744 /// "Cond ? TrueVal : FalseVal". 1745 std::optional<const SCEV *> 1746 createNodeForSelectOrPHIInstWithICmpInstCond(Type *Ty, ICmpInst *Cond, 1747 Value *TrueVal, Value *FalseVal); 1748 1749 /// See if we can model this select-like instruction via umin_seq expression. 1750 const SCEV *createNodeForSelectOrPHIViaUMinSeq(Value *I, Value *Cond, 1751 Value *TrueVal, 1752 Value *FalseVal); 1753 1754 /// Given a value \p V, which is a select-like instruction (currently this is 1755 /// either a select instruction or a phi node), which is assumed equivalent to 1756 /// Cond ? TrueVal : FalseVal 1757 /// see if we can model it as a SCEV expression. 1758 const SCEV *createNodeForSelectOrPHI(Value *V, Value *Cond, Value *TrueVal, 1759 Value *FalseVal); 1760 1761 /// Provide the special handling we need to analyze GEP SCEVs. 1762 const SCEV *createNodeForGEP(GEPOperator *GEP); 1763 1764 /// Implementation code for getSCEVAtScope; called at most once for each 1765 /// SCEV+Loop pair. 1766 const SCEV *computeSCEVAtScope(const SCEV *S, const Loop *L); 1767 1768 /// Return the BackedgeTakenInfo for the given loop, lazily computing new 1769 /// values if the loop hasn't been analyzed yet. The returned result is 1770 /// guaranteed not to be predicated. 1771 BackedgeTakenInfo &getBackedgeTakenInfo(const Loop *L); 1772 1773 /// Similar to getBackedgeTakenInfo, but will add predicates as required 1774 /// with the purpose of returning complete information. 1775 BackedgeTakenInfo &getPredicatedBackedgeTakenInfo(const Loop *L); 1776 1777 /// Compute the number of times the specified loop will iterate. 1778 /// If AllowPredicates is set, we will create new SCEV predicates as 1779 /// necessary in order to return an exact answer. 1780 BackedgeTakenInfo computeBackedgeTakenCount(const Loop *L, 1781 bool AllowPredicates = false); 1782 1783 /// Compute the number of times the backedge of the specified loop will 1784 /// execute if it exits via the specified block. If AllowPredicates is set, 1785 /// this call will try to use a minimal set of SCEV predicates in order to 1786 /// return an exact answer. 1787 ExitLimit computeExitLimit(const Loop *L, BasicBlock *ExitingBlock, 1788 bool IsOnlyExit, bool AllowPredicates = false); 1789 1790 // Helper functions for computeExitLimitFromCond to avoid exponential time 1791 // complexity. 1792 1793 class ExitLimitCache { 1794 // It may look like we need key on the whole (L, ExitIfTrue, 1795 // ControlsOnlyExit, AllowPredicates) tuple, but recursive calls to 1796 // computeExitLimitFromCondCached from computeExitLimitFromCondImpl only 1797 // vary the in \c ExitCond and \c ControlsOnlyExit parameters. We remember 1798 // the initial values of the other values to assert our assumption. 1799 SmallDenseMap<PointerIntPair<Value *, 1>, ExitLimit> TripCountMap; 1800 1801 const Loop *L; 1802 bool ExitIfTrue; 1803 bool AllowPredicates; 1804 1805 public: 1806 ExitLimitCache(const Loop *L, bool ExitIfTrue, bool AllowPredicates) 1807 : L(L), ExitIfTrue(ExitIfTrue), AllowPredicates(AllowPredicates) {} 1808 1809 std::optional<ExitLimit> find(const Loop *L, Value *ExitCond, 1810 bool ExitIfTrue, bool ControlsOnlyExit, 1811 bool AllowPredicates); 1812 1813 void insert(const Loop *L, Value *ExitCond, bool ExitIfTrue, 1814 bool ControlsOnlyExit, bool AllowPredicates, 1815 const ExitLimit &EL); 1816 }; 1817 1818 using ExitLimitCacheTy = ExitLimitCache; 1819 1820 ExitLimit computeExitLimitFromCondCached(ExitLimitCacheTy &Cache, 1821 const Loop *L, Value *ExitCond, 1822 bool ExitIfTrue, 1823 bool ControlsOnlyExit, 1824 bool AllowPredicates); 1825 ExitLimit computeExitLimitFromCondImpl(ExitLimitCacheTy &Cache, const Loop *L, 1826 Value *ExitCond, bool ExitIfTrue, 1827 bool ControlsOnlyExit, 1828 bool AllowPredicates); 1829 std::optional<ScalarEvolution::ExitLimit> computeExitLimitFromCondFromBinOp( 1830 ExitLimitCacheTy &Cache, const Loop *L, Value *ExitCond, bool ExitIfTrue, 1831 bool ControlsOnlyExit, bool AllowPredicates); 1832 1833 /// Compute the number of times the backedge of the specified loop will 1834 /// execute if its exit condition were a conditional branch of the ICmpInst 1835 /// ExitCond and ExitIfTrue. If AllowPredicates is set, this call will try 1836 /// to use a minimal set of SCEV predicates in order to return an exact 1837 /// answer. 1838 ExitLimit computeExitLimitFromICmp(const Loop *L, ICmpInst *ExitCond, 1839 bool ExitIfTrue, 1840 bool IsSubExpr, 1841 bool AllowPredicates = false); 1842 1843 /// Variant of previous which takes the components representing an ICmp 1844 /// as opposed to the ICmpInst itself. Note that the prior version can 1845 /// return more precise results in some cases and is preferred when caller 1846 /// has a materialized ICmp. 1847 ExitLimit computeExitLimitFromICmp(const Loop *L, ICmpInst::Predicate Pred, 1848 const SCEV *LHS, const SCEV *RHS, 1849 bool IsSubExpr, 1850 bool AllowPredicates = false); 1851 1852 /// Compute the number of times the backedge of the specified loop will 1853 /// execute if its exit condition were a switch with a single exiting case 1854 /// to ExitingBB. 1855 ExitLimit computeExitLimitFromSingleExitSwitch(const Loop *L, 1856 SwitchInst *Switch, 1857 BasicBlock *ExitingBB, 1858 bool IsSubExpr); 1859 1860 /// Compute the exit limit of a loop that is controlled by a 1861 /// "(IV >> 1) != 0" type comparison. We cannot compute the exact trip 1862 /// count in these cases (since SCEV has no way of expressing them), but we 1863 /// can still sometimes compute an upper bound. 1864 /// 1865 /// Return an ExitLimit for a loop whose backedge is guarded by `LHS Pred 1866 /// RHS`. 1867 ExitLimit computeShiftCompareExitLimit(Value *LHS, Value *RHS, const Loop *L, 1868 ICmpInst::Predicate Pred); 1869 1870 /// If the loop is known to execute a constant number of times (the 1871 /// condition evolves only from constants), try to evaluate a few iterations 1872 /// of the loop until we get the exit condition gets a value of ExitWhen 1873 /// (true or false). If we cannot evaluate the exit count of the loop, 1874 /// return CouldNotCompute. 1875 const SCEV *computeExitCountExhaustively(const Loop *L, Value *Cond, 1876 bool ExitWhen); 1877 1878 /// Return the number of times an exit condition comparing the specified 1879 /// value to zero will execute. If not computable, return CouldNotCompute. 1880 /// If AllowPredicates is set, this call will try to use a minimal set of 1881 /// SCEV predicates in order to return an exact answer. 1882 ExitLimit howFarToZero(const SCEV *V, const Loop *L, bool IsSubExpr, 1883 bool AllowPredicates = false); 1884 1885 /// Return the number of times an exit condition checking the specified 1886 /// value for nonzero will execute. If not computable, return 1887 /// CouldNotCompute. 1888 ExitLimit howFarToNonZero(const SCEV *V, const Loop *L); 1889 1890 /// Return the number of times an exit condition containing the specified 1891 /// less-than comparison will execute. If not computable, return 1892 /// CouldNotCompute. 1893 /// 1894 /// \p isSigned specifies whether the less-than is signed. 1895 /// 1896 /// \p ControlsOnlyExit is true when the LHS < RHS condition directly controls 1897 /// the branch (loops exits only if condition is true). In this case, we can 1898 /// use NoWrapFlags to skip overflow checks. 1899 /// 1900 /// If \p AllowPredicates is set, this call will try to use a minimal set of 1901 /// SCEV predicates in order to return an exact answer. 1902 ExitLimit howManyLessThans(const SCEV *LHS, const SCEV *RHS, const Loop *L, 1903 bool isSigned, bool ControlsOnlyExit, 1904 bool AllowPredicates = false); 1905 1906 ExitLimit howManyGreaterThans(const SCEV *LHS, const SCEV *RHS, const Loop *L, 1907 bool isSigned, bool IsSubExpr, 1908 bool AllowPredicates = false); 1909 1910 /// Return a predecessor of BB (which may not be an immediate predecessor) 1911 /// which has exactly one successor from which BB is reachable, or null if 1912 /// no such block is found. 1913 std::pair<const BasicBlock *, const BasicBlock *> 1914 getPredecessorWithUniqueSuccessorForBB(const BasicBlock *BB) const; 1915 1916 /// Test whether the condition described by Pred, LHS, and RHS is true 1917 /// whenever the given FoundCondValue value evaluates to true in given 1918 /// Context. If Context is nullptr, then the found predicate is true 1919 /// everywhere. LHS and FoundLHS may have different type width. 1920 bool isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS, 1921 const Value *FoundCondValue, bool Inverse, 1922 const Instruction *Context = nullptr); 1923 1924 /// Test whether the condition described by Pred, LHS, and RHS is true 1925 /// whenever the given FoundCondValue value evaluates to true in given 1926 /// Context. If Context is nullptr, then the found predicate is true 1927 /// everywhere. LHS and FoundLHS must have same type width. 1928 bool isImpliedCondBalancedTypes(ICmpInst::Predicate Pred, const SCEV *LHS, 1929 const SCEV *RHS, 1930 ICmpInst::Predicate FoundPred, 1931 const SCEV *FoundLHS, const SCEV *FoundRHS, 1932 const Instruction *CtxI); 1933 1934 /// Test whether the condition described by Pred, LHS, and RHS is true 1935 /// whenever the condition described by FoundPred, FoundLHS, FoundRHS is 1936 /// true in given Context. If Context is nullptr, then the found predicate is 1937 /// true everywhere. 1938 bool isImpliedCond(ICmpInst::Predicate Pred, const SCEV *LHS, const SCEV *RHS, 1939 ICmpInst::Predicate FoundPred, const SCEV *FoundLHS, 1940 const SCEV *FoundRHS, 1941 const Instruction *Context = nullptr); 1942 1943 /// Test whether the condition described by Pred, LHS, and RHS is true 1944 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1945 /// true in given Context. If Context is nullptr, then the found predicate is 1946 /// true everywhere. 1947 bool isImpliedCondOperands(ICmpInst::Predicate Pred, const SCEV *LHS, 1948 const SCEV *RHS, const SCEV *FoundLHS, 1949 const SCEV *FoundRHS, 1950 const Instruction *Context = nullptr); 1951 1952 /// Test whether the condition described by Pred, LHS, and RHS is true 1953 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1954 /// true. Here LHS is an operation that includes FoundLHS as one of its 1955 /// arguments. 1956 bool isImpliedViaOperations(ICmpInst::Predicate Pred, 1957 const SCEV *LHS, const SCEV *RHS, 1958 const SCEV *FoundLHS, const SCEV *FoundRHS, 1959 unsigned Depth = 0); 1960 1961 /// Test whether the condition described by Pred, LHS, and RHS is true. 1962 /// Use only simple non-recursive types of checks, such as range analysis etc. 1963 bool isKnownViaNonRecursiveReasoning(ICmpInst::Predicate Pred, 1964 const SCEV *LHS, const SCEV *RHS); 1965 1966 /// Test whether the condition described by Pred, LHS, and RHS is true 1967 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1968 /// true. 1969 bool isImpliedCondOperandsHelper(ICmpInst::Predicate Pred, const SCEV *LHS, 1970 const SCEV *RHS, const SCEV *FoundLHS, 1971 const SCEV *FoundRHS); 1972 1973 /// Test whether the condition described by Pred, LHS, and RHS is true 1974 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1975 /// true. Utility function used by isImpliedCondOperands. Tries to get 1976 /// cases like "X `sgt` 0 => X - 1 `sgt` -1". 1977 bool isImpliedCondOperandsViaRanges(ICmpInst::Predicate Pred, const SCEV *LHS, 1978 const SCEV *RHS, 1979 ICmpInst::Predicate FoundPred, 1980 const SCEV *FoundLHS, 1981 const SCEV *FoundRHS); 1982 1983 /// Return true if the condition denoted by \p LHS \p Pred \p RHS is implied 1984 /// by a call to @llvm.experimental.guard in \p BB. 1985 bool isImpliedViaGuard(const BasicBlock *BB, ICmpInst::Predicate Pred, 1986 const SCEV *LHS, const SCEV *RHS); 1987 1988 /// Test whether the condition described by Pred, LHS, and RHS is true 1989 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 1990 /// true. 1991 /// 1992 /// This routine tries to rule out certain kinds of integer overflow, and 1993 /// then tries to reason about arithmetic properties of the predicates. 1994 bool isImpliedCondOperandsViaNoOverflow(ICmpInst::Predicate Pred, 1995 const SCEV *LHS, const SCEV *RHS, 1996 const SCEV *FoundLHS, 1997 const SCEV *FoundRHS); 1998 1999 /// Test whether the condition described by Pred, LHS, and RHS is true 2000 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 2001 /// true. 2002 /// 2003 /// This routine tries to weaken the known condition basing on fact that 2004 /// FoundLHS is an AddRec. 2005 bool isImpliedCondOperandsViaAddRecStart(ICmpInst::Predicate Pred, 2006 const SCEV *LHS, const SCEV *RHS, 2007 const SCEV *FoundLHS, 2008 const SCEV *FoundRHS, 2009 const Instruction *CtxI); 2010 2011 /// Test whether the condition described by Pred, LHS, and RHS is true 2012 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 2013 /// true. 2014 /// 2015 /// This routine tries to figure out predicate for Phis which are SCEVUnknown 2016 /// if it is true for every possible incoming value from their respective 2017 /// basic blocks. 2018 bool isImpliedViaMerge(ICmpInst::Predicate Pred, 2019 const SCEV *LHS, const SCEV *RHS, 2020 const SCEV *FoundLHS, const SCEV *FoundRHS, 2021 unsigned Depth); 2022 2023 /// Test whether the condition described by Pred, LHS, and RHS is true 2024 /// whenever the condition described by Pred, FoundLHS, and FoundRHS is 2025 /// true. 2026 /// 2027 /// This routine tries to reason about shifts. 2028 bool isImpliedCondOperandsViaShift(ICmpInst::Predicate Pred, const SCEV *LHS, 2029 const SCEV *RHS, const SCEV *FoundLHS, 2030 const SCEV *FoundRHS); 2031 2032 /// If we know that the specified Phi is in the header of its containing 2033 /// loop, we know the loop executes a constant number of times, and the PHI 2034 /// node is just a recurrence involving constants, fold it. 2035 Constant *getConstantEvolutionLoopExitValue(PHINode *PN, const APInt &BEs, 2036 const Loop *L); 2037 2038 /// Test if the given expression is known to satisfy the condition described 2039 /// by Pred and the known constant ranges of LHS and RHS. 2040 bool isKnownPredicateViaConstantRanges(ICmpInst::Predicate Pred, 2041 const SCEV *LHS, const SCEV *RHS); 2042 2043 /// Try to prove the condition described by "LHS Pred RHS" by ruling out 2044 /// integer overflow. 2045 /// 2046 /// For instance, this will return true for "A s< (A + C)<nsw>" if C is 2047 /// positive. 2048 bool isKnownPredicateViaNoOverflow(ICmpInst::Predicate Pred, const SCEV *LHS, 2049 const SCEV *RHS); 2050 2051 /// Try to split Pred LHS RHS into logical conjunctions (and's) and try to 2052 /// prove them individually. 2053 bool isKnownPredicateViaSplitting(ICmpInst::Predicate Pred, const SCEV *LHS, 2054 const SCEV *RHS); 2055 2056 /// Try to match the Expr as "(L + R)<Flags>". 2057 bool splitBinaryAdd(const SCEV *Expr, const SCEV *&L, const SCEV *&R, 2058 SCEV::NoWrapFlags &Flags); 2059 2060 /// Forget predicated/non-predicated backedge taken counts for the given loop. 2061 void forgetBackedgeTakenCounts(const Loop *L, bool Predicated); 2062 2063 /// Drop memoized information for all \p SCEVs. 2064 void forgetMemoizedResults(ArrayRef<const SCEV *> SCEVs); 2065 2066 /// Helper for forgetMemoizedResults. 2067 void forgetMemoizedResultsImpl(const SCEV *S); 2068 2069 /// Iterate over instructions in \p Worklist and their users. Erase entries 2070 /// from ValueExprMap and collect SCEV expressions in \p ToForget 2071 void visitAndClearUsers(SmallVectorImpl<Instruction *> &Worklist, 2072 SmallPtrSetImpl<Instruction *> &Visited, 2073 SmallVectorImpl<const SCEV *> &ToForget); 2074 2075 /// Erase Value from ValueExprMap and ExprValueMap. 2076 void eraseValueFromMap(Value *V); 2077 2078 /// Insert V to S mapping into ValueExprMap and ExprValueMap. 2079 void insertValueToMap(Value *V, const SCEV *S); 2080 2081 /// Return false iff given SCEV contains a SCEVUnknown with NULL value- 2082 /// pointer. 2083 bool checkValidity(const SCEV *S) const; 2084 2085 /// Return true if `ExtendOpTy`({`Start`,+,`Step`}) can be proved to be 2086 /// equal to {`ExtendOpTy`(`Start`),+,`ExtendOpTy`(`Step`)}. This is 2087 /// equivalent to proving no signed (resp. unsigned) wrap in 2088 /// {`Start`,+,`Step`} if `ExtendOpTy` is `SCEVSignExtendExpr` 2089 /// (resp. `SCEVZeroExtendExpr`). 2090 template <typename ExtendOpTy> 2091 bool proveNoWrapByVaryingStart(const SCEV *Start, const SCEV *Step, 2092 const Loop *L); 2093 2094 /// Try to prove NSW or NUW on \p AR relying on ConstantRange manipulation. 2095 SCEV::NoWrapFlags proveNoWrapViaConstantRanges(const SCEVAddRecExpr *AR); 2096 2097 /// Try to prove NSW on \p AR by proving facts about conditions known on 2098 /// entry and backedge. 2099 SCEV::NoWrapFlags proveNoSignedWrapViaInduction(const SCEVAddRecExpr *AR); 2100 2101 /// Try to prove NUW on \p AR by proving facts about conditions known on 2102 /// entry and backedge. 2103 SCEV::NoWrapFlags proveNoUnsignedWrapViaInduction(const SCEVAddRecExpr *AR); 2104 2105 std::optional<MonotonicPredicateType> 2106 getMonotonicPredicateTypeImpl(const SCEVAddRecExpr *LHS, 2107 ICmpInst::Predicate Pred); 2108 2109 /// Return SCEV no-wrap flags that can be proven based on reasoning about 2110 /// how poison produced from no-wrap flags on this value (e.g. a nuw add) 2111 /// would trigger undefined behavior on overflow. 2112 SCEV::NoWrapFlags getNoWrapFlagsFromUB(const Value *V); 2113 2114 /// Return a scope which provides an upper bound on the defining scope of 2115 /// 'S'. Specifically, return the first instruction in said bounding scope. 2116 /// Return nullptr if the scope is trivial (function entry). 2117 /// (See scope definition rules associated with flag discussion above) 2118 const Instruction *getNonTrivialDefiningScopeBound(const SCEV *S); 2119 2120 /// Return a scope which provides an upper bound on the defining scope for 2121 /// a SCEV with the operands in Ops. The outparam Precise is set if the 2122 /// bound found is a precise bound (i.e. must be the defining scope.) 2123 const Instruction *getDefiningScopeBound(ArrayRef<const SCEV *> Ops, 2124 bool &Precise); 2125 2126 /// Wrapper around the above for cases which don't care if the bound 2127 /// is precise. 2128 const Instruction *getDefiningScopeBound(ArrayRef<const SCEV *> Ops); 2129 2130 /// Given two instructions in the same function, return true if we can 2131 /// prove B must execute given A executes. 2132 bool isGuaranteedToTransferExecutionTo(const Instruction *A, 2133 const Instruction *B); 2134 2135 /// Return true if the SCEV corresponding to \p I is never poison. Proving 2136 /// this is more complex than proving that just \p I is never poison, since 2137 /// SCEV commons expressions across control flow, and you can have cases 2138 /// like: 2139 /// 2140 /// idx0 = a + b; 2141 /// ptr[idx0] = 100; 2142 /// if (<condition>) { 2143 /// idx1 = a +nsw b; 2144 /// ptr[idx1] = 200; 2145 /// } 2146 /// 2147 /// where the SCEV expression (+ a b) is guaranteed to not be poison (and 2148 /// hence not sign-overflow) only if "<condition>" is true. Since both 2149 /// `idx0` and `idx1` will be mapped to the same SCEV expression, (+ a b), 2150 /// it is not okay to annotate (+ a b) with <nsw> in the above example. 2151 bool isSCEVExprNeverPoison(const Instruction *I); 2152 2153 /// This is like \c isSCEVExprNeverPoison but it specifically works for 2154 /// instructions that will get mapped to SCEV add recurrences. Return true 2155 /// if \p I will never generate poison under the assumption that \p I is an 2156 /// add recurrence on the loop \p L. 2157 bool isAddRecNeverPoison(const Instruction *I, const Loop *L); 2158 2159 /// Similar to createAddRecFromPHI, but with the additional flexibility of 2160 /// suggesting runtime overflow checks in case casts are encountered. 2161 /// If successful, the analysis records that for this loop, \p SymbolicPHI, 2162 /// which is the UnknownSCEV currently representing the PHI, can be rewritten 2163 /// into an AddRec, assuming some predicates; The function then returns the 2164 /// AddRec and the predicates as a pair, and caches this pair in 2165 /// PredicatedSCEVRewrites. 2166 /// If the analysis is not successful, a mapping from the \p SymbolicPHI to 2167 /// itself (with no predicates) is recorded, and a nullptr with an empty 2168 /// predicates vector is returned as a pair. 2169 std::optional<std::pair<const SCEV *, SmallVector<const SCEVPredicate *, 3>>> 2170 createAddRecFromPHIWithCastsImpl(const SCEVUnknown *SymbolicPHI); 2171 2172 /// Compute the maximum backedge count based on the range of values 2173 /// permitted by Start, End, and Stride. This is for loops of the form 2174 /// {Start, +, Stride} LT End. 2175 /// 2176 /// Preconditions: 2177 /// * the induction variable is known to be positive. 2178 /// * the induction variable is assumed not to overflow (i.e. either it 2179 /// actually doesn't, or we'd have to immediately execute UB) 2180 /// We *don't* assert these preconditions so please be careful. 2181 const SCEV *computeMaxBECountForLT(const SCEV *Start, const SCEV *Stride, 2182 const SCEV *End, unsigned BitWidth, 2183 bool IsSigned); 2184 2185 /// Verify if an linear IV with positive stride can overflow when in a 2186 /// less-than comparison, knowing the invariant term of the comparison, 2187 /// the stride. 2188 bool canIVOverflowOnLT(const SCEV *RHS, const SCEV *Stride, bool IsSigned); 2189 2190 /// Verify if an linear IV with negative stride can overflow when in a 2191 /// greater-than comparison, knowing the invariant term of the comparison, 2192 /// the stride. 2193 bool canIVOverflowOnGT(const SCEV *RHS, const SCEV *Stride, bool IsSigned); 2194 2195 /// Get add expr already created or create a new one. 2196 const SCEV *getOrCreateAddExpr(ArrayRef<const SCEV *> Ops, 2197 SCEV::NoWrapFlags Flags); 2198 2199 /// Get mul expr already created or create a new one. 2200 const SCEV *getOrCreateMulExpr(ArrayRef<const SCEV *> Ops, 2201 SCEV::NoWrapFlags Flags); 2202 2203 // Get addrec expr already created or create a new one. 2204 const SCEV *getOrCreateAddRecExpr(ArrayRef<const SCEV *> Ops, 2205 const Loop *L, SCEV::NoWrapFlags Flags); 2206 2207 /// Return x if \p Val is f(x) where f is a 1-1 function. 2208 const SCEV *stripInjectiveFunctions(const SCEV *Val) const; 2209 2210 /// Find all of the loops transitively used in \p S, and fill \p LoopsUsed. 2211 /// A loop is considered "used" by an expression if it contains 2212 /// an add rec on said loop. 2213 void getUsedLoops(const SCEV *S, SmallPtrSetImpl<const Loop *> &LoopsUsed); 2214 2215 /// Try to match the pattern generated by getURemExpr(A, B). If successful, 2216 /// Assign A and B to LHS and RHS, respectively. 2217 bool matchURem(const SCEV *Expr, const SCEV *&LHS, const SCEV *&RHS); 2218 2219 /// Look for a SCEV expression with type `SCEVType` and operands `Ops` in 2220 /// `UniqueSCEVs`. Return if found, else nullptr. 2221 SCEV *findExistingSCEVInCache(SCEVTypes SCEVType, ArrayRef<const SCEV *> Ops); 2222 2223 /// Get reachable blocks in this function, making limited use of SCEV 2224 /// reasoning about conditions. 2225 void getReachableBlocks(SmallPtrSetImpl<BasicBlock *> &Reachable, 2226 Function &F); 2227 2228 /// Return the given SCEV expression with a new set of operands. 2229 /// This preserves the origial nowrap flags. 2230 const SCEV *getWithOperands(const SCEV *S, 2231 SmallVectorImpl<const SCEV *> &NewOps); 2232 2233 FoldingSet<SCEV> UniqueSCEVs; 2234 FoldingSet<SCEVPredicate> UniquePreds; 2235 BumpPtrAllocator SCEVAllocator; 2236 2237 /// This maps loops to a list of addrecs that directly use said loop. 2238 DenseMap<const Loop *, SmallVector<const SCEVAddRecExpr *, 4>> LoopUsers; 2239 2240 /// Cache tentative mappings from UnknownSCEVs in a Loop, to a SCEV expression 2241 /// they can be rewritten into under certain predicates. 2242 DenseMap<std::pair<const SCEVUnknown *, const Loop *>, 2243 std::pair<const SCEV *, SmallVector<const SCEVPredicate *, 3>>> 2244 PredicatedSCEVRewrites; 2245 2246 /// Set of AddRecs for which proving NUW via an induction has already been 2247 /// tried. 2248 SmallPtrSet<const SCEVAddRecExpr *, 16> UnsignedWrapViaInductionTried; 2249 2250 /// Set of AddRecs for which proving NSW via an induction has already been 2251 /// tried. 2252 SmallPtrSet<const SCEVAddRecExpr *, 16> SignedWrapViaInductionTried; 2253 2254 /// The head of a linked list of all SCEVUnknown values that have been 2255 /// allocated. This is used by releaseMemory to locate them all and call 2256 /// their destructors. 2257 SCEVUnknown *FirstUnknown = nullptr; 2258 }; 2259 2260 /// Analysis pass that exposes the \c ScalarEvolution for a function. 2261 class ScalarEvolutionAnalysis 2262 : public AnalysisInfoMixin<ScalarEvolutionAnalysis> { 2263 friend AnalysisInfoMixin<ScalarEvolutionAnalysis>; 2264 2265 static AnalysisKey Key; 2266 2267 public: 2268 using Result = ScalarEvolution; 2269 2270 ScalarEvolution run(Function &F, FunctionAnalysisManager &AM); 2271 }; 2272 2273 /// Verifier pass for the \c ScalarEvolutionAnalysis results. 2274 class ScalarEvolutionVerifierPass 2275 : public PassInfoMixin<ScalarEvolutionVerifierPass> { 2276 public: 2277 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 2278 static bool isRequired() { return true; } 2279 }; 2280 2281 /// Printer pass for the \c ScalarEvolutionAnalysis results. 2282 class ScalarEvolutionPrinterPass 2283 : public PassInfoMixin<ScalarEvolutionPrinterPass> { 2284 raw_ostream &OS; 2285 2286 public: 2287 explicit ScalarEvolutionPrinterPass(raw_ostream &OS) : OS(OS) {} 2288 2289 PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM); 2290 2291 static bool isRequired() { return true; } 2292 }; 2293 2294 class ScalarEvolutionWrapperPass : public FunctionPass { 2295 std::unique_ptr<ScalarEvolution> SE; 2296 2297 public: 2298 static char ID; 2299 2300 ScalarEvolutionWrapperPass(); 2301 2302 ScalarEvolution &getSE() { return *SE; } 2303 const ScalarEvolution &getSE() const { return *SE; } 2304 2305 bool runOnFunction(Function &F) override; 2306 void releaseMemory() override; 2307 void getAnalysisUsage(AnalysisUsage &AU) const override; 2308 void print(raw_ostream &OS, const Module * = nullptr) const override; 2309 void verifyAnalysis() const override; 2310 }; 2311 2312 /// An interface layer with SCEV used to manage how we see SCEV expressions 2313 /// for values in the context of existing predicates. We can add new 2314 /// predicates, but we cannot remove them. 2315 /// 2316 /// This layer has multiple purposes: 2317 /// - provides a simple interface for SCEV versioning. 2318 /// - guarantees that the order of transformations applied on a SCEV 2319 /// expression for a single Value is consistent across two different 2320 /// getSCEV calls. This means that, for example, once we've obtained 2321 /// an AddRec expression for a certain value through expression 2322 /// rewriting, we will continue to get an AddRec expression for that 2323 /// Value. 2324 /// - lowers the number of expression rewrites. 2325 class PredicatedScalarEvolution { 2326 public: 2327 PredicatedScalarEvolution(ScalarEvolution &SE, Loop &L); 2328 2329 const SCEVPredicate &getPredicate() const; 2330 2331 /// Returns the SCEV expression of V, in the context of the current SCEV 2332 /// predicate. The order of transformations applied on the expression of V 2333 /// returned by ScalarEvolution is guaranteed to be preserved, even when 2334 /// adding new predicates. 2335 const SCEV *getSCEV(Value *V); 2336 2337 /// Get the (predicated) backedge count for the analyzed loop. 2338 const SCEV *getBackedgeTakenCount(); 2339 2340 /// Get the (predicated) symbolic max backedge count for the analyzed loop. 2341 const SCEV *getSymbolicMaxBackedgeTakenCount(); 2342 2343 /// Adds a new predicate. 2344 void addPredicate(const SCEVPredicate &Pred); 2345 2346 /// Attempts to produce an AddRecExpr for V by adding additional SCEV 2347 /// predicates. If we can't transform the expression into an AddRecExpr we 2348 /// return nullptr and not add additional SCEV predicates to the current 2349 /// context. 2350 const SCEVAddRecExpr *getAsAddRec(Value *V); 2351 2352 /// Proves that V doesn't overflow by adding SCEV predicate. 2353 void setNoOverflow(Value *V, SCEVWrapPredicate::IncrementWrapFlags Flags); 2354 2355 /// Returns true if we've proved that V doesn't wrap by means of a SCEV 2356 /// predicate. 2357 bool hasNoOverflow(Value *V, SCEVWrapPredicate::IncrementWrapFlags Flags); 2358 2359 /// Returns the ScalarEvolution analysis used. 2360 ScalarEvolution *getSE() const { return &SE; } 2361 2362 /// We need to explicitly define the copy constructor because of FlagsMap. 2363 PredicatedScalarEvolution(const PredicatedScalarEvolution &); 2364 2365 /// Print the SCEV mappings done by the Predicated Scalar Evolution. 2366 /// The printed text is indented by \p Depth. 2367 void print(raw_ostream &OS, unsigned Depth) const; 2368 2369 /// Check if \p AR1 and \p AR2 are equal, while taking into account 2370 /// Equal predicates in Preds. 2371 bool areAddRecsEqualWithPreds(const SCEVAddRecExpr *AR1, 2372 const SCEVAddRecExpr *AR2) const; 2373 2374 private: 2375 /// Increments the version number of the predicate. This needs to be called 2376 /// every time the SCEV predicate changes. 2377 void updateGeneration(); 2378 2379 /// Holds a SCEV and the version number of the SCEV predicate used to 2380 /// perform the rewrite of the expression. 2381 using RewriteEntry = std::pair<unsigned, const SCEV *>; 2382 2383 /// Maps a SCEV to the rewrite result of that SCEV at a certain version 2384 /// number. If this number doesn't match the current Generation, we will 2385 /// need to do a rewrite. To preserve the transformation order of previous 2386 /// rewrites, we will rewrite the previous result instead of the original 2387 /// SCEV. 2388 DenseMap<const SCEV *, RewriteEntry> RewriteMap; 2389 2390 /// Records what NoWrap flags we've added to a Value *. 2391 ValueMap<Value *, SCEVWrapPredicate::IncrementWrapFlags> FlagsMap; 2392 2393 /// The ScalarEvolution analysis. 2394 ScalarEvolution &SE; 2395 2396 /// The analyzed Loop. 2397 const Loop &L; 2398 2399 /// The SCEVPredicate that forms our context. We will rewrite all 2400 /// expressions assuming that this predicate true. 2401 std::unique_ptr<SCEVUnionPredicate> Preds; 2402 2403 /// Marks the version of the SCEV predicate used. When rewriting a SCEV 2404 /// expression we mark it with the version of the predicate. We use this to 2405 /// figure out if the predicate has changed from the last rewrite of the 2406 /// SCEV. If so, we need to perform a new rewrite. 2407 unsigned Generation = 0; 2408 2409 /// The backedge taken count. 2410 const SCEV *BackedgeCount = nullptr; 2411 2412 /// The symbolic backedge taken count. 2413 const SCEV *SymbolicMaxBackedgeCount = nullptr; 2414 }; 2415 2416 template <> struct DenseMapInfo<ScalarEvolution::FoldID> { 2417 static inline ScalarEvolution::FoldID getEmptyKey() { 2418 ScalarEvolution::FoldID ID(0); 2419 return ID; 2420 } 2421 static inline ScalarEvolution::FoldID getTombstoneKey() { 2422 ScalarEvolution::FoldID ID(1); 2423 return ID; 2424 } 2425 2426 static unsigned getHashValue(const ScalarEvolution::FoldID &Val) { 2427 return Val.computeHash(); 2428 } 2429 2430 static bool isEqual(const ScalarEvolution::FoldID &LHS, 2431 const ScalarEvolution::FoldID &RHS) { 2432 return LHS == RHS; 2433 } 2434 }; 2435 2436 } // end namespace llvm 2437 2438 #endif // LLVM_ANALYSIS_SCALAREVOLUTION_H 2439