summaryrefslogtreecommitdiffstats
path: root/polly/lib/CodeGen/IslCodeGeneration.cpp
diff options
context:
space:
mode:
authorJohannes Doerfert <doerfert@cs.uni-saarland.de>2014-10-05 11:33:59 +0000
committerJohannes Doerfert <doerfert@cs.uni-saarland.de>2014-10-05 11:33:59 +0000
commit2ef33e9f16bb2a9fd71ef195ebb5f39c4f750d2c (patch)
treee3f71063fde2373e79d5201612d2950ae5e4d27d /polly/lib/CodeGen/IslCodeGeneration.cpp
parent1a28a8938ef66d03fe1d29115853a5901df14b27 (diff)
downloadbcm5719-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.cpp15
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);
OpenPOWER on IntegriCloud