summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnold Schwaighofer <aschwaighofer@apple.com>2014-01-10 18:20:29 +0000
committerArnold Schwaighofer <aschwaighofer@apple.com>2014-01-10 18:20:29 +0000
commitdb81071b34eb4f5a9a27b4b5f8d32cc9f989db96 (patch)
tree54c923675f393a6ac67e068eeb33841280e5baee
parent3dbf2472fd2b92135ff3d45f257ada6b47737353 (diff)
downloadllvm-db81071b34eb4f5a9a27b4b5f8d32cc9f989db96.tar.gz
llvm-db81071b34eb4f5a9a27b4b5f8d32cc9f989db96.tar.bz2
llvm-db81071b34eb4f5a9a27b4b5f8d32cc9f989db96.tar.xz
SCEVRewriter: Optionally interpret constants in value map as SCEVConstant
An upcoming loop vectorizer commit will want to replace a SCEVUnknown(Value*) by a SCEVConstant. This commit modifies the SCEVParameterRewriter to support this. The SCEVParameterRewriter constructor can optionally specify to follow this behavior. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198949 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--include/llvm/Analysis/ScalarEvolutionExpressions.h18
1 files changed, 12 insertions, 6 deletions
diff --git a/include/llvm/Analysis/ScalarEvolutionExpressions.h b/include/llvm/Analysis/ScalarEvolutionExpressions.h
index 9cd902a120..d9a3f7c52e 100644
--- a/include/llvm/Analysis/ScalarEvolutionExpressions.h
+++ b/include/llvm/Analysis/ScalarEvolutionExpressions.h
@@ -563,13 +563,14 @@ namespace llvm {
: public SCEVVisitor<SCEVParameterRewriter, const SCEV*> {
public:
static const SCEV *rewrite(const SCEV *Scev, ScalarEvolution &SE,
- ValueToValueMap &Map) {
- SCEVParameterRewriter Rewriter(SE, Map);
+ ValueToValueMap &Map,
+ bool InterpretConsts = false) {
+ SCEVParameterRewriter Rewriter(SE, Map, InterpretConsts);
return Rewriter.visit(Scev);
}
- SCEVParameterRewriter(ScalarEvolution &S, ValueToValueMap &M)
- : SE(S), Map(M) {}
+ SCEVParameterRewriter(ScalarEvolution &S, ValueToValueMap &M, bool C)
+ : SE(S), Map(M), InterpretConsts(C) {}
const SCEV *visitConstant(const SCEVConstant *Constant) {
return Constant;
@@ -632,8 +633,12 @@ namespace llvm {
const SCEV *visitUnknown(const SCEVUnknown *Expr) {
Value *V = Expr->getValue();
- if (Map.count(V))
- return SE.getUnknown(Map[V]);
+ if (Map.count(V)) {
+ Value *NV = Map[V];
+ if (InterpretConsts && isa<ConstantInt>(NV))
+ return SE.getConstant(cast<ConstantInt>(NV));
+ return SE.getUnknown(NV);
+ }
return Expr;
}
@@ -644,6 +649,7 @@ namespace llvm {
private:
ScalarEvolution &SE;
ValueToValueMap &Map;
+ bool InterpretConsts;
};
typedef DenseMap<const Loop*, const SCEV*> LoopToScevMapT;