Skip to content

Commit a860a3d

Browse files
committed
precommit test
1 parent 59476c9 commit a860a3d

File tree

1 file changed

+125
-0
lines changed

1 file changed

+125
-0
lines changed
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3+
4+
define i8 @select_icmp_eq_mul_and(i8 noundef %a, i8 %b) {
5+
; CHECK-LABEL: define i8 @select_icmp_eq_mul_and(
6+
; CHECK-SAME: i8 noundef [[A:%.*]], i8 [[B:%.*]]) {
7+
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A]], 1
8+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 0
9+
; CHECK-NEXT: [[DIV:%.*]] = and i8 [[A]], -2
10+
; CHECK-NEXT: [[MUL:%.*]] = mul i8 [[DIV]], [[DIV]]
11+
; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP]], i8 [[MUL]], i8 [[B]]
12+
; CHECK-NEXT: ret i8 [[RETVAL]]
13+
;
14+
%1 = and i8 %a, 1
15+
%cmp = icmp eq i8 %1, 0
16+
%div = and i8 %a, -2
17+
%mul = mul i8 %div, %div
18+
%retval = select i1 %cmp, i8 %mul, i8 %b
19+
ret i8 %retval
20+
}
21+
22+
define i8 @select_icmp_eq_mul_and_inv(i8 noundef %a, i8 %b) {
23+
; CHECK-LABEL: define i8 @select_icmp_eq_mul_and_inv(
24+
; CHECK-SAME: i8 noundef [[A:%.*]], i8 [[B:%.*]]) {
25+
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A]], 1
26+
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i8 [[TMP1]], 0
27+
; CHECK-NEXT: [[DIV:%.*]] = and i8 [[A]], -2
28+
; CHECK-NEXT: [[MUL:%.*]] = mul i8 [[DIV]], [[DIV]]
29+
; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP_NOT]], i8 [[MUL]], i8 [[B]]
30+
; CHECK-NEXT: ret i8 [[RETVAL]]
31+
;
32+
%1 = and i8 %a, 1
33+
%cmp = icmp eq i8 %1, 1
34+
%div = and i8 %a, -2
35+
%mul = mul i8 %div, %div
36+
%retval = select i1 %cmp, i8 %b, i8 %mul
37+
ret i8 %retval
38+
}
39+
40+
define i8 @select_icmp_eq_and(i8 noundef %a, i8 %b) {
41+
; CHECK-LABEL: define i8 @select_icmp_eq_and(
42+
; CHECK-SAME: i8 noundef [[A:%.*]], i8 [[B:%.*]]) {
43+
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A]], 1
44+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 0
45+
; CHECK-NEXT: [[DIV:%.*]] = and i8 [[A]], -2
46+
; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP]], i8 [[DIV]], i8 [[B]]
47+
; CHECK-NEXT: ret i8 [[RETVAL]]
48+
;
49+
%1 = and i8 %a, 1
50+
%cmp = icmp eq i8 %1, 0
51+
%div = and i8 %a, -2
52+
%retval = select i1 %cmp, i8 %div, i8 %b
53+
ret i8 %retval
54+
}
55+
56+
define i8 @select_icmp_eq_and_inv(i8 noundef %a, i8 %b) {
57+
; CHECK-LABEL: define i8 @select_icmp_eq_and_inv(
58+
; CHECK-SAME: i8 noundef [[A:%.*]], i8 [[B:%.*]]) {
59+
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A]], 1
60+
; CHECK-NEXT: [[CMP_NOT:%.*]] = icmp eq i8 [[TMP1]], 0
61+
; CHECK-NEXT: [[DIV:%.*]] = and i8 [[A]], -2
62+
; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP_NOT]], i8 [[DIV]], i8 [[B]]
63+
; CHECK-NEXT: ret i8 [[RETVAL]]
64+
;
65+
%1 = and i8 %a, 1
66+
%cmp = icmp eq i8 %1, 1
67+
%div = and i8 %a, -2
68+
%retval = select i1 %cmp, i8 %b, i8 %div
69+
ret i8 %retval
70+
}
71+
72+
;negative test
73+
define i8 @select_icmp_eq_and_undef(i8 %a, i8 %b) {
74+
; CHECK-LABEL: define i8 @select_icmp_eq_and_undef(
75+
; CHECK-SAME: i8 [[A:%.*]], i8 [[B:%.*]]) {
76+
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A]], 1
77+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 0
78+
; CHECK-NEXT: [[DIV:%.*]] = and i8 [[A]], -2
79+
; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP]], i8 [[DIV]], i8 [[B]]
80+
; CHECK-NEXT: ret i8 [[RETVAL]]
81+
;
82+
%1 = and i8 %a, 1
83+
%cmp = icmp eq i8 %1, 0
84+
%div = and i8 %a, -2
85+
%retval = select i1 %cmp, i8 %div, i8 %b
86+
ret i8 %retval
87+
}
88+
89+
;negative test
90+
define i8 @select_icmp_eq_and_diff(i8 noundef %a, i8 %b, i8 %c) {
91+
; CHECK-LABEL: define i8 @select_icmp_eq_and_diff(
92+
; CHECK-SAME: i8 noundef [[A:%.*]], i8 [[B:%.*]], i8 [[C:%.*]]) {
93+
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A]], 1
94+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 0
95+
; CHECK-NEXT: [[DIV:%.*]] = and i8 [[C]], -2
96+
; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP]], i8 [[DIV]], i8 [[B]]
97+
; CHECK-NEXT: ret i8 [[RETVAL]]
98+
;
99+
%1 = and i8 %a, 1
100+
%cmp = icmp eq i8 %1, 0
101+
%div = and i8 %c, -2
102+
%retval = select i1 %cmp, i8 %div, i8 %b
103+
ret i8 %retval
104+
}
105+
106+
;negative test
107+
define i8 @select_icmp_eq_mul_and_extra_use(i8 noundef %a, i8 %b) {
108+
; CHECK-LABEL: define i8 @select_icmp_eq_mul_and_extra_use(
109+
; CHECK-SAME: i8 noundef [[A:%.*]], i8 [[B:%.*]]) {
110+
; CHECK-NEXT: [[TMP1:%.*]] = and i8 [[A]], 1
111+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[TMP1]], 0
112+
; CHECK-NEXT: [[DIV:%.*]] = and i8 [[A]], -2
113+
; CHECK-NEXT: [[MUL:%.*]] = mul i8 [[DIV]], [[DIV]]
114+
; CHECK-NEXT: [[RETVAL:%.*]] = select i1 [[CMP]], i8 [[MUL]], i8 [[B]]
115+
; CHECK-NEXT: [[SUM:%.*]] = add i8 [[MUL]], [[RETVAL]]
116+
; CHECK-NEXT: ret i8 [[SUM]]
117+
;
118+
%1 = and i8 %a, 1
119+
%cmp = icmp eq i8 %1, 0
120+
%div = and i8 %a, -2
121+
%mul = mul i8 %div, %div
122+
%retval = select i1 %cmp, i8 %mul, i8 %b
123+
%sum = add i8 %mul, %retval
124+
ret i8 %sum
125+
}

0 commit comments

Comments
 (0)