Skip to content

Commit cd474bb

Browse files
authored
[DA] Add test where access size differs from stride size (NFC) (#147715)
Add a test case that is mentioned in #144088 but not added yet.
1 parent 130e612 commit cd474bb

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

llvm/test/Analysis/DependenceAnalysis/DifferentOffsets.ll

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -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:
199199
end:
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

Comments
 (0)