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