ScalarEvolution.h revision fc8deb971d2b4dff370ba93948975e33a038605d
1//===- llvm/Analysis/ScalarEvolution.h - Scalar Evolution -------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// The ScalarEvolution class is an LLVM pass which can be used to analyze and
11// catagorize scalar expressions in loops.  It specializes in recognizing
12// general induction variables, representing them with the abstract and opaque
13// SCEV class.  Given this analysis, trip counts of loops and other important
14// properties can be obtained.
15//
16// This analysis is primarily useful for induction variable substitution and
17// strength reduction.
18//
19//===----------------------------------------------------------------------===//
20
21#ifndef LLVM_ANALYSIS_SCALAREVOLUTION_H
22#define LLVM_ANALYSIS_SCALAREVOLUTION_H
23
24#include "llvm/Pass.h"
25#include "llvm/Instructions.h"
26#include "llvm/Support/DataTypes.h"
27#include "llvm/Support/ValueHandle.h"
28#include "llvm/Support/Allocator.h"
29#include "llvm/Support/ConstantRange.h"
30#include "llvm/ADT/FoldingSet.h"
31#include "llvm/ADT/DenseMap.h"
32#include <iosfwd>
33#include <map>
34
35namespace llvm {
36  class APInt;
37  class Constant;
38  class ConstantInt;
39  class DominatorTree;
40  class Type;
41  class ScalarEvolution;
42  class TargetData;
43  class LLVMContext;
44  class Loop;
45  class LoopInfo;
46  class Operator;
47
48  /// SCEV - This class represents an analyzed expression in the program.  These
49  /// are opaque objects that the client is not allowed to do much with
50  /// directly.
51  ///
52  class SCEV : public FastFoldingSetNode {
53    const unsigned SCEVType;      // The SCEV baseclass this node corresponds to
54
55    SCEV(const SCEV &);            // DO NOT IMPLEMENT
56    void operator=(const SCEV &);  // DO NOT IMPLEMENT
57  protected:
58    virtual ~SCEV();
59  public:
60    explicit SCEV(const FoldingSetNodeID &ID, unsigned SCEVTy) :
61      FastFoldingSetNode(ID), SCEVType(SCEVTy) {}
62
63    unsigned getSCEVType() const { return SCEVType; }
64
65    /// isLoopInvariant - Return true if the value of this SCEV is unchanging in
66    /// the specified loop.
67    virtual bool isLoopInvariant(const Loop *L) const = 0;
68
69    /// hasComputableLoopEvolution - Return true if this SCEV changes value in a
70    /// known way in the specified loop.  This property being true implies that
71    /// the value is variant in the loop AND that we can emit an expression to
72    /// compute the value of the expression at any particular loop iteration.
73    virtual bool hasComputableLoopEvolution(const Loop *L) const = 0;
74
75    /// getType - Return the LLVM type of this SCEV expression.
76    ///
77    virtual const Type *getType() const = 0;
78
79    /// isZero - Return true if the expression is a constant zero.
80    ///
81    bool isZero() const;
82
83    /// isOne - Return true if the expression is a constant one.
84    ///
85    bool isOne() const;
86
87    /// isAllOnesValue - Return true if the expression is a constant
88    /// all-ones value.
89    ///
90    bool isAllOnesValue() const;
91
92    /// replaceSymbolicValuesWithConcrete - If this SCEV internally references
93    /// the symbolic value "Sym", construct and return a new SCEV that produces
94    /// the same value, but which uses the concrete value Conc instead of the
95    /// symbolic value.  If this SCEV does not use the symbolic value, it
96    /// returns itself.
97    virtual const SCEV *
98    replaceSymbolicValuesWithConcrete(const SCEV *Sym,
99                                      const SCEV *Conc,
100                                      ScalarEvolution &SE) const = 0;
101
102    /// dominates - Return true if elements that makes up this SCEV dominates
103    /// the specified basic block.
104    virtual bool dominates(BasicBlock *BB, DominatorTree *DT) const = 0;
105
106    /// print - Print out the internal representation of this scalar to the
107    /// specified stream.  This should really only be used for debugging
108    /// purposes.
109    virtual void print(raw_ostream &OS) const = 0;
110    void print(std::ostream &OS) const;
111    void print(std::ostream *OS) const { if (OS) print(*OS); }
112
113    /// dump - This method is used for debugging.
114    ///
115    void dump() const;
116  };
117
118  inline raw_ostream &operator<<(raw_ostream &OS, const SCEV &S) {
119    S.print(OS);
120    return OS;
121  }
122
123  inline std::ostream &operator<<(std::ostream &OS, const SCEV &S) {
124    S.print(OS);
125    return OS;
126  }
127
128  /// SCEVCouldNotCompute - An object of this class is returned by queries that
129  /// could not be answered.  For example, if you ask for the number of
130  /// iterations of a linked-list traversal loop, you will get one of these.
131  /// None of the standard SCEV operations are valid on this class, it is just a
132  /// marker.
133  struct SCEVCouldNotCompute : public SCEV {
134    SCEVCouldNotCompute();
135
136    // None of these methods are valid for this object.
137    virtual bool isLoopInvariant(const Loop *L) const;
138    virtual const Type *getType() const;
139    virtual bool hasComputableLoopEvolution(const Loop *L) const;
140    virtual void print(raw_ostream &OS) const;
141    virtual const SCEV *
142    replaceSymbolicValuesWithConcrete(const SCEV *Sym,
143                                      const SCEV *Conc,
144                                      ScalarEvolution &SE) const;
145
146    virtual bool dominates(BasicBlock *BB, DominatorTree *DT) const {
147      return true;
148    }
149
150    /// Methods for support type inquiry through isa, cast, and dyn_cast:
151    static inline bool classof(const SCEVCouldNotCompute *S) { return true; }
152    static bool classof(const SCEV *S);
153  };
154
155  /// ScalarEvolution - This class is the main scalar evolution driver.  Because
156  /// client code (intentionally) can't do much with the SCEV objects directly,
157  /// they must ask this class for services.
158  ///
159  class ScalarEvolution : public FunctionPass {
160    /// SCEVCallbackVH - A CallbackVH to arrange for ScalarEvolution to be
161    /// notified whenever a Value is deleted.
162    class SCEVCallbackVH : public CallbackVH {
163      ScalarEvolution *SE;
164      virtual void deleted();
165      virtual void allUsesReplacedWith(Value *New);
166    public:
167      SCEVCallbackVH(Value *V, ScalarEvolution *SE = 0);
168    };
169
170    friend class SCEVCallbackVH;
171    friend struct SCEVExpander;
172
173    /// F - The function we are analyzing.
174    ///
175    Function *F;
176
177    /// LI - The loop information for the function we are currently analyzing.
178    ///
179    LoopInfo *LI;
180
181    /// TD - The target data information for the target we are targetting.
182    ///
183    TargetData *TD;
184
185    /// CouldNotCompute - This SCEV is used to represent unknown trip
186    /// counts and things.
187    SCEVCouldNotCompute CouldNotCompute;
188
189    /// Scalars - This is a cache of the scalars we have analyzed so far.
190    ///
191    std::map<SCEVCallbackVH, const SCEV *> Scalars;
192
193    /// BackedgeTakenInfo - Information about the backedge-taken count
194    /// of a loop. This currently inclues an exact count and a maximum count.
195    ///
196    struct BackedgeTakenInfo {
197      /// Exact - An expression indicating the exact backedge-taken count of
198      /// the loop if it is known, or a SCEVCouldNotCompute otherwise.
199      const SCEV *Exact;
200
201      /// Max - An expression indicating the least maximum backedge-taken
202      /// count of the loop that is known, or a SCEVCouldNotCompute.
203      const SCEV *Max;
204
205      /*implicit*/ BackedgeTakenInfo(const SCEV *exact) :
206        Exact(exact), Max(exact) {}
207
208      BackedgeTakenInfo(const SCEV *exact, const SCEV *max) :
209        Exact(exact), Max(max) {}
210
211      /// hasAnyInfo - Test whether this BackedgeTakenInfo contains any
212      /// computed information, or whether it's all SCEVCouldNotCompute
213      /// values.
214      bool hasAnyInfo() const {
215        return !isa<SCEVCouldNotCompute>(Exact) ||
216               !isa<SCEVCouldNotCompute>(Max);
217      }
218    };
219
220    /// BackedgeTakenCounts - Cache the backedge-taken count of the loops for
221    /// this function as they are computed.
222    std::map<const Loop*, BackedgeTakenInfo> BackedgeTakenCounts;
223
224    /// ConstantEvolutionLoopExitValue - This map contains entries for all of
225    /// the PHI instructions that we attempt to compute constant evolutions for.
226    /// This allows us to avoid potentially expensive recomputation of these
227    /// properties.  An instruction maps to null if we are unable to compute its
228    /// exit value.
229    std::map<PHINode*, Constant*> ConstantEvolutionLoopExitValue;
230
231    /// ValuesAtScopes - This map contains entries for all the instructions
232    /// that we attempt to compute getSCEVAtScope information for without
233    /// using SCEV techniques, which can be expensive.
234    std::map<Instruction *, std::map<const Loop *, Constant *> > ValuesAtScopes;
235
236    /// createSCEV - We know that there is no SCEV for the specified value.
237    /// Analyze the expression.
238    const SCEV *createSCEV(Value *V);
239
240    /// createNodeForPHI - Provide the special handling we need to analyze PHI
241    /// SCEVs.
242    const SCEV *createNodeForPHI(PHINode *PN);
243
244    /// createNodeForGEP - Provide the special handling we need to analyze GEP
245    /// SCEVs.
246    const SCEV *createNodeForGEP(Operator *GEP);
247
248    /// ReplaceSymbolicValueWithConcrete - This looks up the computed SCEV value
249    /// for the specified instruction and replaces any references to the
250    /// symbolic value SymName with the specified value.  This is used during
251    /// PHI resolution.
252    void ReplaceSymbolicValueWithConcrete(Instruction *I,
253                                          const SCEV *SymName,
254                                          const SCEV *NewVal);
255
256    /// getBECount - Subtract the end and start values and divide by the step,
257    /// rounding up, to get the number of times the backedge is executed. Return
258    /// CouldNotCompute if an intermediate computation overflows.
259    const SCEV *getBECount(const SCEV *Start,
260                          const SCEV *End,
261                          const SCEV *Step);
262
263    /// getBackedgeTakenInfo - Return the BackedgeTakenInfo for the given
264    /// loop, lazily computing new values if the loop hasn't been analyzed
265    /// yet.
266    const BackedgeTakenInfo &getBackedgeTakenInfo(const Loop *L);
267
268    /// ComputeBackedgeTakenCount - Compute the number of times the specified
269    /// loop will iterate.
270    BackedgeTakenInfo ComputeBackedgeTakenCount(const Loop *L);
271
272    /// ComputeBackedgeTakenCountFromExit - Compute the number of times the
273    /// backedge of the specified loop will execute if it exits via the
274    /// specified block.
275    BackedgeTakenInfo ComputeBackedgeTakenCountFromExit(const Loop *L,
276                                                      BasicBlock *ExitingBlock);
277
278    /// ComputeBackedgeTakenCountFromExitCond - Compute the number of times the
279    /// backedge of the specified loop will execute if its exit condition
280    /// were a conditional branch of ExitCond, TBB, and FBB.
281    BackedgeTakenInfo
282      ComputeBackedgeTakenCountFromExitCond(const Loop *L,
283                                            Value *ExitCond,
284                                            BasicBlock *TBB,
285                                            BasicBlock *FBB);
286
287    /// ComputeBackedgeTakenCountFromExitCondICmp - Compute the number of
288    /// times the backedge of the specified loop will execute if its exit
289    /// condition were a conditional branch of the ICmpInst ExitCond, TBB,
290    /// and FBB.
291    BackedgeTakenInfo
292      ComputeBackedgeTakenCountFromExitCondICmp(const Loop *L,
293                                                ICmpInst *ExitCond,
294                                                BasicBlock *TBB,
295                                                BasicBlock *FBB);
296
297    /// ComputeLoadConstantCompareBackedgeTakenCount - Given an exit condition
298    /// of 'icmp op load X, cst', try to see if we can compute the trip count.
299    const SCEV *
300      ComputeLoadConstantCompareBackedgeTakenCount(LoadInst *LI,
301                                                   Constant *RHS,
302                                                   const Loop *L,
303                                                   ICmpInst::Predicate p);
304
305    /// ComputeBackedgeTakenCountExhaustively - If the trip is known to execute
306    /// a constant number of times (the condition evolves only from constants),
307    /// try to evaluate a few iterations of the loop until we get the exit
308    /// condition gets a value of ExitWhen (true or false).  If we cannot
309    /// evaluate the trip count of the loop, return CouldNotCompute.
310    const SCEV *ComputeBackedgeTakenCountExhaustively(const Loop *L,
311                                                      Value *Cond,
312                                                      bool ExitWhen);
313
314    /// HowFarToZero - Return the number of times a backedge comparing the
315    /// specified value to zero will execute.  If not computable, return
316    /// CouldNotCompute.
317    const SCEV *HowFarToZero(const SCEV *V, const Loop *L);
318
319    /// HowFarToNonZero - Return the number of times a backedge checking the
320    /// specified value for nonzero will execute.  If not computable, return
321    /// CouldNotCompute.
322    const SCEV *HowFarToNonZero(const SCEV *V, const Loop *L);
323
324    /// HowManyLessThans - Return the number of times a backedge containing the
325    /// specified less-than comparison will execute.  If not computable, return
326    /// CouldNotCompute. isSigned specifies whether the less-than is signed.
327    BackedgeTakenInfo HowManyLessThans(const SCEV *LHS, const SCEV *RHS,
328                                       const Loop *L, bool isSigned);
329
330    /// getLoopPredecessor - If the given loop's header has exactly one unique
331    /// predecessor outside the loop, return it. Otherwise return null.
332    BasicBlock *getLoopPredecessor(const Loop *L);
333
334    /// getPredecessorWithUniqueSuccessorForBB - Return a predecessor of BB
335    /// (which may not be an immediate predecessor) which has exactly one
336    /// successor from which BB is reachable, or null if no such block is
337    /// found.
338    BasicBlock* getPredecessorWithUniqueSuccessorForBB(BasicBlock *BB);
339
340    /// isNecessaryCond - Test whether the condition described by Pred, LHS,
341    /// and RHS is a necessary condition for the given Cond value to evaluate
342    /// to true.
343    bool isNecessaryCond(Value *Cond, ICmpInst::Predicate Pred,
344                         const SCEV *LHS, const SCEV *RHS,
345                         bool Inverse);
346
347    /// isNecessaryCondOperands - Test whether the condition described by Pred,
348    /// LHS, and RHS is a necessary condition for the condition described by
349    /// Pred, FoundLHS, and FoundRHS to evaluate to true.
350    bool isNecessaryCondOperands(ICmpInst::Predicate Pred,
351                                 const SCEV *LHS, const SCEV *RHS,
352                                 const SCEV *FoundLHS, const SCEV *FoundRHS);
353
354    /// getConstantEvolutionLoopExitValue - If we know that the specified Phi is
355    /// in the header of its containing loop, we know the loop executes a
356    /// constant number of times, and the PHI node is just a recurrence
357    /// involving constants, fold it.
358    Constant *getConstantEvolutionLoopExitValue(PHINode *PN, const APInt& BEs,
359                                                const Loop *L);
360
361  public:
362    static char ID; // Pass identification, replacement for typeid
363    ScalarEvolution();
364
365    LLVMContext *getContext() const { return Context; }
366
367    /// isSCEVable - Test if values of the given type are analyzable within
368    /// the SCEV framework. This primarily includes integer types, and it
369    /// can optionally include pointer types if the ScalarEvolution class
370    /// has access to target-specific information.
371    bool isSCEVable(const Type *Ty) const;
372
373    /// getTypeSizeInBits - Return the size in bits of the specified type,
374    /// for which isSCEVable must return true.
375    uint64_t getTypeSizeInBits(const Type *Ty) const;
376
377    /// getEffectiveSCEVType - Return a type with the same bitwidth as
378    /// the given type and which represents how SCEV will treat the given
379    /// type, for which isSCEVable must return true. For pointer types,
380    /// this is the pointer-sized integer type.
381    const Type *getEffectiveSCEVType(const Type *Ty) const;
382
383    /// getSCEV - Return a SCEV expression handle for the full generality of the
384    /// specified expression.
385    const SCEV *getSCEV(Value *V);
386
387    const SCEV *getConstant(ConstantInt *V);
388    const SCEV *getConstant(const APInt& Val);
389    const SCEV *getConstant(const Type *Ty, uint64_t V, bool isSigned = false);
390    const SCEV *getTruncateExpr(const SCEV *Op, const Type *Ty);
391    const SCEV *getZeroExtendExpr(const SCEV *Op, const Type *Ty);
392    const SCEV *getSignExtendExpr(const SCEV *Op, const Type *Ty);
393    const SCEV *getAnyExtendExpr(const SCEV *Op, const Type *Ty);
394    const SCEV *getAddExpr(SmallVectorImpl<const SCEV *> &Ops);
395    const SCEV *getAddExpr(const SCEV *LHS, const SCEV *RHS) {
396      SmallVector<const SCEV *, 2> Ops;
397      Ops.push_back(LHS);
398      Ops.push_back(RHS);
399      return getAddExpr(Ops);
400    }
401    const SCEV *getAddExpr(const SCEV *Op0, const SCEV *Op1,
402                          const SCEV *Op2) {
403      SmallVector<const SCEV *, 3> Ops;
404      Ops.push_back(Op0);
405      Ops.push_back(Op1);
406      Ops.push_back(Op2);
407      return getAddExpr(Ops);
408    }
409    const SCEV *getMulExpr(SmallVectorImpl<const SCEV *> &Ops);
410    const SCEV *getMulExpr(const SCEV *LHS, const SCEV *RHS) {
411      SmallVector<const SCEV *, 2> Ops;
412      Ops.push_back(LHS);
413      Ops.push_back(RHS);
414      return getMulExpr(Ops);
415    }
416    const SCEV *getUDivExpr(const SCEV *LHS, const SCEV *RHS);
417    const SCEV *getAddRecExpr(const SCEV *Start, const SCEV *Step,
418                             const Loop *L);
419    const SCEV *getAddRecExpr(SmallVectorImpl<const SCEV *> &Operands,
420                             const Loop *L);
421    const SCEV *getAddRecExpr(const SmallVectorImpl<const SCEV *> &Operands,
422                             const Loop *L) {
423      SmallVector<const SCEV *, 4> NewOp(Operands.begin(), Operands.end());
424      return getAddRecExpr(NewOp, L);
425    }
426    const SCEV *getSMaxExpr(const SCEV *LHS, const SCEV *RHS);
427    const SCEV *getSMaxExpr(SmallVectorImpl<const SCEV *> &Operands);
428    const SCEV *getUMaxExpr(const SCEV *LHS, const SCEV *RHS);
429    const SCEV *getUMaxExpr(SmallVectorImpl<const SCEV *> &Operands);
430    const SCEV *getSMinExpr(const SCEV *LHS, const SCEV *RHS);
431    const SCEV *getUMinExpr(const SCEV *LHS, const SCEV *RHS);
432    const SCEV *getUnknown(Value *V);
433    const SCEV *getCouldNotCompute();
434
435    /// getNegativeSCEV - Return the SCEV object corresponding to -V.
436    ///
437    const SCEV *getNegativeSCEV(const SCEV *V);
438
439    /// getNotSCEV - Return the SCEV object corresponding to ~V.
440    ///
441    const SCEV *getNotSCEV(const SCEV *V);
442
443    /// getMinusSCEV - Return LHS-RHS.
444    ///
445    const SCEV *getMinusSCEV(const SCEV *LHS,
446                            const SCEV *RHS);
447
448    /// getTruncateOrZeroExtend - Return a SCEV corresponding to a conversion
449    /// of the input value to the specified type.  If the type must be
450    /// extended, it is zero extended.
451    const SCEV *getTruncateOrZeroExtend(const SCEV *V, const Type *Ty);
452
453    /// getTruncateOrSignExtend - Return a SCEV corresponding to a conversion
454    /// of the input value to the specified type.  If the type must be
455    /// extended, it is sign extended.
456    const SCEV *getTruncateOrSignExtend(const SCEV *V, const Type *Ty);
457
458    /// getNoopOrZeroExtend - Return a SCEV corresponding to a conversion of
459    /// the input value to the specified type.  If the type must be extended,
460    /// it is zero extended.  The conversion must not be narrowing.
461    const SCEV *getNoopOrZeroExtend(const SCEV *V, const Type *Ty);
462
463    /// getNoopOrSignExtend - Return a SCEV corresponding to a conversion of
464    /// the input value to the specified type.  If the type must be extended,
465    /// it is sign extended.  The conversion must not be narrowing.
466    const SCEV *getNoopOrSignExtend(const SCEV *V, const Type *Ty);
467
468    /// getNoopOrAnyExtend - Return a SCEV corresponding to a conversion of
469    /// the input value to the specified type. If the type must be extended,
470    /// it is extended with unspecified bits. The conversion must not be
471    /// narrowing.
472    const SCEV *getNoopOrAnyExtend(const SCEV *V, const Type *Ty);
473
474    /// getTruncateOrNoop - Return a SCEV corresponding to a conversion of the
475    /// input value to the specified type.  The conversion must not be
476    /// widening.
477    const SCEV *getTruncateOrNoop(const SCEV *V, const Type *Ty);
478
479    /// getIntegerSCEV - Given a SCEVable type, create a constant for the
480    /// specified signed integer value and return a SCEV for the constant.
481    const SCEV *getIntegerSCEV(int Val, const Type *Ty);
482
483    /// getUMaxFromMismatchedTypes - Promote the operands to the wider of
484    /// the types using zero-extension, and then perform a umax operation
485    /// with them.
486    const SCEV *getUMaxFromMismatchedTypes(const SCEV *LHS,
487                                          const SCEV *RHS);
488
489    /// getUMinFromMismatchedTypes - Promote the operands to the wider of
490    /// the types using zero-extension, and then perform a umin operation
491    /// with them.
492    const SCEV *getUMinFromMismatchedTypes(const SCEV *LHS,
493                                           const SCEV *RHS);
494
495    /// getSCEVAtScope - Return a SCEV expression handle for the specified value
496    /// at the specified scope in the program.  The L value specifies a loop
497    /// nest to evaluate the expression at, where null is the top-level or a
498    /// specified loop is immediately inside of the loop.
499    ///
500    /// This method can be used to compute the exit value for a variable defined
501    /// in a loop by querying what the value will hold in the parent loop.
502    ///
503    /// In the case that a relevant loop exit value cannot be computed, the
504    /// original value V is returned.
505    const SCEV *getSCEVAtScope(const SCEV *S, const Loop *L);
506
507    /// getSCEVAtScope - This is a convenience function which does
508    /// getSCEVAtScope(getSCEV(V), L).
509    const SCEV *getSCEVAtScope(Value *V, const Loop *L);
510
511    /// isLoopGuardedByCond - Test whether entry to the loop is protected by
512    /// a conditional between LHS and RHS.  This is used to help avoid max
513    /// expressions in loop trip counts, and to eliminate casts.
514    bool isLoopGuardedByCond(const Loop *L, ICmpInst::Predicate Pred,
515                             const SCEV *LHS, const SCEV *RHS);
516
517    /// isLoopBackedgeGuardedByCond - Test whether the backedge of the loop is
518    /// protected by a conditional between LHS and RHS.  This is used to
519    /// to eliminate casts.
520    bool isLoopBackedgeGuardedByCond(const Loop *L, ICmpInst::Predicate Pred,
521                                     const SCEV *LHS, const SCEV *RHS);
522
523    /// getBackedgeTakenCount - If the specified loop has a predictable
524    /// backedge-taken count, return it, otherwise return a SCEVCouldNotCompute
525    /// object. The backedge-taken count is the number of times the loop header
526    /// will be branched to from within the loop. This is one less than the
527    /// trip count of the loop, since it doesn't count the first iteration,
528    /// when the header is branched to from outside the loop.
529    ///
530    /// Note that it is not valid to call this method on a loop without a
531    /// loop-invariant backedge-taken count (see
532    /// hasLoopInvariantBackedgeTakenCount).
533    ///
534    const SCEV *getBackedgeTakenCount(const Loop *L);
535
536    /// getMaxBackedgeTakenCount - Similar to getBackedgeTakenCount, except
537    /// return the least SCEV value that is known never to be less than the
538    /// actual backedge taken count.
539    const SCEV *getMaxBackedgeTakenCount(const Loop *L);
540
541    /// hasLoopInvariantBackedgeTakenCount - Return true if the specified loop
542    /// has an analyzable loop-invariant backedge-taken count.
543    bool hasLoopInvariantBackedgeTakenCount(const Loop *L);
544
545    /// forgetLoopBackedgeTakenCount - This method should be called by the
546    /// client when it has changed a loop in a way that may effect
547    /// ScalarEvolution's ability to compute a trip count, or if the loop
548    /// is deleted.
549    void forgetLoopBackedgeTakenCount(const Loop *L);
550
551    /// GetMinTrailingZeros - Determine the minimum number of zero bits that S
552    /// is guaranteed to end in (at every loop iteration).  It is, at the same
553    /// time, the minimum number of times S is divisible by 2.  For example,
554    /// given {4,+,8} it returns 2.  If S is guaranteed to be 0, it returns the
555    /// bitwidth of S.
556    uint32_t GetMinTrailingZeros(const SCEV *S);
557
558    /// getUnsignedRange - Determine the unsigned range for a particular SCEV.
559    ///
560    ConstantRange getUnsignedRange(const SCEV *S);
561
562    /// getSignedRange - Determine the signed range for a particular SCEV.
563    ///
564    ConstantRange getSignedRange(const SCEV *S);
565
566    /// isKnownNegative - Test if the given expression is known to be negative.
567    ///
568    bool isKnownNegative(const SCEV *S);
569
570    /// isKnownPositive - Test if the given expression is known to be positive.
571    ///
572    bool isKnownPositive(const SCEV *S);
573
574    /// isKnownNonNegative - Test if the given expression is known to be
575    /// non-negative.
576    ///
577    bool isKnownNonNegative(const SCEV *S);
578
579    /// isKnownNonPositive - Test if the given expression is known to be
580    /// non-positive.
581    ///
582    bool isKnownNonPositive(const SCEV *S);
583
584    /// isKnownNonZero - Test if the given expression is known to be
585    /// non-zero.
586    ///
587    bool isKnownNonZero(const SCEV *S);
588
589    /// isKnownNonZero - Test if the given expression is known to satisfy
590    /// the condition described by Pred, LHS, and RHS.
591    ///
592    bool isKnownPredicate(ICmpInst::Predicate Pred,
593                          const SCEV *LHS, const SCEV *RHS);
594
595    virtual bool runOnFunction(Function &F);
596    virtual void releaseMemory();
597    virtual void getAnalysisUsage(AnalysisUsage &AU) const;
598    void print(raw_ostream &OS, const Module* = 0) const;
599    virtual void print(std::ostream &OS, const Module* = 0) const;
600    void print(std::ostream *OS, const Module* M = 0) const {
601      if (OS) print(*OS, M);
602    }
603
604  private:
605    FoldingSet<SCEV> UniqueSCEVs;
606    BumpPtrAllocator SCEVAllocator;
607  };
608}
609
610#endif
611