@@ -149,11 +149,11 @@ define void @multidim_accesses(ptr %A) {
149
149
; CHECK-NEXT: Src: store i32 1, ptr %idx0, align 4 --> Dst: store i32 1, ptr %idx0, align 4
150
150
; CHECK-NEXT: da analyze - none!
151
151
; 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 [* * *|<]!
153
152
; CHECK-NEXT: da analyze - consistent output [0 0 0|<]!
154
153
; CHECK-NEXT: Src: store i32 1, ptr %idx1, align 4 --> Dst: store i32 1, ptr %idx1, align 4
155
154
; CHECK-NEXT: da analyze - none!
156
155
;
156
+ ; FIXME: the dependence distance is not constant. Distance vector should be [* * *|<]!
157
157
; for (i = 0; i < 256; i++)
158
158
; for (j = 0; j < 256; j++)
159
159
; for (k = 0; k < 256; k++) {
@@ -199,3 +199,49 @@ for.i.inc:
199
199
end:
200
200
ret void
201
201
}
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