Skip to content

Commit d506897

Browse files
committed
add tests
1 parent 177ce19 commit d506897

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -passes=instcombine -S | FileCheck %s
3+
4+
define i32 @select_of_symmetric_selects(i32 %a, i32 %b, i1 %c1, i1 %c2) {
5+
; CHECK-LABEL: @select_of_symmetric_selects(
6+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
7+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], i32 [[B]], i32 [[A]]
8+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL1]], i32 [[SEL2]]
9+
; CHECK-NEXT: ret i32 [[RET]]
10+
;
11+
%sel1 = select i1 %c1, i32 %a, i32 %b
12+
%sel2 = select i1 %c1, i32 %b, i32 %a
13+
%ret = select i1 %c2, i32 %sel1, i32 %sel2
14+
ret i32 %ret
15+
}
16+
17+
define i32 @select_of_symmetric_selects_negative1(i32 %a, i32 %b, i1 %c1, i1 %c2) {
18+
; CHECK-LABEL: @select_of_symmetric_selects_negative1(
19+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
20+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL1]], i32 [[A]]
21+
; CHECK-NEXT: ret i32 [[RET]]
22+
;
23+
%sel1 = select i1 %c1, i32 %a, i32 %b
24+
%sel2 = select i1 %c2, i32 %b, i32 %a
25+
%ret = select i1 %c2, i32 %sel1, i32 %sel2
26+
ret i32 %ret
27+
}
28+
29+
define i32 @select_of_symmetric_selects_negative2(i32 %a, i32 %b, i32 %c, i1 %c1, i1 %c2) {
30+
; CHECK-LABEL: @select_of_symmetric_selects_negative2(
31+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
32+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], i32 [[B]], i32 [[C:%.*]]
33+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL1]], i32 [[SEL2]]
34+
; CHECK-NEXT: ret i32 [[RET]]
35+
;
36+
%sel1 = select i1 %c1, i32 %a, i32 %b
37+
%sel2 = select i1 %c1, i32 %b, i32 %c
38+
%ret = select i1 %c2, i32 %sel1, i32 %sel2
39+
ret i32 %ret
40+
}
41+
42+
declare void @use(i32)
43+
44+
define i32 @select_of_symmetric_selects_multi_use1(i32 %a, i32 %b, i1 %c1, i1 %c2) {
45+
; CHECK-LABEL: @select_of_symmetric_selects_multi_use1(
46+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
47+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], i32 [[B]], i32 [[A]]
48+
; CHECK-NEXT: call void @use(i32 [[SEL2]])
49+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL1]], i32 [[SEL2]]
50+
; CHECK-NEXT: ret i32 [[RET]]
51+
;
52+
%sel1 = select i1 %c1, i32 %a, i32 %b
53+
%sel2 = select i1 %c1, i32 %b, i32 %a
54+
call void @use(i32 %sel2)
55+
%ret = select i1 %c2, i32 %sel1, i32 %sel2
56+
ret i32 %ret
57+
}
58+
59+
define i32 @select_of_symmetric_selects_multi_use2(i32 %a, i32 %b, i1 %c1, i1 %c2) {
60+
; CHECK-LABEL: @select_of_symmetric_selects_multi_use2(
61+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
62+
; CHECK-NEXT: call void @use(i32 [[SEL1]])
63+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], i32 [[B]], i32 [[A]]
64+
; CHECK-NEXT: call void @use(i32 [[SEL2]])
65+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL1]], i32 [[SEL2]]
66+
; CHECK-NEXT: ret i32 [[RET]]
67+
;
68+
%sel1 = select i1 %c1, i32 %a, i32 %b
69+
call void @use(i32 %sel1)
70+
%sel2 = select i1 %c1, i32 %b, i32 %a
71+
call void @use(i32 %sel2)
72+
%ret = select i1 %c2, i32 %sel1, i32 %sel2
73+
ret i32 %ret
74+
}
75+
76+
define i32 @select_of_symmetric_selects_commuted(i32 %a, i32 %b, i1 %c1, i1 %c2) {
77+
; CHECK-LABEL: @select_of_symmetric_selects_commuted(
78+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], i32 [[A:%.*]], i32 [[B:%.*]]
79+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], i32 [[B]], i32 [[A]]
80+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], i32 [[SEL2]], i32 [[SEL1]]
81+
; CHECK-NEXT: ret i32 [[RET]]
82+
;
83+
%sel1 = select i1 %c1, i32 %a, i32 %b
84+
%sel2 = select i1 %c1, i32 %b, i32 %a
85+
%ret = select i1 %c2, i32 %sel2, i32 %sel1
86+
ret i32 %ret
87+
}
88+
89+
define <4 x i32> @select_of_symmetric_selects_vector1(<4 x i32> %a, <4 x i32> %b, i1 %c1, i1 %c2) {
90+
; CHECK-LABEL: @select_of_symmetric_selects_vector1(
91+
; CHECK-NEXT: [[SEL1:%.*]] = select i1 [[C1:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]
92+
; CHECK-NEXT: [[SEL2:%.*]] = select i1 [[C1]], <4 x i32> [[B]], <4 x i32> [[A]]
93+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], <4 x i32> [[SEL2]], <4 x i32> [[SEL1]]
94+
; CHECK-NEXT: ret <4 x i32> [[RET]]
95+
;
96+
%sel1 = select i1 %c1, <4 x i32> %a, <4 x i32> %b
97+
%sel2 = select i1 %c1, <4 x i32> %b, <4 x i32> %a
98+
%ret = select i1 %c2, <4 x i32> %sel2, <4 x i32> %sel1
99+
ret <4 x i32> %ret
100+
}
101+
102+
define <4 x i32> @select_of_symmetric_selects_vector2(<4 x i32> %a, <4 x i32> %b, <4 x i1> %c1, <4 x i1> %c2) {
103+
; CHECK-LABEL: @select_of_symmetric_selects_vector2(
104+
; CHECK-NEXT: [[SEL1:%.*]] = select <4 x i1> [[C1:%.*]], <4 x i32> [[A:%.*]], <4 x i32> [[B:%.*]]
105+
; CHECK-NEXT: [[SEL2:%.*]] = select <4 x i1> [[C1]], <4 x i32> [[B]], <4 x i32> [[A]]
106+
; CHECK-NEXT: [[RET:%.*]] = select <4 x i1> [[C2:%.*]], <4 x i32> [[SEL2]], <4 x i32> [[SEL1]]
107+
; CHECK-NEXT: ret <4 x i32> [[RET]]
108+
;
109+
%sel1 = select <4 x i1> %c1, <4 x i32> %a, <4 x i32> %b
110+
%sel2 = select <4 x i1> %c1, <4 x i32> %b, <4 x i32> %a
111+
%ret = select <4 x i1> %c2, <4 x i32> %sel2, <4 x i32> %sel1
112+
ret <4 x i32> %ret
113+
}
114+
115+
define <2 x i32> @select_of_symmetric_selects_vector3(<2 x i32> %a, <2 x i32> %b, <2 x i1> %c1, i1 %c2) {
116+
; CHECK-LABEL: @select_of_symmetric_selects_vector3(
117+
; CHECK-NEXT: [[SEL1:%.*]] = select <2 x i1> [[C1:%.*]], <2 x i32> [[A:%.*]], <2 x i32> [[B:%.*]]
118+
; CHECK-NEXT: [[SEL2:%.*]] = select <2 x i1> [[C1]], <2 x i32> [[B]], <2 x i32> [[A]]
119+
; CHECK-NEXT: [[RET:%.*]] = select i1 [[C2:%.*]], <2 x i32> [[SEL1]], <2 x i32> [[SEL2]]
120+
; CHECK-NEXT: ret <2 x i32> [[RET]]
121+
;
122+
%sel1 = select <2 x i1> %c1, <2 x i32> %a, <2 x i32> %b
123+
%sel2 = select <2 x i1> %c1, <2 x i32> %b, <2 x i32> %a
124+
%ret = select i1 %c2, <2 x i32> %sel1, <2 x i32> %sel2
125+
ret <2 x i32> %ret
126+
}

0 commit comments

Comments
 (0)