diff --git a/polly/lib/Analysis/ScopBuilder.cpp b/polly/lib/Analysis/ScopBuilder.cpp index 4486164ce0e2..0edc41d10641 100644 --- a/polly/lib/Analysis/ScopBuilder.cpp +++ b/polly/lib/Analysis/ScopBuilder.cpp @@ -2516,15 +2516,19 @@ bool hasIntersectingAccesses(isl::set AllAccs, MemoryAccess *LoadMA, MemoryAccess *StoreMA, isl::set Domain, SmallVector &MemAccs) { bool HasIntersectingAccs = false; + auto AllAccsNoParams = AllAccs.project_out_all_params(); + for (MemoryAccess *MA : MemAccs) { if (MA == LoadMA || MA == StoreMA) continue; + auto AccRel = MA->getAccessRelation().intersect_domain(Domain); + auto Accs = AccRel.range(); + auto AccsNoParams = Accs.project_out_all_params(); - isl::map AccRel = MA->getAccessRelation().intersect_domain(Domain); - isl::set Accs = AccRel.range(); + bool CompatibleSpace = AllAccsNoParams.has_equal_space(AccsNoParams); - if (AllAccs.has_equal_space(Accs)) { - isl::set OverlapAccs = Accs.intersect(AllAccs); + if (CompatibleSpace) { + auto OverlapAccs = Accs.intersect(AllAccs); bool DoesIntersect = !OverlapAccs.is_empty(); HasIntersectingAccs |= DoesIntersect; } diff --git a/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll b/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll index f2574b77d6e5..e39569abc52d 100644 --- a/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll +++ b/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_2.ll @@ -44,9 +44,9 @@ ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[p_1] }; ; INNERMOST-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0] ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[p_2] }; -; INNERMOST-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0] +; INNERMOST-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0] ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[p_0 + i0] }; -; INNERMOST-NEXT: MustWriteAccess := [Reduction Type: +] [Scalar: 0] +; INNERMOST-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[p_0 + i0] }; ; INNERMOST-NEXT: Stmt_bb26 ; INNERMOST-NEXT: Domain := diff --git a/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll b/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll index 463db2359608..75dd7ac26bb3 100644 --- a/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll +++ b/polly/test/ScopInfo/NonAffine/non-affine-loop-condition-dependent-access_3.ll @@ -44,9 +44,9 @@ ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[p_1] }; ; INNERMOST-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0] ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[p_2] }; -; INNERMOST-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0] +; INNERMOST-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0] ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[i0] }; -; INNERMOST-NEXT: MustWriteAccess := [Reduction Type: +] [Scalar: 0] +; INNERMOST-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; INNERMOST-NEXT: [p_0, p_1, p_2] -> { Stmt_bb16[i0] -> MemRef_A[i0] }; ; INNERMOST-NEXT: Stmt_bb26 ; INNERMOST-NEXT: Domain := diff --git a/polly/test/ScopInfo/int2ptr_ptr2int.ll b/polly/test/ScopInfo/int2ptr_ptr2int.ll index 2e7bfbe5eaee..9fadc5a8eb28 100644 --- a/polly/test/ScopInfo/int2ptr_ptr2int.ll +++ b/polly/test/ScopInfo/int2ptr_ptr2int.ll @@ -11,9 +11,9 @@ ; ; CHECK: ReadAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK-NEXT: [val, ptr] -> { Stmt_for_body[i0] -> MemRef_A[9 + val] }; -; CHECK-NEXT: ReadAccess := [Reduction Type: +] [Scalar: 0] +; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK-NEXT: [val, ptr] -> { Stmt_for_body[i0] -> MemRef_A[9 + ptr] }; -; CHECK-NEXT: MustWriteAccess := [Reduction Type: +] [Scalar: 0] +; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0] ; CHECK-NEXT: [val, ptr] -> { Stmt_for_body[i0] -> MemRef_A[9 + ptr] }; ; ; IR: entry: