diff options
author | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2014-10-05 11:33:59 +0000 |
---|---|---|
committer | Johannes Doerfert <doerfert@cs.uni-saarland.de> | 2014-10-05 11:33:59 +0000 |
commit | 2ef33e9f16bb2a9fd71ef195ebb5f39c4f750d2c (patch) | |
tree | e3f71063fde2373e79d5201612d2950ae5e4d27d /polly/lib/CodeGen/IslCodeGeneration.cpp | |
parent | 1a28a8938ef66d03fe1d29115853a5901df14b27 (diff) | |
download | bcm5719-llvm-2ef33e9f16bb2a9fd71ef195ebb5f39c4f750d2c.tar.gz bcm5719-llvm-2ef33e9f16bb2a9fd71ef195ebb5f39c4f750d2c.zip |
Allow multidimensional accesses in the IslExprBuilder.
This resolved the issues with delinearized accesses that might alias,
thus delinearization doesn't deactivate runtime alias checks anymore.
Differential Revision: http://reviews.llvm.org/D5614
llvm-svn: 219078
Diffstat (limited to 'polly/lib/CodeGen/IslCodeGeneration.cpp')
-rw-r--r-- | polly/lib/CodeGen/IslCodeGeneration.cpp | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/polly/lib/CodeGen/IslCodeGeneration.cpp b/polly/lib/CodeGen/IslCodeGeneration.cpp index 7b4b76091c0..d72298b54eb 100644 --- a/polly/lib/CodeGen/IslCodeGeneration.cpp +++ b/polly/lib/CodeGen/IslCodeGeneration.cpp @@ -57,8 +57,12 @@ class IslNodeBuilder { public: IslNodeBuilder(PollyIRBuilder &Builder, ScopAnnotator &Annotator, Pass *P, LoopInfo &LI, ScalarEvolution &SE, DominatorTree &DT) - : Builder(Builder), Annotator(Annotator), ExprBuilder(Builder, IDToValue), - P(P), LI(LI), SE(SE), DT(DT) {} + : Builder(Builder), Annotator(Annotator), + Rewriter(new SCEVExpander(SE, "polly")), + ExprBuilder(Builder, IDToValue, *Rewriter), P(P), LI(LI), SE(SE), + DT(DT) {} + + ~IslNodeBuilder() { delete Rewriter; } /// @brief Add the mappings from array id's to array llvm::Value's. void addMemoryAccesses(Scop &S); @@ -69,6 +73,10 @@ public: private: PollyIRBuilder &Builder; ScopAnnotator &Annotator; + + /// @brief A SCEVExpander to create llvm values from SCEVs. + SCEVExpander *Rewriter; + IslExprBuilder ExprBuilder; Pass *P; LoopInfo &LI; @@ -532,7 +540,6 @@ void IslNodeBuilder::create(__isl_take isl_ast_node *Node) { } void IslNodeBuilder::addParameters(__isl_take isl_set *Context) { - SCEVExpander Rewriter(SE, "polly"); for (unsigned i = 0; i < isl_set_dim(Context, isl_dim_param); ++i) { isl_id *Id; @@ -544,7 +551,7 @@ void IslNodeBuilder::addParameters(__isl_take isl_set *Context) { Scev = (const SCEV *)isl_id_get_user(Id); T = dyn_cast<IntegerType>(Scev->getType()); InsertLocation = --(Builder.GetInsertBlock()->end()); - Value *V = Rewriter.expandCodeFor(Scev, T, InsertLocation); + Value *V = Rewriter->expandCodeFor(Scev, T, InsertLocation); IDToValue[Id] = V; isl_id_free(Id); |