Skip to content

Commit b5fc4fd

Browse files
committed
[LAA] Add test requiring runtime checks with -max-dependences flag.
Adds extra test coverage for #91196.
1 parent 9576a10 commit b5fc4fd

File tree

1 file changed

+96
-0
lines changed

1 file changed

+96
-0
lines changed
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -passes='print<access-info>' -disable-output %s 2>&1 | FileCheck --check-prefix=DEFAULT %s
3+
; RUN: opt -passes='print<access-info>' -disable-output -max-dependences=5 %s 2>&1 | FileCheck --check-prefix=MAXDEP5 %s
4+
5+
define void @dependences_with_strides(ptr %dst, i64 %stride) {
6+
; DEFAULT-LABEL: 'dependences_with_strides'
7+
; DEFAULT-NEXT: loop:
8+
; DEFAULT-NEXT: Memory dependences are safe with run-time checks
9+
; DEFAULT-NEXT: Dependences:
10+
; DEFAULT-NEXT: Run-time memory checks:
11+
; DEFAULT-NEXT: Check 0:
12+
; DEFAULT-NEXT: Comparing group GRP0:
13+
; DEFAULT-NEXT: %ptr.iv = phi ptr [ %dst, %entry ], [ %ptr.iv.next, %loop ]
14+
; DEFAULT-NEXT: Against group GRP1:
15+
; DEFAULT-NEXT: %gep.stride = getelementptr i16, ptr %ptr.iv, i64 %stride
16+
; DEFAULT-NEXT: Check 1:
17+
; DEFAULT-NEXT: Comparing group GRP0:
18+
; DEFAULT-NEXT: %ptr.iv = phi ptr [ %dst, %entry ], [ %ptr.iv.next, %loop ]
19+
; DEFAULT-NEXT: Against group GRP2:
20+
; DEFAULT-NEXT: ptr %dst
21+
; DEFAULT-NEXT: Check 2:
22+
; DEFAULT-NEXT: Comparing group GRP1:
23+
; DEFAULT-NEXT: %gep.stride = getelementptr i16, ptr %ptr.iv, i64 %stride
24+
; DEFAULT-NEXT: Against group GRP2:
25+
; DEFAULT-NEXT: ptr %dst
26+
; DEFAULT-NEXT: Grouped accesses:
27+
; DEFAULT-NEXT: Group GRP0:
28+
; DEFAULT-NEXT: (Low: %dst High: (4 + %dst))
29+
; DEFAULT-NEXT: Member: {%dst,+,2}<nw><%loop>
30+
; DEFAULT-NEXT: Group GRP1:
31+
; DEFAULT-NEXT: (Low: ((2 * %stride) + %dst) High: (4 + (2 * %stride) + %dst))
32+
; DEFAULT-NEXT: Member: {((2 * %stride) + %dst),+,2}<nw><%loop>
33+
; DEFAULT-NEXT: Group GRP2:
34+
; DEFAULT-NEXT: (Low: %dst High: (2 + %dst))
35+
; DEFAULT-NEXT: Member: %dst
36+
; DEFAULT-EMPTY:
37+
; DEFAULT-NEXT: Non vectorizable stores to invariant address were not found in loop.
38+
; DEFAULT-NEXT: SCEV assumptions:
39+
; DEFAULT-EMPTY:
40+
; DEFAULT-NEXT: Expressions re-written:
41+
;
42+
; MAXDEP5-LABEL: 'dependences_with_strides'
43+
; MAXDEP5-NEXT: loop:
44+
; MAXDEP5-NEXT: Memory dependences are safe with run-time checks
45+
; MAXDEP5-NEXT: Too many dependences, not recorded
46+
; MAXDEP5-NEXT: Run-time memory checks:
47+
; MAXDEP5-NEXT: Check 0:
48+
; MAXDEP5-NEXT: Comparing group GRP0:
49+
; MAXDEP5-NEXT: %ptr.iv = phi ptr [ %dst, %entry ], [ %ptr.iv.next, %loop ]
50+
; MAXDEP5-NEXT: Against group GRP1:
51+
; MAXDEP5-NEXT: %gep.stride = getelementptr i16, ptr %ptr.iv, i64 %stride
52+
; MAXDEP5-NEXT: Check 1:
53+
; MAXDEP5-NEXT: Comparing group GRP0:
54+
; MAXDEP5-NEXT: %ptr.iv = phi ptr [ %dst, %entry ], [ %ptr.iv.next, %loop ]
55+
; MAXDEP5-NEXT: Against group GRP2:
56+
; MAXDEP5-NEXT: ptr %dst
57+
; MAXDEP5-NEXT: Check 2:
58+
; MAXDEP5-NEXT: Comparing group GRP1:
59+
; MAXDEP5-NEXT: %gep.stride = getelementptr i16, ptr %ptr.iv, i64 %stride
60+
; MAXDEP5-NEXT: Against group GRP2:
61+
; MAXDEP5-NEXT: ptr %dst
62+
; MAXDEP5-NEXT: Grouped accesses:
63+
; MAXDEP5-NEXT: Group GRP0:
64+
; MAXDEP5-NEXT: (Low: %dst High: (4 + %dst))
65+
; MAXDEP5-NEXT: Member: {%dst,+,2}<nw><%loop>
66+
; MAXDEP5-NEXT: Group GRP1:
67+
; MAXDEP5-NEXT: (Low: ((2 * %stride) + %dst) High: (4 + (2 * %stride) + %dst))
68+
; MAXDEP5-NEXT: Member: {((2 * %stride) + %dst),+,2}<nw><%loop>
69+
; MAXDEP5-NEXT: Group GRP2:
70+
; MAXDEP5-NEXT: (Low: %dst High: (2 + %dst))
71+
; MAXDEP5-NEXT: Member: %dst
72+
; MAXDEP5-EMPTY:
73+
; MAXDEP5-NEXT: Non vectorizable stores to invariant address were not found in loop.
74+
; MAXDEP5-NEXT: SCEV assumptions:
75+
; MAXDEP5-EMPTY:
76+
; MAXDEP5-NEXT: Expressions re-written:
77+
;
78+
entry:
79+
br label %loop
80+
81+
loop:
82+
%iv = phi i32 [ 0, %entry ], [ %iv.next, %loop ]
83+
%ptr.iv = phi ptr [ %dst, %entry ], [ %ptr.iv.next, %loop ]
84+
store i16 0, ptr %ptr.iv, align 2
85+
%gep.stride = getelementptr i16, ptr %ptr.iv, i64 %stride
86+
store i16 0, ptr %gep.stride, align 2
87+
store i16 0, ptr %dst, align 2
88+
store i16 0, ptr %ptr.iv, align 2
89+
%ptr.iv.next = getelementptr i8, ptr %ptr.iv, i64 2
90+
%iv.next = add i32 %iv, 1
91+
%exitcond.not = icmp eq i32 %iv, 1
92+
br i1 %exitcond.not, label %exit, label %loop
93+
94+
exit:
95+
ret void
96+
}

0 commit comments

Comments
 (0)