diff options
| -rw-r--r-- | polly/lib/CodeGen/CodeGeneration.cpp | 7 | ||||
| -rw-r--r-- | polly/lib/CodeGen/IRBuilder.cpp | 4 | ||||
| -rw-r--r-- | polly/test/Isl/CodeGen/MemAccess/create_arrays.ll | 12 | ||||
| -rw-r--r-- | polly/test/ScheduleOptimizer/pattern-matching-based-opts_10.ll | 16 |
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" |

