@@ -149,11 +149,11 @@ define void @multidim_accesses(ptr %A) {
149149; CHECK-NEXT: Src: store i32 1, ptr %idx0, align 4 --> Dst: store i32 1, ptr %idx0, align 4
150150; CHECK-NEXT: da analyze - none!
151151; CHECK-NEXT: Src: store i32 1, ptr %idx0, align 4 --> Dst: store i32 1, ptr %idx1, align 4
152- ; FIXME: the dependence distance is not constant. Distance vector should be [* * *|<]!
153152; CHECK-NEXT: da analyze - consistent output [0 0 0|<]!
154153; CHECK-NEXT: Src: store i32 1, ptr %idx1, align 4 --> Dst: store i32 1, ptr %idx1, align 4
155154; CHECK-NEXT: da analyze - none!
156155;
156+ ; FIXME: the dependence distance is not constant. Distance vector should be [* * *|<]!
157157; for (i = 0; i < 256; i++)
158158; for (j = 0; j < 256; j++)
159159; for (k = 0; k < 256; k++) {
@@ -199,3 +199,49 @@ for.i.inc:
199199end:
200200 ret void
201201}
202+
203+ ; for (int i = 0; i < 256; i++)
204+ ; for (int j = 0; j < 256; j++)
205+ ; for (int k = 0; k < 256; k++) {
206+ ; int *idx = (int *)((int *)(A) + 256*256*i + 256*j + k);
207+ ; *((long long *)idx) = 1;
208+ ; }
209+ ;
210+ ; FIXME: There are loop-carried dependencies across iterations in the store.
211+ define void @multidim_accesses2 (ptr %A ) {
212+ ; CHECK-LABEL: 'multidim_accesses2'
213+ ; CHECK-NEXT: Src: store i64 1, ptr %idx, align 4 --> Dst: store i64 1, ptr %idx, align 4
214+ ; CHECK-NEXT: da analyze - none!
215+ ;
216+ entry:
217+ br label %for.i
218+
219+ for.i:
220+ %i = phi i64 [ 0 , %entry ], [ %i.inc , %for.i.inc ]
221+ br label %for.j
222+
223+ for.j:
224+ %j = phi i64 [ 0 , %for.i ], [ %j.inc , %for.j.inc ]
225+ br label %for.k
226+
227+ for.k:
228+ %k = phi i64 [ 0 , %for.j ], [ %k.inc , %for.k ]
229+ %idx = getelementptr inbounds [256 x [256 x [256 x i32 ]]], ptr %A , i64 0 , i64 %i , i64 %j , i64 %k
230+ store i64 1 , ptr %idx
231+ %k.inc = add nsw i64 %k , 1
232+ %k.exitcond = icmp eq i64 %k.inc , 256
233+ br i1 %k.exitcond , label %for.j.inc , label %for.k
234+
235+ for.j.inc:
236+ %j.inc = add nsw i64 %j , 1
237+ %j.exitcond = icmp eq i64 %j.inc , 256
238+ br i1 %j.exitcond , label %for.i.inc , label %for.j
239+
240+ for.i.inc:
241+ %i.inc = add nsw i64 %i , 1
242+ %i.exitcond = icmp eq i64 %i.inc , 256
243+ br i1 %i.exitcond , label %end , label %for.i
244+
245+ end:
246+ ret void
247+ }
0 commit comments