Skip to content

Commit 050db5b

Browse files
committed
Add baseline tests for upcoming patch
1 parent a4baf2c commit 050db5b

File tree

1 file changed

+91
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)