Skip to content

Commit 33ca979

Browse files
committed
[InstCombine][NFC] Precommit testcase for and-sub combine.
1 parent a1d71c3 commit 33ca979

File tree

1 file changed

+90
-0
lines changed

1 file changed

+90
-0
lines changed
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3+
4+
define i8 @and_sub(i8 %a) {
5+
; CHECK-LABEL: @and_sub(
6+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[A:%.*]], 15
7+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[A]], 3
8+
; CHECK-NEXT: [[RET:%.*]] = sub nsw i8 [[AND1]], [[AND2]]
9+
; CHECK-NEXT: ret i8 [[RET]]
10+
;
11+
%and1 = and i8 %a, 15
12+
%and2 = and i8 %a, 3
13+
14+
%ret = sub i8 %and1, %and2
15+
ret i8 %ret
16+
}
17+
18+
declare void @use(i8)
19+
define i8 @and_sub_multi_use(i8 %a) {
20+
; CHECK-LABEL: @and_sub_multi_use(
21+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[A:%.*]], 15
22+
; CHECK-NEXT: call void @use(i8 [[AND1]])
23+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[A]], 3
24+
; CHECK-NEXT: call void @use(i8 [[AND2]])
25+
; CHECK-NEXT: [[RET:%.*]] = sub nsw i8 [[AND1]], [[AND2]]
26+
; CHECK-NEXT: ret i8 [[RET]]
27+
;
28+
%and1 = and i8 %a, 15
29+
call void @use(i8 %and1)
30+
%and2 = and i8 %a, 3
31+
call void @use(i8 %and2)
32+
%ret = sub i8 %and1, %and2
33+
ret i8 %ret
34+
}
35+
36+
define <2 x i32> @and_sub_vec(<2 x i32> %a) {
37+
; CHECK-LABEL: @and_sub_vec(
38+
; CHECK-NEXT: [[AND1:%.*]] = and <2 x i32> [[A:%.*]], <i32 11, i32 10>
39+
; CHECK-NEXT: [[AND2:%.*]] = and <2 x i32> [[A]], <i32 8, i32 2>
40+
; CHECK-NEXT: [[RET:%.*]] = sub nsw <2 x i32> [[AND1]], [[AND2]]
41+
; CHECK-NEXT: ret <2 x i32> [[RET]]
42+
;
43+
%and1 = and <2 x i32> %a, <i32 11, i32 10>
44+
%and2 = and <2 x i32> %a, <i32 8, i32 2>
45+
46+
%ret = sub <2 x i32> %and1, %and2
47+
ret <2 x i32> %ret
48+
}
49+
50+
define <2 x i32> @and_sub_vec_posion(<2 x i32> %a) {
51+
; CHECK-LABEL: @and_sub_vec_posion(
52+
; CHECK-NEXT: [[AND1:%.*]] = and <2 x i32> [[A:%.*]], <i32 11, i32 poison>
53+
; CHECK-NEXT: [[AND2:%.*]] = and <2 x i32> [[A]], <i32 poison, i32 2>
54+
; CHECK-NEXT: [[RET:%.*]] = sub nsw <2 x i32> [[AND1]], [[AND2]]
55+
; CHECK-NEXT: ret <2 x i32> [[RET]]
56+
;
57+
%and1 = and <2 x i32> %a, <i32 11, i32 poison>
58+
%and2 = and <2 x i32> %a, <i32 poison, i32 2>
59+
60+
%ret = sub <2 x i32> %and1, %and2
61+
ret <2 x i32> %ret
62+
}
63+
64+
define <2 x i32> @and_sub_vec_undef(<2 x i32> %a) {
65+
; CHECK-LABEL: @and_sub_vec_undef(
66+
; CHECK-NEXT: [[AND1:%.*]] = and <2 x i32> [[A:%.*]], <i32 11, i32 undef>
67+
; CHECK-NEXT: [[AND2:%.*]] = and <2 x i32> [[A]], <i32 undef, i32 2>
68+
; CHECK-NEXT: [[RET:%.*]] = sub <2 x i32> [[AND1]], [[AND2]]
69+
; CHECK-NEXT: ret <2 x i32> [[RET]]
70+
;
71+
%and1 = and <2 x i32> %a, <i32 11, i32 undef>
72+
%and2 = and <2 x i32> %a, <i32 undef, i32 2>
73+
74+
%ret = sub <2 x i32> %and1, %and2
75+
ret <2 x i32> %ret
76+
}
77+
78+
define i8 @and_sub_negtive(i8 %a) {
79+
; CHECK-LABEL: @and_sub_negtive(
80+
; CHECK-NEXT: [[AND1:%.*]] = and i8 [[A:%.*]], 10
81+
; CHECK-NEXT: [[AND2:%.*]] = and i8 [[A]], 9
82+
; CHECK-NEXT: [[RET:%.*]] = sub nsw i8 [[AND1]], [[AND2]]
83+
; CHECK-NEXT: ret i8 [[RET]]
84+
;
85+
%and1 = and i8 %a, 10
86+
%and2 = and i8 %a, 9
87+
88+
%ret = sub i8 %and1, %and2
89+
ret i8 %ret
90+
}

0 commit comments

Comments
 (0)