Skip to content

Commit 964097d

Browse files
committed
Add baseline tests for upcoming patch
1 parent a4baf2c commit 964097d

File tree

1 file changed

+101
-0
lines changed

1 file changed

+101
-0
lines changed
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt -passes=sccp -S < %s | FileCheck %s
3+
4+
declare void @llvm.assume(i1)
5+
6+
define i1 @assume_mul_nuw_square_i8(i8 %s) {
7+
; CHECK-LABEL: @assume_mul_nuw_square_i8(
8+
; CHECK-NEXT: start:
9+
; CHECK-NEXT: [[MUL:%.*]] = mul nuw i8 [[S:%.*]], [[S]]
10+
; CHECK-NEXT: [[COND:%.*]] = icmp ule i8 [[MUL]], 120
11+
; CHECK-NEXT: call void @llvm.assume(i1 [[COND]])
12+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[S]], 16
13+
; CHECK-NEXT: ret i1 [[CMP]]
14+
;
15+
start:
16+
%mul = mul nuw i8 %s, %s
17+
%cond = icmp ule i8 %mul, 120
18+
call void @llvm.assume(i1 %cond)
19+
%cmp = icmp ult i8 %s, 16
20+
ret i1 %cmp
21+
}
22+
23+
define i1 @assume_mul_nuw_square_i5(i5 %s) {
24+
; CHECK-LABEL: @assume_mul_nuw_square_i5(
25+
; CHECK-NEXT: start:
26+
; CHECK-NEXT: [[MUL:%.*]] = mul nuw i5 [[S:%.*]], [[S]]
27+
; CHECK-NEXT: [[COND:%.*]] = icmp ult i5 [[MUL]], 15
28+
; CHECK-NEXT: call void @llvm.assume(i1 [[COND]])
29+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i5 [[S]], 8
30+
; CHECK-NEXT: ret i1 [[CMP]]
31+
;
32+
start:
33+
%mul = mul nuw i5 %s, %s
34+
%cond = icmp ult i5 %mul, 15
35+
call void @llvm.assume(i1 %cond)
36+
%cmp = icmp ult i5 %s, 8
37+
ret i1 %cmp
38+
}
39+
40+
define i1 @branch_mul_nuw_square(i8 %s, i8 %num) {
41+
; CHECK-LABEL: @branch_mul_nuw_square(
42+
; CHECK-NEXT: entry:
43+
; CHECK-NEXT: [[MUL:%.*]] = mul nuw i8 [[S:%.*]], [[S]]
44+
; CHECK-NEXT: [[COND:%.*]] = icmp ule i8 [[MUL]], [[NUM:%.*]]
45+
; CHECK-NEXT: br i1 [[COND]], label [[TRUE:%.*]], label [[FALSE:%.*]]
46+
; CHECK: true:
47+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[S]], 16
48+
; CHECK-NEXT: ret i1 [[CMP]]
49+
; CHECK: false:
50+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i8 [[S]], 16
51+
; CHECK-NEXT: ret i1 [[CMP2]]
52+
;
53+
entry:
54+
%mul = mul nuw i8 %s, %s
55+
%cond = icmp ule i8 %mul, %num
56+
br i1 %cond, label %true, label %false
57+
58+
true:
59+
%cmp = icmp ult i8 %s, 16
60+
ret i1 %cmp
61+
62+
false:
63+
%cmp2 = icmp ult i8 %s, 16
64+
ret i1 %cmp2
65+
}
66+
67+
; negative test: missing nuw on the multiply.
68+
define i1 @assume_mul_square_no_nuw(i8 %s) {
69+
; CHECK-LABEL: @assume_mul_square_no_nuw(
70+
; CHECK-NEXT: start:
71+
; CHECK-NEXT: [[MUL:%.*]] = mul i8 [[S:%.*]], [[S]]
72+
; CHECK-NEXT: [[COND:%.*]] = icmp ule i8 [[MUL]], 120
73+
; CHECK-NEXT: call void @llvm.assume(i1 [[COND]])
74+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[S]], 16
75+
; CHECK-NEXT: ret i1 [[CMP]]
76+
;
77+
start:
78+
%mul = mul i8 %s, %s
79+
%cond = icmp ule i8 %mul, 120
80+
call void @llvm.assume(i1 %cond)
81+
%cmp = icmp ult i8 %s, 16
82+
ret i1 %cmp
83+
}
84+
85+
; negative test: multiply is not a square.
86+
define i1 @assume_mul_nuw_not_square(i8 %s, i8 %t) {
87+
; CHECK-LABEL: @assume_mul_nuw_not_square(
88+
; CHECK-NEXT: start:
89+
; CHECK-NEXT: [[MUL:%.*]] = mul nuw i8 [[S:%.*]], [[T:%.*]]
90+
; CHECK-NEXT: [[COND:%.*]] = icmp ule i8 [[MUL]], 120
91+
; CHECK-NEXT: call void @llvm.assume(i1 [[COND]])
92+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[S]], 16
93+
; CHECK-NEXT: ret i1 [[CMP]]
94+
;
95+
start:
96+
%mul = mul nuw i8 %s, %t
97+
%cond = icmp ule i8 %mul, 120
98+
call void @llvm.assume(i1 %cond)
99+
%cmp = icmp ult i8 %s, 16
100+
ret i1 %cmp
101+
}

0 commit comments

Comments
 (0)