Skip to content

Commit 0360d03

Browse files
committed
[SCEV] Add coverage for howFarToZero with stride=VF*vscale
1 parent e42864e commit 0360d03

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

llvm/test/Analysis/ScalarEvolution/scalable-vector.ll

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,4 +73,54 @@ define i64 @vscale_exact_range() vscale_range(2) {
7373
ret i64 %vscale
7474
}
7575

76+
define void @vscale_step_ne_tripcount(i64 %N) vscale_range(2, 1024) {
77+
; CHECK-LABEL: 'vscale_step_ne_tripcount'
78+
; CHECK-NEXT: Classifying expressions for: @vscale_step_ne_tripcount
79+
; CHECK-NEXT: %0 = sub i64 -1, %N
80+
; CHECK-NEXT: --> (-1 + (-1 * %N)) U: full-set S: full-set
81+
; CHECK-NEXT: %1 = call i64 @llvm.vscale.i64()
82+
; CHECK-NEXT: --> vscale U: [2,1025) S: [2,1025)
83+
; CHECK-NEXT: %2 = mul i64 %1, 4
84+
; CHECK-NEXT: --> (4 * vscale)<nuw><nsw> U: [8,4097) S: [8,4097)
85+
; CHECK-NEXT: %4 = sub i64 %2, 1
86+
; CHECK-NEXT: --> (-1 + (4 * vscale)<nuw><nsw>)<nsw> U: [7,4096) S: [7,4096)
87+
; CHECK-NEXT: %n.rnd.up = add i64 %N, %4
88+
; CHECK-NEXT: --> (-1 + (4 * vscale)<nuw><nsw> + %N) U: full-set S: full-set
89+
; CHECK-NEXT: %n.mod.vf = urem i64 %n.rnd.up, %2
90+
; CHECK-NEXT: --> (-1 + (vscale * (4 + (-4 * ((-1 + (4 * vscale)<nuw><nsw> + %N) /u (4 * vscale)<nuw><nsw>))<nsw>)<nsw>) + %N) U: full-set S: full-set
91+
; CHECK-NEXT: %n.vec = sub i64 %n.rnd.up, %n.mod.vf
92+
; CHECK-NEXT: --> (4 * vscale * ((-1 + (4 * vscale)<nuw><nsw> + %N) /u (4 * vscale)<nuw><nsw>)) U: [0,-3) S: [-9223372036854775808,9223372036854775805)
93+
; CHECK-NEXT: %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
94+
; CHECK-NEXT: --> {0,+,(4 * vscale)<nuw><nsw>}<nuw><%vector.body> U: [0,-3) S: [-9223372036854775808,9223372036854775805) Exits: <<Unknown>> LoopDispositions: { %vector.body: Computable }
95+
; CHECK-NEXT: %index.next = add nuw i64 %index, %2
96+
; CHECK-NEXT: --> {(4 * vscale)<nuw><nsw>,+,(4 * vscale)<nuw><nsw>}<nuw><%vector.body> U: [8,-3) S: [-9223372036854775808,9223372036854775805) Exits: <<Unknown>> LoopDispositions: { %vector.body: Computable }
97+
; CHECK-NEXT: Determining loop execution counts for: @vscale_step_ne_tripcount
98+
; CHECK-NEXT: Loop %vector.body: Unpredictable backedge-taken count.
99+
; CHECK-NEXT: Loop %vector.body: Unpredictable constant max backedge-taken count.
100+
; CHECK-NEXT: Loop %vector.body: Unpredictable symbolic max backedge-taken count.
101+
;
102+
entry:
103+
%0 = sub i64 -1, %N
104+
%1 = call i64 @llvm.vscale.i64()
105+
%2 = mul i64 %1, 4
106+
%3 = icmp ult i64 %0, %2
107+
br i1 %3, label %loop.exit, label %vector.ph
108+
109+
vector.ph: ; preds = %entry
110+
%8 = sub i64 %2, 1
111+
%n.rnd.up = add i64 %N, %8
112+
%n.mod.vf = urem i64 %n.rnd.up, %2
113+
%n.vec = sub i64 %n.rnd.up, %n.mod.vf
114+
br label %vector.body
115+
116+
vector.body: ; preds = %vector.body, %vector.ph
117+
%index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
118+
%index.next = add nuw i64 %index, %2
119+
%22 = icmp eq i64 %index.next, %n.vec
120+
br i1 %22, label %loop.exit, label %vector.body
121+
122+
loop.exit:
123+
ret void
124+
}
125+
76126
declare i64 @llvm.vscale.i64()

0 commit comments

Comments
 (0)