Skip to content

Commit fd46308

Browse files
committedJan 27, 2016
ScopInfo: Never add read accesses for synthesizable values
Before adding a MK_Value READ MemoryAccess, check whether the read is necessary or synthesizable. Synthesizable values are later generated by the SCEVExpander and therefore do not need to be transferred explicitly. This can happen because the check for synthesizability has presumbly been forgotten in the case where a phi's incoming value has been defined in a different statement. Differential Revision: http://reviews.llvm.org/D15687 llvm-svn: 258998
1 parent 2952bf5 commit fd46308

9 files changed

+10
-28
lines changed
 

‎polly/lib/Analysis/ScopInfo.cpp

+7
Original file line numberDiff line numberDiff line change
@@ -3962,6 +3962,13 @@ void ScopInfo::ensureValueWrite(Instruction *Value) {
39623962
ArrayRef<const SCEV *>(), ScopArrayInfo::MK_Value);
39633963
}
39643964
void ScopInfo::ensureValueRead(Value *Value, BasicBlock *UserBB) {
3965+
3966+
// If the instruction can be synthesized and the user is in the region we do
3967+
// not need to add a value dependences.
3968+
Region &ScopRegion = scop->getRegion();
3969+
if (canSynthesize(Value, LI, SE, &ScopRegion))
3970+
return;
3971+
39653972
ScopStmt *UserStmt = scop->getStmtForBasicBlock(UserBB);
39663973

39673974
// We do not model uses outside the scop.

‎polly/test/Isl/CodeGen/phi-defined-before-scop.ll

+1-2
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,7 @@
44
; CHECK-NEXT: %tmp7.ph.merge = phi %struct.wibble* [ %tmp7.ph.final_reload, %polly.exiting ], [ %tmp7.ph, %bb6.region_exiting ]
55

66
; CHECK-LABEL: polly.stmt.bb3:
7-
; CHECK-NEXT: %tmp2.s2a.reload = load %struct.wibble*, %struct.wibble** %tmp2.s2a
8-
; CHECK-NEXT: store %struct.wibble* %tmp2.s2a.reload, %struct.wibble** %tmp7.s2a
7+
; CHECK-NEXT: store %struct.wibble* %tmp2, %struct.wibble** %tmp7.s2a
98

109
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
1110

‎polly/test/Isl/CodeGen/synthesizable_phi_write_after_loop.ll

+2-8
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,11 @@
88
; In this case the Loop passed to the expander must NOT be the loop
99
; - Overwriting the same alloca in each iteration s.t. the last value will
1010
; retain in %i.inc.s2a
11-
; The latter is currently generated by Polly and tested here.
11+
; The first is currently generated by Polly and tested here.
1212

1313
; CHECK: polly.stmt.next:
14-
; CHECK-NEXT: %i.inc.s2a.reload = load i32, i32* %i.inc.s2a
15-
; CHECK-NEXT: store i32 %i.inc.s2a.reload, i32* %phi.phiops
14+
; CHECK-NEXT: store i32 2, i32* %phi.phiops
1615
; CHECK-NEXT: br label %polly.stmt.join
17-
;
18-
; CHECK: polly.stmt.loop:
19-
; CHECK: %0 = trunc i64 %polly.indvar to i32
20-
; CHECK: %1 = add i32 %0, 1
21-
; CHECK: store i32 %1, i32* %i.inc.s2a
2216

2317
define i32 @func() {
2418
entry:

‎polly/test/Isl/CodeGen/uninitialized_scalar_memory.ll

-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
;
66
; CHECK: polly.start:
77
; CHECK-NEXT: store float %ebig.0, float* %ebig.0.s2a
8-
; CHECK-NEXT: store i32 %iebig.0, i32* %iebig.0.s2a
98
; CHECK-NEXT: br label %polly.stmt.if.end.entry
109
;
1110
; int g(void);

‎polly/test/ScopInfo/NonAffine/non_affine_loop_used_later.ll

-4
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,13 @@
2525
; CHECK-NEXT: i32 MemRef_j_0__phi; // Element size 4
2626
; CHECK-NEXT: i32 MemRef_j_0; // Element size 4
2727
; CHECK-NEXT: i32 MemRef_A[*]; // Element size 4
28-
; CHECK-NEXT: i32 MemRef_smax; // Element size 4
2928
; CHECK-NEXT: i32 MemRef_j_2__phi; // Element size 4
3029
; CHECK-NEXT: i32 MemRef_j_2; // Element size 4
3130
; CHECK-NEXT: }
3231
; CHECK-NEXT: Arrays (Bounds as pw_affs) {
3332
; CHECK-NEXT: i32 MemRef_j_0__phi; // Element size 4
3433
; CHECK-NEXT: i32 MemRef_j_0; // Element size 4
3534
; CHECK-NEXT: i32 MemRef_A[*]; // Element size 4
36-
; CHECK-NEXT: i32 MemRef_smax; // Element size 4
3735
; CHECK-NEXT: i32 MemRef_j_2__phi; // Element size 4
3836
; CHECK-NEXT: i32 MemRef_j_2; // Element size 4
3937
; CHECK-NEXT: }
@@ -60,8 +58,6 @@
6058
; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
6159
; CHECK-NEXT: MayWriteAccess := [Reduction Type: NONE] [Scalar: 0]
6260
; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_A[i0] };
63-
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
64-
; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_smax[] };
6561
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
6662
; CHECK-NEXT: [N] -> { Stmt_bb4__TO__bb18[i0] -> MemRef_j_2__phi[] };
6763
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]

‎polly/test/ScopInfo/non_affine_region_1.ll

-2
Original file line numberDiff line numberDiff line change
@@ -41,8 +41,6 @@
4141
; CHECK-NEXT: [b] -> { Stmt_bb8[0] : b = 0 };
4242
; CHECK-NEXT: Schedule :=
4343
; CHECK-NEXT: [b] -> { Stmt_bb8[i0] -> [0, 0] };
44-
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
45-
; CHECK-NEXT: [b] -> { Stmt_bb8[i0] -> MemRef_b[] };
4644
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
4745
; CHECK-NEXT: [b] -> { Stmt_bb8[i0] -> MemRef_x_1__phi[] };
4846
; CHECK-NEXT: Stmt_bb10__TO__bb18

‎polly/test/ScopInfo/non_affine_region_3.ll

-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_A[i0] };
3232
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
3333
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_x_2__phi[] };
34-
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
35-
; CHECK-NEXT: { Stmt_bb3__TO__bb18[i0] -> MemRef_b[] };
3634
; CHECK-NEXT: Stmt_bb18
3735
; CHECK-NEXT: Domain :=
3836
; CHECK-NEXT: { Stmt_bb18[i0] : 0 <= i0 <= 1023 };

‎polly/test/ScopInfo/pointer-used-as-base-pointer-and-scalar-read.ll

-8
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,12 @@
66

77
; CHECK: Arrays {
88
; CHECK-NEXT: float MemRef_A[*]; // Element size 4
9-
; CHECK-NEXT: float* MemRef_A; // Element size 8
109
; CHECK-NEXT: float* MemRef_x__phi; // Element size 8
11-
; CHECK-NEXT: float* MemRef_B; // Element size 8
1210
; CHECK-NEXT: float* MemRef_C[*]; // Element size 8
1311
; CHECK-NEXT: }
1412
; CHECK: Arrays (Bounds as pw_affs) {
1513
; CHECK-NEXT: float MemRef_A[*]; // Element size 4
16-
; CHECK-NEXT: float* MemRef_A; // Element size 8
1714
; CHECK-NEXT: float* MemRef_x__phi; // Element size 8
18-
; CHECK-NEXT: float* MemRef_B; // Element size 8
1915
; CHECK-NEXT: float* MemRef_C[*]; // Element size 8
2016
; CHECK-NEXT: }
2117
; CHECK: Alias Groups (0):
@@ -28,8 +24,6 @@
2824
; CHECK-NEXT: [p] -> { Stmt_then[i0] -> [i0, 1] };
2925
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
3026
; CHECK-NEXT: [p] -> { Stmt_then[i0] -> MemRef_A[0] };
31-
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
32-
; CHECK-NEXT: [p] -> { Stmt_then[i0] -> MemRef_A[] };
3327
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
3428
; CHECK-NEXT: [p] -> { Stmt_then[i0] -> MemRef_x__phi[] };
3529
; CHECK-NEXT: Stmt_else
@@ -39,8 +33,6 @@
3933
; CHECK-NEXT: [p] -> { Stmt_else[i0] -> [i0, 0] : p >= 33 or p <= 31 };
4034
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
4135
; CHECK-NEXT: [p] -> { Stmt_else[i0] -> MemRef_A[0] };
42-
; CHECK-NEXT: ReadAccess := [Reduction Type: NONE] [Scalar: 1]
43-
; CHECK-NEXT: [p] -> { Stmt_else[i0] -> MemRef_B[] };
4436
; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
4537
; CHECK-NEXT: [p] -> { Stmt_else[i0] -> MemRef_x__phi[] };
4638
; CHECK-NEXT: Stmt_bb8

‎polly/test/ScopInfo/same-base-address-scalar-and-array.ll

-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
; as it is used as a memory base pointer (%0) but also as a scalar (%out.addr.0.lcssa).
55
;
66
; CHECK: Arrays {
7-
; CHECK-NEXT: float* MemRef_out; // Element size 8
87
; CHECK-NEXT: float* MemRef_out_addr_0_lcssa; // Element size 8
98
; CHECK-NEXT: float MemRef_out[*]; // Element size 4
109
; CHECK-NEXT: }

0 commit comments

Comments
 (0)