Skip to content

Commit f25b091

Browse files
authored
ValueTracking/test: increase recurrence coverage (#108836)
The shift-recurrence-knownbits.ll test file only covers shift instructions while testing recurrence patterns with knownbits. Add tests for add, sub, mul, and, and or as well, and rename the file recurrence-knownbits.ll.
1 parent c48a1eb commit f25b091

File tree

1 file changed

+100
-0
lines changed

1 file changed

+100
-0
lines changed

llvm/test/Analysis/ValueTracking/shift-recurrence-knownbits.ll renamed to llvm/test/Analysis/ValueTracking/recurrence-knownbits.ll

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,106 @@ exit:
2121
ret i64 %res
2222
}
2323

24+
define i64 @test_add(i1 %c) {
25+
; CHECK-LABEL: @test_add(
26+
; CHECK-NEXT: entry:
27+
; CHECK-NEXT: br label [[LOOP:%.*]]
28+
; CHECK: loop:
29+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
30+
; CHECK: exit:
31+
; CHECK-NEXT: ret i64 0
32+
;
33+
entry:
34+
br label %loop
35+
loop:
36+
%iv = phi i64 [8, %entry], [%iv.next, %loop]
37+
%iv.next = add nuw i64 %iv, 4
38+
br i1 %c, label %exit, label %loop
39+
exit:
40+
%res = and i64 %iv, 1
41+
ret i64 %res
42+
}
43+
44+
define i64 @test_sub(i1 %c) {
45+
; CHECK-LABEL: @test_sub(
46+
; CHECK-NEXT: entry:
47+
; CHECK-NEXT: br label [[LOOP:%.*]]
48+
; CHECK: loop:
49+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
50+
; CHECK: exit:
51+
; CHECK-NEXT: ret i64 0
52+
;
53+
entry:
54+
br label %loop
55+
loop:
56+
%iv = phi i64 [8, %entry], [%iv.next, %loop]
57+
%iv.next = sub nuw i64 %iv, 4
58+
br i1 %c, label %exit, label %loop
59+
exit:
60+
%res = and i64 %iv, 1
61+
ret i64 %res
62+
}
63+
64+
define i64 @test_mul(i1 %c) {
65+
; CHECK-LABEL: @test_mul(
66+
; CHECK-NEXT: entry:
67+
; CHECK-NEXT: br label [[LOOP:%.*]]
68+
; CHECK: loop:
69+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
70+
; CHECK: exit:
71+
; CHECK-NEXT: ret i64 0
72+
;
73+
entry:
74+
br label %loop
75+
loop:
76+
%iv = phi i64 [8, %entry], [%iv.next, %loop]
77+
%iv.next = mul i64 %iv, 2
78+
br i1 %c, label %exit, label %loop
79+
exit:
80+
%res = and i64 %iv, 2
81+
ret i64 %res
82+
}
83+
84+
define i64 @test_and(i1 %c) {
85+
; CHECK-LABEL: @test_and(
86+
; CHECK-NEXT: entry:
87+
; CHECK-NEXT: br label [[LOOP:%.*]]
88+
; CHECK: loop:
89+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
90+
; CHECK: exit:
91+
; CHECK-NEXT: ret i64 2047
92+
;
93+
entry:
94+
br label %loop
95+
loop:
96+
%iv = phi i64 [1025, %entry], [%iv.next, %loop]
97+
%iv.next = and i64 %iv, 1024
98+
br i1 %c, label %exit, label %loop
99+
exit:
100+
%res = or i64 %iv, 1023
101+
ret i64 %res
102+
}
103+
104+
define i64 @test_or(i1 %c) {
105+
; CHECK-LABEL: @test_or(
106+
; CHECK-NEXT: entry:
107+
; CHECK-NEXT: br label [[LOOP:%.*]]
108+
; CHECK: loop:
109+
; CHECK-NEXT: br i1 [[C:%.*]], label [[EXIT:%.*]], label [[LOOP]]
110+
; CHECK: exit:
111+
; CHECK-NEXT: ret i64 2047
112+
;
113+
entry:
114+
br label %loop
115+
loop:
116+
%iv = phi i64 [1025, %entry], [%iv.next, %loop]
117+
%iv.next = or i64 %iv, 1024
118+
br i1 %c, label %exit, label %loop
119+
exit:
120+
%res = or i64 %iv, 1023
121+
ret i64 %res
122+
}
123+
24124
define i64 @test_ashr_zeros(i1 %c) {
25125
; CHECK-LABEL: @test_ashr_zeros(
26126
; CHECK-NEXT: entry:

0 commit comments

Comments
 (0)