Make the SCEV* form of getSCEVAtScope public, to allow ScalarEvolution

clients to use it.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@71258 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Dan Gohman 2009-05-08 20:38:54 +00:00
parent a9519579b7
commit 66a7e857aa
2 changed files with 16 additions and 18 deletions

View File

@ -345,11 +345,6 @@ namespace llvm {
Constant *getConstantEvolutionLoopExitValue(PHINode *PN, const APInt& BEs, Constant *getConstantEvolutionLoopExitValue(PHINode *PN, const APInt& BEs,
const Loop *L); const Loop *L);
/// getSCEVAtScope - Compute the value of the specified expression within
/// the indicated loop (which may be null to indicate in no loop). If the
/// expression cannot be evaluated, return UnknownValue itself.
SCEVHandle getSCEVAtScope(const SCEV *S, const Loop *L);
/// forgetLoopPHIs - Delete the memoized SCEVs associated with the /// forgetLoopPHIs - Delete the memoized SCEVs associated with the
/// PHI nodes in the given loop. This is used when the trip count of /// PHI nodes in the given loop. This is used when the trip count of
/// the loop may have changed. /// the loop may have changed.
@ -468,6 +463,10 @@ namespace llvm {
/// ///
/// If this value is not computable at this scope, a SCEVCouldNotCompute /// If this value is not computable at this scope, a SCEVCouldNotCompute
/// object is returned. /// object is returned.
SCEVHandle getSCEVAtScope(const SCEV *S, const Loop *L);
/// getSCEVAtScope - This is a convenience function which does
/// getSCEVAtScope(getSCEV(V), L).
SCEVHandle getSCEVAtScope(Value *V, const Loop *L); SCEVHandle getSCEVAtScope(Value *V, const Loop *L);
/// isLoopGuardedByCond - Test whether entry to the loop is protected by /// isLoopGuardedByCond - Test whether entry to the loop is protected by

View File

@ -2721,9 +2721,16 @@ ComputeBackedgeTakenCountExhaustively(const Loop *L, Value *Cond, bool ExitWhen)
return UnknownValue; return UnknownValue;
} }
/// getSCEVAtScope - Compute the value of the specified expression within the /// getSCEVAtScope - Return a SCEV expression handle for the specified value
/// indicated loop (which may be null to indicate in no loop). If the /// at the specified scope in the program. The L value specifies a loop
/// expression cannot be evaluated, return UnknownValue. /// nest to evaluate the expression at, where null is the top-level or a
/// specified loop is immediately inside of the loop.
///
/// This method can be used to compute the exit value for a variable defined
/// in a loop by querying what the value will hold in the parent loop.
///
/// If this value is not computable at this scope, a SCEVCouldNotCompute
/// object is returned.
SCEVHandle ScalarEvolution::getSCEVAtScope(const SCEV *V, const Loop *L) { SCEVHandle ScalarEvolution::getSCEVAtScope(const SCEV *V, const Loop *L) {
// FIXME: this should be turned into a virtual method on SCEV! // FIXME: this should be turned into a virtual method on SCEV!
@ -2897,16 +2904,8 @@ SCEVHandle ScalarEvolution::getSCEVAtScope(const SCEV *V, const Loop *L) {
assert(0 && "Unknown SCEV type!"); assert(0 && "Unknown SCEV type!");
} }
/// getSCEVAtScope - Return a SCEV expression handle for the specified value /// getSCEVAtScope - This is a convenience function which does
/// at the specified scope in the program. The L value specifies a loop /// getSCEVAtScope(getSCEV(V), L).
/// nest to evaluate the expression at, where null is the top-level or a
/// specified loop is immediately inside of the loop.
///
/// This method can be used to compute the exit value for a variable defined
/// in a loop by querying what the value will hold in the parent loop.
///
/// If this value is not computable at this scope, a SCEVCouldNotCompute
/// object is returned.
SCEVHandle ScalarEvolution::getSCEVAtScope(Value *V, const Loop *L) { SCEVHandle ScalarEvolution::getSCEVAtScope(Value *V, const Loop *L) {
return getSCEVAtScope(getSCEV(V), L); return getSCEVAtScope(getSCEV(V), L);
} }