summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--polly/lib/CodeGen/CodeGeneration.cpp7
-rw-r--r--polly/lib/CodeGen/IRBuilder.cpp4
-rw-r--r--polly/test/Isl/CodeGen/MemAccess/create_arrays.ll12
-rw-r--r--polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll16
4 files changed, 28 insertions, 11 deletions
diff --git a/polly/lib/CodeGen/CodeGeneration.cpp b/polly/lib/CodeGen/CodeGeneration.cpp
index b60cc7cd246..5569378982f 100644
--- a/polly/lib/CodeGen/CodeGeneration.cpp
+++ b/polly/lib/CodeGen/CodeGeneration.cpp
@@ -162,7 +162,6 @@ static bool CodeGen(Scop &S, IslAstInfo &AI, LoopInfo &LI, DominatorTree &DT,
assert(!R->isTopLevelRegion() && "Top level regions are not supported");
ScopAnnotator Annotator;
- Annotator.buildAliasScopes(S);
simplifyRegion(R, &DT, &LI, &RI);
assert(R->isSimple());
@@ -183,6 +182,11 @@ static bool CodeGen(Scop &S, IslAstInfo &AI, LoopInfo &LI, DominatorTree &DT,
IslNodeBuilder NodeBuilder(Builder, Annotator, DL, LI, SE, DT, S, StartBlock);
+ // All arrays must have their base pointers known before
+ // ScopAnnotator::buildAliasScopes.
+ NodeBuilder.allocateNewArrays();
+ Annotator.buildAliasScopes(S);
+
if (PerfMonitoring) {
PerfMonitor P(S, EnteringBB->getParent()->getParent());
P.initialize();
@@ -224,7 +228,6 @@ static bool CodeGen(Scop &S, IslAstInfo &AI, LoopInfo &LI, DominatorTree &DT,
isl_ast_node_free(AstRoot);
} else {
- NodeBuilder.allocateNewArrays();
NodeBuilder.addParameters(S.getContext());
Value *RTC = NodeBuilder.createRTC(AI.getRunCondition());
diff --git a/polly/lib/CodeGen/IRBuilder.cpp b/polly/lib/CodeGen/IRBuilder.cpp
index a8fb1fdf281..7e8c3ad84d9 100644
--- a/polly/lib/CodeGen/IRBuilder.cpp
+++ b/polly/lib/CodeGen/IRBuilder.cpp
@@ -67,10 +67,12 @@ void ScopAnnotator::buildAliasScopes(Scop &S) {
return;
std::string AliasScopeStr = "polly.alias.scope.";
- for (const ScopArrayInfo *Array : S.arrays())
+ for (const ScopArrayInfo *Array : S.arrays()) {
+ assert(Array->getBasePtr() && "Base pointer must be present");
AliasScopeMap[Array->getBasePtr()] =
getID(Ctx, AliasScopeDomain,
MDString::get(Ctx, (AliasScopeStr + Array->getName()).c_str()));
+ }
for (const ScopArrayInfo *Array : S.arrays()) {
MDNode *AliasScopeList = MDNode::get(Ctx, {});
diff --git a/polly/test/Isl/CodeGen/MemAccess/create_arrays.ll b/polly/test/Isl/CodeGen/MemAccess/create_arrays.ll
index 1ee647a0ea6..0de347694cc 100644
--- a/polly/test/Isl/CodeGen/MemAccess/create_arrays.ll
+++ b/polly/test/Isl/CodeGen/MemAccess/create_arrays.ll
@@ -29,6 +29,18 @@
; CODEGEN: %polly.access.cast.E = bitcast [270336 x [200000 x double]]* %E to double*
; CODEGEN: %polly.access.mul.E = mul nsw i64 %polly.indvar33, 200000
; CODEGEN: %polly.access.add.E = add nsw i64 %polly.access.mul.E, %polly.indvar
+; CODEGEN: {{%.*}} = load double, double* %polly.access.E, align 8, !alias.scope [[TAG0:![0-9]+]], !noalias [[TAG2:![0-9]+]]
+; CODEGEN: store double {{%.*}}, double* %scevgep36, align 8, !alias.scope [[TAG5:![0-9]+]], !noalias [[TAG8:![0-9]+]]
+;
+; CODEGEN-DAG: [[TAG0]] = distinct !{[[TAG0]], [[TAG1:![0-9]+]], !"polly.alias.scope.E"}
+; CODEGEN-DAG: [[TAG1]] = distinct !{[[TAG1]], !"polly.alias.scope.domain"}
+; CODEGEN-DAG: [[TAG2]] = !{[[TAG3:![0-9]+]], [[TAG4:![0-9]+]], [[TAG5:![0-9]+]], [[TAG6:![0-9]+]], [[TAG7:![0-9]+]]}
+; CODEGEN-DAG: [[TAG3]] = distinct !{[[TAG3]], [[TAG1]], !"polly.alias.scope.MemRef_B"}
+; CODEGEN-DAG: [[TAG4]] = distinct !{[[TAG4]], [[TAG1]], !"polly.alias.scope.MemRef_beta"}
+; CODEGEN-DAG: [[TAG5]] = distinct !{[[TAG5]], [[TAG1]], !"polly.alias.scope.MemRef_A"}
+; CODEGEN-DAG: [[TAG6]] = distinct !{[[TAG6]], [[TAG1]], !"polly.alias.scope.D"}
+; CODEGEN-DAG: [[TAG7]] = distinct !{[[TAG7]], [[TAG1]], !"polly.alias.scope.F"}
+; CODEGEN-DAG: [[TAG8]] = !{[[TAG3]], [[TAG4]], [[TAG6]], [[TAG0]], [[TAG7]]}
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-unknown"
diff --git a/polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll b/polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll
index a3b0633062d..7863f58414a 100644
--- a/polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll
+++ b/polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll
@@ -12,14 +12,14 @@
; This test case checks whether Polly generates second level alias metadata
; to distinguish the specific accesses in case of the ublas gemm kernel.
;
-; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N0:[a-z_0-9]*]], align 8, !alias.scope !10, !noalias !2
-; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N0]], align 8, !alias.scope !10, !noalias !2
-; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N1:[a-z_0-9]*]], align 8, !alias.scope !11, !noalias !12
-; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N1]], align 8, !alias.scope !11, !noalias !12
-; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N2:[a-z_0-9]*]], align 8, !alias.scope !13, !noalias !14
-; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N2]], align 8, !alias.scope !13, !noalias !14
-; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N3:[a-z_0-9]*]], align 8, !alias.scope !15, !noalias !16
-; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N3]], align 8, !alias.scope !15, !noalias !16
+; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N0:[a-z_0-9]*]], align 8
+; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N0]], align 8
+; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N1:[a-z_0-9]*]], align 8
+; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N1]], align 8
+; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N2:[a-z_0-9]*]], align 8
+; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N2]], align 8
+; CHECK: %tmp22_p_scalar_{{[0-9]*}} = load double, double* %scevgep[[N3:[a-z_0-9]*]], align 8
+; CHECK: store double %p_tmp23{{[0-9]*}}, double* %scevgep[[N3]], align 8
;
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-unknown"
OpenPOWER on IntegriCloud