xref: /llvm-project/llvm/test/CodeGen/RISCV/rvv/fixed-vectors-select-addsub.ll (revision a9ad601f7c5486919d6fabc5dd3cb6e96f63ac61)
1ce6e66ddSPhilip Reames; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2ce6e66ddSPhilip Reames; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s \
3ce6e66ddSPhilip Reames; RUN:   | FileCheck %s
4ce6e66ddSPhilip Reames; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s \
5ce6e66ddSPhilip Reames; RUN:   | FileCheck %s
6ce6e66ddSPhilip Reames
7ce6e66ddSPhilip Reames
8ce6e66ddSPhilip Reamesdefine <1 x i32> @select_addsub_v1i32(<1 x i1> %cc, <1 x i32> %a, <1 x i32> %b) {
9ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v1i32:
10ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
11ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 1, e32, mf2, ta, mu
12*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
13*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
14ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
15078dfd82SPhilip Reames  %sub = sub <1 x i32> %a, %b
16078dfd82SPhilip Reames  %add = add <1 x i32> %a, %b
17078dfd82SPhilip Reames  %res = select <1 x i1> %cc,  <1 x i32> %sub, <1 x i32> %add
18ce6e66ddSPhilip Reames  ret <1 x i32> %res
19ce6e66ddSPhilip Reames}
20ce6e66ddSPhilip Reames
21ce6e66ddSPhilip Reamesdefine <2 x i32> @select_addsub_v2i32(<2 x i1> %cc, <2 x i32> %a, <2 x i32> %b) {
22ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v2i32:
23ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
24ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 2, e32, mf2, ta, mu
25*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
26*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
27ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
28078dfd82SPhilip Reames  %sub = sub <2 x i32> %a, %b
29078dfd82SPhilip Reames  %add = add <2 x i32> %a, %b
30078dfd82SPhilip Reames  %res = select <2 x i1> %cc,  <2 x i32> %sub, <2 x i32> %add
31ce6e66ddSPhilip Reames  ret <2 x i32> %res
32ce6e66ddSPhilip Reames}
33ce6e66ddSPhilip Reames
34ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32(<4 x i1> %cc, <4 x i32> %a, <4 x i32> %b) {
35ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32:
36ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
37ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
38*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
39*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
40ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
41078dfd82SPhilip Reames  %sub = sub <4 x i32> %a, %b
42078dfd82SPhilip Reames  %add = add <4 x i32> %a, %b
43078dfd82SPhilip Reames  %res = select <4 x i1> %cc,  <4 x i32> %sub, <4 x i32> %add
44ce6e66ddSPhilip Reames  ret <4 x i32> %res
45ce6e66ddSPhilip Reames}
46ce6e66ddSPhilip Reames
47ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_select_swapped(<4 x i1> %cc, <4 x i32> %a, <4 x i32> %b) {
48ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_select_swapped:
49ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
50ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
51*a9ad601fSPhilip Reames; CHECK-NEXT:    vmnot.m v0, v0
52*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
53*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
54ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
55078dfd82SPhilip Reames  %sub = sub <4 x i32> %a, %b
56078dfd82SPhilip Reames  %add = add <4 x i32> %a, %b
57078dfd82SPhilip Reames  %res = select <4 x i1> %cc,  <4 x i32> %add, <4 x i32> %sub
58ce6e66ddSPhilip Reames  ret <4 x i32> %res
59ce6e66ddSPhilip Reames}
60ce6e66ddSPhilip Reames
61ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_add_swapped(<4 x i1> %cc, <4 x i32> %a, <4 x i32> %b) {
62ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_add_swapped:
63ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
64ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
65*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
66*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
67ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
68078dfd82SPhilip Reames  %sub = sub <4 x i32> %a, %b
69078dfd82SPhilip Reames  %add = add <4 x i32> %b, %a
70078dfd82SPhilip Reames  %res = select <4 x i1> %cc,  <4 x i32> %sub, <4 x i32> %add
71ce6e66ddSPhilip Reames  ret <4 x i32> %res
72ce6e66ddSPhilip Reames}
73ce6e66ddSPhilip Reames
74ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_both_swapped(<4 x i1> %cc, <4 x i32> %a, <4 x i32> %b) {
75ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_both_swapped:
76ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
77ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
78*a9ad601fSPhilip Reames; CHECK-NEXT:    vmnot.m v0, v0
79*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
80*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
81ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
82078dfd82SPhilip Reames  %sub = sub <4 x i32> %a, %b
83078dfd82SPhilip Reames  %add = add <4 x i32> %b, %a
84078dfd82SPhilip Reames  %res = select <4 x i1> %cc,  <4 x i32> %add, <4 x i32> %sub
85ce6e66ddSPhilip Reames  ret <4 x i32> %res
86ce6e66ddSPhilip Reames}
87ce6e66ddSPhilip Reames
88ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_sub_swapped(<4 x i1> %cc, <4 x i32> %a, <4 x i32> %b) {
89ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_sub_swapped:
90ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
91ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
92*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v8, v8, 0, v0.t
93*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v9, v8
94ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
95*a9ad601fSPhilip Reames  %sub = sub <4 x i32> %b, %a
96*a9ad601fSPhilip Reames  %add = add <4 x i32> %a, %b
97078dfd82SPhilip Reames  %res = select <4 x i1> %cc,  <4 x i32> %sub, <4 x i32> %add
98ce6e66ddSPhilip Reames  ret <4 x i32> %res
99ce6e66ddSPhilip Reames}
100ce6e66ddSPhilip Reames
101ce6e66ddSPhilip Reamesdefine <8 x i32> @select_addsub_v8i32(<8 x i1> %cc, <8 x i32> %a, <8 x i32> %b) {
102ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v8i32:
103ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
104ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 8, e32, m2, ta, mu
105*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v10, v10, 0, v0.t
106*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v10
107ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
108078dfd82SPhilip Reames  %sub = sub <8 x i32> %a, %b
109078dfd82SPhilip Reames  %add = add <8 x i32> %a, %b
110078dfd82SPhilip Reames  %res = select <8 x i1> %cc,  <8 x i32> %sub, <8 x i32> %add
111ce6e66ddSPhilip Reames  ret <8 x i32> %res
112ce6e66ddSPhilip Reames}
113ce6e66ddSPhilip Reames
114ce6e66ddSPhilip Reamesdefine <16 x i32> @select_addsub_v16i32(<16 x i1> %cc, <16 x i32> %a, <16 x i32> %b) {
115ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v16i32:
116ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
117ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 16, e32, m4, ta, mu
118*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v12, v12, 0, v0.t
119*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v12
120ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
121078dfd82SPhilip Reames  %sub = sub <16 x i32> %a, %b
122078dfd82SPhilip Reames  %add = add <16 x i32> %a, %b
123078dfd82SPhilip Reames  %res = select <16 x i1> %cc,  <16 x i32> %sub, <16 x i32> %add
124ce6e66ddSPhilip Reames  ret <16 x i32> %res
125ce6e66ddSPhilip Reames}
126ce6e66ddSPhilip Reames
127ce6e66ddSPhilip Reamesdefine <32 x i32> @select_addsub_v32i32(<32 x i1> %cc, <32 x i32> %a, <32 x i32> %b) {
128ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v32i32:
129ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
130ce6e66ddSPhilip Reames; CHECK-NEXT:    li a0, 32
131ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, mu
132*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v16, v16, 0, v0.t
133*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v16
134ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
135078dfd82SPhilip Reames  %sub = sub <32 x i32> %a, %b
136078dfd82SPhilip Reames  %add = add <32 x i32> %a, %b
137078dfd82SPhilip Reames  %res = select <32 x i1> %cc,  <32 x i32> %sub, <32 x i32> %add
138ce6e66ddSPhilip Reames  ret <32 x i32> %res
139ce6e66ddSPhilip Reames}
140ce6e66ddSPhilip Reames
141ce6e66ddSPhilip Reamesdefine <64 x i32> @select_addsub_v64i32(<64 x i1> %cc, <64 x i32> %a, <64 x i32> %b) {
142ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v64i32:
143ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
144ce6e66ddSPhilip Reames; CHECK-NEXT:    addi sp, sp, -16
145ce6e66ddSPhilip Reames; CHECK-NEXT:    .cfi_def_cfa_offset 16
146ce6e66ddSPhilip Reames; CHECK-NEXT:    csrr a1, vlenb
147ce6e66ddSPhilip Reames; CHECK-NEXT:    slli a1, a1, 3
148ce6e66ddSPhilip Reames; CHECK-NEXT:    sub sp, sp, a1
149*a9ad601fSPhilip Reames; CHECK-NEXT:    .cfi_escape 0x0f, 0x0d, 0x72, 0x00, 0x11, 0x10, 0x22, 0x11, 0x08, 0x92, 0xa2, 0x38, 0x00, 0x1e, 0x22 # sp + 16 + 8 * vlenb
150*a9ad601fSPhilip Reames; CHECK-NEXT:    addi a1, sp, 16
151ce6e66ddSPhilip Reames; CHECK-NEXT:    vs8r.v v16, (a1) # Unknown-size Folded Spill
152*a9ad601fSPhilip Reames; CHECK-NEXT:    vsetivli zero, 1, e8, m1, ta, ma
153*a9ad601fSPhilip Reames; CHECK-NEXT:    vmv8r.v v16, v8
154ce6e66ddSPhilip Reames; CHECK-NEXT:    li a1, 32
155ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
156*a9ad601fSPhilip Reames; CHECK-NEXT:    vle32.v v8, (a0)
157ce6e66ddSPhilip Reames; CHECK-NEXT:    addi a0, a0, 128
158ce6e66ddSPhilip Reames; CHECK-NEXT:    vle32.v v24, (a0)
159*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v8, v8, 0, v0.t
160ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e8, mf2, ta, ma
161ce6e66ddSPhilip Reames; CHECK-NEXT:    vslidedown.vi v0, v0, 4
162ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetvli zero, a1, e32, m8, ta, mu
163*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v16, v8
164*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v24, v24, 0, v0.t
165ce6e66ddSPhilip Reames; CHECK-NEXT:    addi a0, sp, 16
166*a9ad601fSPhilip Reames; CHECK-NEXT:    vl8r.v v16, (a0) # Unknown-size Folded Reload
167*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v16, v16, v24
168ce6e66ddSPhilip Reames; CHECK-NEXT:    csrr a0, vlenb
169ce6e66ddSPhilip Reames; CHECK-NEXT:    slli a0, a0, 3
170ce6e66ddSPhilip Reames; CHECK-NEXT:    add sp, sp, a0
171ce6e66ddSPhilip Reames; CHECK-NEXT:    .cfi_def_cfa sp, 16
172ce6e66ddSPhilip Reames; CHECK-NEXT:    addi sp, sp, 16
173ce6e66ddSPhilip Reames; CHECK-NEXT:    .cfi_def_cfa_offset 0
174ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
175078dfd82SPhilip Reames  %sub = sub <64 x i32> %a, %b
176078dfd82SPhilip Reames  %add = add <64 x i32> %a, %b
177078dfd82SPhilip Reames  %res = select <64 x i1> %cc,  <64 x i32> %sub, <64 x i32> %add
178ce6e66ddSPhilip Reames  ret <64 x i32> %res
179ce6e66ddSPhilip Reames}
180ce6e66ddSPhilip Reames
181ce6e66ddSPhilip Reamesdefine <8 x i64> @select_addsub_v8i64(<8 x i1> %cc, <8 x i64> %a, <8 x i64> %b) {
182ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v8i64:
183ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
184ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 8, e64, m4, ta, mu
185*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v12, v12, 0, v0.t
186*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v12
187ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
188078dfd82SPhilip Reames  %sub = sub <8 x i64> %a, %b
189078dfd82SPhilip Reames  %add = add <8 x i64> %a, %b
190078dfd82SPhilip Reames  %res = select <8 x i1> %cc,  <8 x i64> %sub, <8 x i64> %add
191ce6e66ddSPhilip Reames  ret <8 x i64> %res
192ce6e66ddSPhilip Reames}
193ce6e66ddSPhilip Reames
194ce6e66ddSPhilip Reamesdefine <8 x i16> @select_addsub_v8i16(<8 x i1> %cc, <8 x i16> %a, <8 x i16> %b) {
195ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v8i16:
196ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
197ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, mu
198*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
199*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
200ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
201078dfd82SPhilip Reames  %sub = sub <8 x i16> %a, %b
202078dfd82SPhilip Reames  %add = add <8 x i16> %a, %b
203078dfd82SPhilip Reames  %res = select <8 x i1> %cc,  <8 x i16> %sub, <8 x i16> %add
204ce6e66ddSPhilip Reames  ret <8 x i16> %res
205ce6e66ddSPhilip Reames}
206ce6e66ddSPhilip Reames
207ce6e66ddSPhilip Reamesdefine <8 x i8> @select_addsub_v8i8(<8 x i1> %cc, <8 x i8> %a, <8 x i8> %b) {
208ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v8i8:
209ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
210ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
211*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
212*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
213ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
214078dfd82SPhilip Reames  %sub = sub <8 x i8> %a, %b
215078dfd82SPhilip Reames  %add = add <8 x i8> %a, %b
216078dfd82SPhilip Reames  %res = select <8 x i1> %cc,  <8 x i8> %sub, <8 x i8> %add
217ce6e66ddSPhilip Reames  ret <8 x i8> %res
218ce6e66ddSPhilip Reames}
219ce6e66ddSPhilip Reames
220ce6e66ddSPhilip Reamesdefine <8 x i1> @select_addsub_v8i1(<8 x i1> %cc, <8 x i1> %a, <8 x i1> %b) {
221ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v8i1:
222ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
223ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, ma
224ce6e66ddSPhilip Reames; CHECK-NEXT:    vmxor.mm v0, v8, v9
225ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
226078dfd82SPhilip Reames  %sub = sub <8 x i1> %a, %b
227078dfd82SPhilip Reames  %add = add <8 x i1> %a, %b
228078dfd82SPhilip Reames  %res = select <8 x i1> %cc,  <8 x i1> %sub, <8 x i1> %add
229ce6e66ddSPhilip Reames  ret <8 x i1> %res
230ce6e66ddSPhilip Reames}
231ce6e66ddSPhilip Reames
232ce6e66ddSPhilip Reamesdefine <8 x i2> @select_addsub_v8i2(<8 x i1> %cc, <8 x i2> %a, <8 x i2> %b) {
233ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v8i2:
234ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
235ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 8, e8, mf2, ta, mu
236*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
237*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
238ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
239078dfd82SPhilip Reames  %sub = sub <8 x i2> %a, %b
240078dfd82SPhilip Reames  %add = add <8 x i2> %a, %b
241078dfd82SPhilip Reames  %res = select <8 x i1> %cc,  <8 x i2> %sub, <8 x i2> %add
242ce6e66ddSPhilip Reames  ret <8 x i2> %res
243ce6e66ddSPhilip Reames}
244ce6e66ddSPhilip Reames
245ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_constmask(<4 x i32> %a, <4 x i32> %b) {
246ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_constmask:
247ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
248ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
249ce6e66ddSPhilip Reames; CHECK-NEXT:    vmv.v.i v0, 5
250*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
251*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
252ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
253078dfd82SPhilip Reames  %sub = sub <4 x i32> %a, %b
254078dfd82SPhilip Reames  %add = add <4 x i32> %a, %b
255078dfd82SPhilip Reames  %res = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>,  <4 x i32> %sub, <4 x i32> %add
256ce6e66ddSPhilip Reames  ret <4 x i32> %res
257ce6e66ddSPhilip Reames}
258ce6e66ddSPhilip Reames
259ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_constmask2(<4 x i32> %a, <4 x i32> %b) {
260ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_constmask2:
261ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
262ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
263*a9ad601fSPhilip Reames; CHECK-NEXT:    vmv.v.i v0, 10
264*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v8, v8, 0, v0.t
265*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v9, v8
266ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
267*a9ad601fSPhilip Reames  %sub = sub <4 x i32> %b, %a
268*a9ad601fSPhilip Reames  %add = add <4 x i32> %a, %b
269*a9ad601fSPhilip Reames  %res = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>,  <4 x i32> %add, <4 x i32> %sub
270ce6e66ddSPhilip Reames  ret <4 x i32> %res
271ce6e66ddSPhilip Reames}
272ce6e66ddSPhilip Reames
273ce6e66ddSPhilip Reames; Same pattern as above, but the select is disguised as a shuffle
274ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_as_shuffle(<4 x i32> %a, <4 x i32> %b) {
275ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_as_shuffle:
276ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
277ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
278ce6e66ddSPhilip Reames; CHECK-NEXT:    vmv.v.i v0, 5
279*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v9, v9, 0, v0.t
280*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v8, v9
281ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
282078dfd82SPhilip Reames  %sub = sub <4 x i32> %a, %b
283078dfd82SPhilip Reames  %add = add <4 x i32> %a, %b
284078dfd82SPhilip Reames  %res = shufflevector <4 x i32> %sub, <4 x i32> %add, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
285ce6e66ddSPhilip Reames  ret <4 x i32> %res
286ce6e66ddSPhilip Reames}
287ce6e66ddSPhilip Reames
288ce6e66ddSPhilip Reames; Same pattern as above, but the select is disguised as a shuffle
289ce6e66ddSPhilip Reamesdefine <4 x i32> @select_addsub_v4i32_as_shuffle2(<4 x i32> %a, <4 x i32> %b) {
290ce6e66ddSPhilip Reames; CHECK-LABEL: select_addsub_v4i32_as_shuffle2:
291ce6e66ddSPhilip Reames; CHECK:       # %bb.0:
292ce6e66ddSPhilip Reames; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, mu
293*a9ad601fSPhilip Reames; CHECK-NEXT:    vmv.v.i v0, 10
294*a9ad601fSPhilip Reames; CHECK-NEXT:    vrsub.vi v8, v8, 0, v0.t
295*a9ad601fSPhilip Reames; CHECK-NEXT:    vadd.vv v8, v9, v8
296ce6e66ddSPhilip Reames; CHECK-NEXT:    ret
297078dfd82SPhilip Reames  %sub = sub <4 x i32> %b, %a
298078dfd82SPhilip Reames  %add = add <4 x i32> %a, %b
299*a9ad601fSPhilip Reames  %res = shufflevector <4 x i32> %add, <4 x i32> %sub, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
300ce6e66ddSPhilip Reames  ret <4 x i32> %res
301ce6e66ddSPhilip Reames}
302