Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / vfrsub-vp.ll
blobbd941dc1a77724dd93936d94d476ea9f62d3371f
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -target-abi=ilp32d \
3 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
4 ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -target-abi=lp64d \
5 ; RUN:     -verify-machineinstrs < %s | FileCheck %s
7 declare <vscale x 1 x half> @llvm.vp.fsub.nxv1f16(<vscale x 1 x half>, <vscale x 1 x half>, <vscale x 1 x i1>, i32)
9 define <vscale x 1 x half> @vfrsub_vf_nxv1f16(<vscale x 1 x half> %va, half %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
10 ; CHECK-LABEL: vfrsub_vf_nxv1f16:
11 ; CHECK:       # %bb.0:
12 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
13 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
14 ; CHECK-NEXT:    ret
15   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
16   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
17   %v = call <vscale x 1 x half> @llvm.vp.fsub.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x i1> %m, i32 %evl)
18   ret <vscale x 1 x half> %v
21 define <vscale x 1 x half> @vfrsub_vf_nxv1f16_unmasked(<vscale x 1 x half> %va, half %b, i32 zeroext %evl) {
22 ; CHECK-LABEL: vfrsub_vf_nxv1f16_unmasked:
23 ; CHECK:       # %bb.0:
24 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf4, ta, ma
25 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
26 ; CHECK-NEXT:    ret
27   %elt.head = insertelement <vscale x 1 x half> poison, half %b, i32 0
28   %vb = shufflevector <vscale x 1 x half> %elt.head, <vscale x 1 x half> poison, <vscale x 1 x i32> zeroinitializer
29   %v = call <vscale x 1 x half> @llvm.vp.fsub.nxv1f16(<vscale x 1 x half> %vb, <vscale x 1 x half> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
30   ret <vscale x 1 x half> %v
33 declare <vscale x 2 x half> @llvm.vp.fsub.nxv2f16(<vscale x 2 x half>, <vscale x 2 x half>, <vscale x 2 x i1>, i32)
35 define <vscale x 2 x half> @vfrsub_vf_nxv2f16(<vscale x 2 x half> %va, half %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
36 ; CHECK-LABEL: vfrsub_vf_nxv2f16:
37 ; CHECK:       # %bb.0:
38 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
39 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
40 ; CHECK-NEXT:    ret
41   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
42   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
43   %v = call <vscale x 2 x half> @llvm.vp.fsub.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x i1> %m, i32 %evl)
44   ret <vscale x 2 x half> %v
47 define <vscale x 2 x half> @vfrsub_vf_nxv2f16_unmasked(<vscale x 2 x half> %va, half %b, i32 zeroext %evl) {
48 ; CHECK-LABEL: vfrsub_vf_nxv2f16_unmasked:
49 ; CHECK:       # %bb.0:
50 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, ta, ma
51 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
52 ; CHECK-NEXT:    ret
53   %elt.head = insertelement <vscale x 2 x half> poison, half %b, i32 0
54   %vb = shufflevector <vscale x 2 x half> %elt.head, <vscale x 2 x half> poison, <vscale x 2 x i32> zeroinitializer
55   %v = call <vscale x 2 x half> @llvm.vp.fsub.nxv2f16(<vscale x 2 x half> %vb, <vscale x 2 x half> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
56   ret <vscale x 2 x half> %v
59 declare <vscale x 4 x half> @llvm.vp.fsub.nxv4f16(<vscale x 4 x half>, <vscale x 4 x half>, <vscale x 4 x i1>, i32)
61 define <vscale x 4 x half> @vfrsub_vf_nxv4f16(<vscale x 4 x half> %va, half %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
62 ; CHECK-LABEL: vfrsub_vf_nxv4f16:
63 ; CHECK:       # %bb.0:
64 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
65 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
66 ; CHECK-NEXT:    ret
67   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
68   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
69   %v = call <vscale x 4 x half> @llvm.vp.fsub.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x i1> %m, i32 %evl)
70   ret <vscale x 4 x half> %v
73 define <vscale x 4 x half> @vfrsub_vf_nxv4f16_unmasked(<vscale x 4 x half> %va, half %b, i32 zeroext %evl) {
74 ; CHECK-LABEL: vfrsub_vf_nxv4f16_unmasked:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    vsetvli zero, a0, e16, m1, ta, ma
77 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
78 ; CHECK-NEXT:    ret
79   %elt.head = insertelement <vscale x 4 x half> poison, half %b, i32 0
80   %vb = shufflevector <vscale x 4 x half> %elt.head, <vscale x 4 x half> poison, <vscale x 4 x i32> zeroinitializer
81   %v = call <vscale x 4 x half> @llvm.vp.fsub.nxv4f16(<vscale x 4 x half> %vb, <vscale x 4 x half> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
82   ret <vscale x 4 x half> %v
85 declare <vscale x 8 x half> @llvm.vp.fsub.nxv8f16(<vscale x 8 x half>, <vscale x 8 x half>, <vscale x 8 x i1>, i32)
87 define <vscale x 8 x half> @vfrsub_vf_nxv8f16(<vscale x 8 x half> %va, half %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
88 ; CHECK-LABEL: vfrsub_vf_nxv8f16:
89 ; CHECK:       # %bb.0:
90 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
91 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
92 ; CHECK-NEXT:    ret
93   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
94   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
95   %v = call <vscale x 8 x half> @llvm.vp.fsub.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x i1> %m, i32 %evl)
96   ret <vscale x 8 x half> %v
99 define <vscale x 8 x half> @vfrsub_vf_nxv8f16_unmasked(<vscale x 8 x half> %va, half %b, i32 zeroext %evl) {
100 ; CHECK-LABEL: vfrsub_vf_nxv8f16_unmasked:
101 ; CHECK:       # %bb.0:
102 ; CHECK-NEXT:    vsetvli zero, a0, e16, m2, ta, ma
103 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
104 ; CHECK-NEXT:    ret
105   %elt.head = insertelement <vscale x 8 x half> poison, half %b, i32 0
106   %vb = shufflevector <vscale x 8 x half> %elt.head, <vscale x 8 x half> poison, <vscale x 8 x i32> zeroinitializer
107   %v = call <vscale x 8 x half> @llvm.vp.fsub.nxv8f16(<vscale x 8 x half> %vb, <vscale x 8 x half> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
108   ret <vscale x 8 x half> %v
111 declare <vscale x 16 x half> @llvm.vp.fsub.nxv16f16(<vscale x 16 x half>, <vscale x 16 x half>, <vscale x 16 x i1>, i32)
113 define <vscale x 16 x half> @vfrsub_vf_nxv16f16(<vscale x 16 x half> %va, half %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
114 ; CHECK-LABEL: vfrsub_vf_nxv16f16:
115 ; CHECK:       # %bb.0:
116 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
117 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
118 ; CHECK-NEXT:    ret
119   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
120   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
121   %v = call <vscale x 16 x half> @llvm.vp.fsub.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x i1> %m, i32 %evl)
122   ret <vscale x 16 x half> %v
125 define <vscale x 16 x half> @vfrsub_vf_nxv16f16_unmasked(<vscale x 16 x half> %va, half %b, i32 zeroext %evl) {
126 ; CHECK-LABEL: vfrsub_vf_nxv16f16_unmasked:
127 ; CHECK:       # %bb.0:
128 ; CHECK-NEXT:    vsetvli zero, a0, e16, m4, ta, ma
129 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
130 ; CHECK-NEXT:    ret
131   %elt.head = insertelement <vscale x 16 x half> poison, half %b, i32 0
132   %vb = shufflevector <vscale x 16 x half> %elt.head, <vscale x 16 x half> poison, <vscale x 16 x i32> zeroinitializer
133   %v = call <vscale x 16 x half> @llvm.vp.fsub.nxv16f16(<vscale x 16 x half> %vb, <vscale x 16 x half> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
134   ret <vscale x 16 x half> %v
137 declare <vscale x 32 x half> @llvm.vp.fsub.nxv32f16(<vscale x 32 x half>, <vscale x 32 x half>, <vscale x 32 x i1>, i32)
139 define <vscale x 32 x half> @vfrsub_vf_nxv32f16(<vscale x 32 x half> %va, half %b, <vscale x 32 x i1> %m, i32 zeroext %evl) {
140 ; CHECK-LABEL: vfrsub_vf_nxv32f16:
141 ; CHECK:       # %bb.0:
142 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
143 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
144 ; CHECK-NEXT:    ret
145   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
146   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
147   %v = call <vscale x 32 x half> @llvm.vp.fsub.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x i1> %m, i32 %evl)
148   ret <vscale x 32 x half> %v
151 define <vscale x 32 x half> @vfrsub_vf_nxv32f16_unmasked(<vscale x 32 x half> %va, half %b, i32 zeroext %evl) {
152 ; CHECK-LABEL: vfrsub_vf_nxv32f16_unmasked:
153 ; CHECK:       # %bb.0:
154 ; CHECK-NEXT:    vsetvli zero, a0, e16, m8, ta, ma
155 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
156 ; CHECK-NEXT:    ret
157   %elt.head = insertelement <vscale x 32 x half> poison, half %b, i32 0
158   %vb = shufflevector <vscale x 32 x half> %elt.head, <vscale x 32 x half> poison, <vscale x 32 x i32> zeroinitializer
159   %v = call <vscale x 32 x half> @llvm.vp.fsub.nxv32f16(<vscale x 32 x half> %vb, <vscale x 32 x half> %va, <vscale x 32 x i1> splat (i1 true), i32 %evl)
160   ret <vscale x 32 x half> %v
163 declare <vscale x 1 x float> @llvm.vp.fsub.nxv1f32(<vscale x 1 x float>, <vscale x 1 x float>, <vscale x 1 x i1>, i32)
165 define <vscale x 1 x float> @vfrsub_vf_nxv1f32(<vscale x 1 x float> %va, float %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
166 ; CHECK-LABEL: vfrsub_vf_nxv1f32:
167 ; CHECK:       # %bb.0:
168 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
169 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
170 ; CHECK-NEXT:    ret
171   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
172   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
173   %v = call <vscale x 1 x float> @llvm.vp.fsub.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x i1> %m, i32 %evl)
174   ret <vscale x 1 x float> %v
177 define <vscale x 1 x float> @vfrsub_vf_nxv1f32_unmasked(<vscale x 1 x float> %va, float %b, i32 zeroext %evl) {
178 ; CHECK-LABEL: vfrsub_vf_nxv1f32_unmasked:
179 ; CHECK:       # %bb.0:
180 ; CHECK-NEXT:    vsetvli zero, a0, e32, mf2, ta, ma
181 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
182 ; CHECK-NEXT:    ret
183   %elt.head = insertelement <vscale x 1 x float> poison, float %b, i32 0
184   %vb = shufflevector <vscale x 1 x float> %elt.head, <vscale x 1 x float> poison, <vscale x 1 x i32> zeroinitializer
185   %v = call <vscale x 1 x float> @llvm.vp.fsub.nxv1f32(<vscale x 1 x float> %vb, <vscale x 1 x float> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
186   ret <vscale x 1 x float> %v
189 declare <vscale x 2 x float> @llvm.vp.fsub.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i32)
191 define <vscale x 2 x float> @vfrsub_vf_nxv2f32(<vscale x 2 x float> %va, float %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
192 ; CHECK-LABEL: vfrsub_vf_nxv2f32:
193 ; CHECK:       # %bb.0:
194 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
195 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
196 ; CHECK-NEXT:    ret
197   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
198   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
199   %v = call <vscale x 2 x float> @llvm.vp.fsub.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x i1> %m, i32 %evl)
200   ret <vscale x 2 x float> %v
203 define <vscale x 2 x float> @vfrsub_vf_nxv2f32_unmasked(<vscale x 2 x float> %va, float %b, i32 zeroext %evl) {
204 ; CHECK-LABEL: vfrsub_vf_nxv2f32_unmasked:
205 ; CHECK:       # %bb.0:
206 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, ta, ma
207 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
208 ; CHECK-NEXT:    ret
209   %elt.head = insertelement <vscale x 2 x float> poison, float %b, i32 0
210   %vb = shufflevector <vscale x 2 x float> %elt.head, <vscale x 2 x float> poison, <vscale x 2 x i32> zeroinitializer
211   %v = call <vscale x 2 x float> @llvm.vp.fsub.nxv2f32(<vscale x 2 x float> %vb, <vscale x 2 x float> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
212   ret <vscale x 2 x float> %v
215 declare <vscale x 4 x float> @llvm.vp.fsub.nxv4f32(<vscale x 4 x float>, <vscale x 4 x float>, <vscale x 4 x i1>, i32)
217 define <vscale x 4 x float> @vfrsub_vf_nxv4f32(<vscale x 4 x float> %va, float %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
218 ; CHECK-LABEL: vfrsub_vf_nxv4f32:
219 ; CHECK:       # %bb.0:
220 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
221 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
222 ; CHECK-NEXT:    ret
223   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
224   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
225   %v = call <vscale x 4 x float> @llvm.vp.fsub.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x i1> %m, i32 %evl)
226   ret <vscale x 4 x float> %v
229 define <vscale x 4 x float> @vfrsub_vf_nxv4f32_unmasked(<vscale x 4 x float> %va, float %b, i32 zeroext %evl) {
230 ; CHECK-LABEL: vfrsub_vf_nxv4f32_unmasked:
231 ; CHECK:       # %bb.0:
232 ; CHECK-NEXT:    vsetvli zero, a0, e32, m2, ta, ma
233 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
234 ; CHECK-NEXT:    ret
235   %elt.head = insertelement <vscale x 4 x float> poison, float %b, i32 0
236   %vb = shufflevector <vscale x 4 x float> %elt.head, <vscale x 4 x float> poison, <vscale x 4 x i32> zeroinitializer
237   %v = call <vscale x 4 x float> @llvm.vp.fsub.nxv4f32(<vscale x 4 x float> %vb, <vscale x 4 x float> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
238   ret <vscale x 4 x float> %v
241 declare <vscale x 8 x float> @llvm.vp.fsub.nxv8f32(<vscale x 8 x float>, <vscale x 8 x float>, <vscale x 8 x i1>, i32)
243 define <vscale x 8 x float> @vfrsub_vf_nxv8f32(<vscale x 8 x float> %va, float %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
244 ; CHECK-LABEL: vfrsub_vf_nxv8f32:
245 ; CHECK:       # %bb.0:
246 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
247 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
248 ; CHECK-NEXT:    ret
249   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
250   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
251   %v = call <vscale x 8 x float> @llvm.vp.fsub.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x i1> %m, i32 %evl)
252   ret <vscale x 8 x float> %v
255 define <vscale x 8 x float> @vfrsub_vf_nxv8f32_unmasked(<vscale x 8 x float> %va, float %b, i32 zeroext %evl) {
256 ; CHECK-LABEL: vfrsub_vf_nxv8f32_unmasked:
257 ; CHECK:       # %bb.0:
258 ; CHECK-NEXT:    vsetvli zero, a0, e32, m4, ta, ma
259 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
260 ; CHECK-NEXT:    ret
261   %elt.head = insertelement <vscale x 8 x float> poison, float %b, i32 0
262   %vb = shufflevector <vscale x 8 x float> %elt.head, <vscale x 8 x float> poison, <vscale x 8 x i32> zeroinitializer
263   %v = call <vscale x 8 x float> @llvm.vp.fsub.nxv8f32(<vscale x 8 x float> %vb, <vscale x 8 x float> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
264   ret <vscale x 8 x float> %v
267 declare <vscale x 16 x float> @llvm.vp.fsub.nxv16f32(<vscale x 16 x float>, <vscale x 16 x float>, <vscale x 16 x i1>, i32)
269 define <vscale x 16 x float> @vfrsub_vf_nxv16f32(<vscale x 16 x float> %va, float %b, <vscale x 16 x i1> %m, i32 zeroext %evl) {
270 ; CHECK-LABEL: vfrsub_vf_nxv16f32:
271 ; CHECK:       # %bb.0:
272 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
273 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
274 ; CHECK-NEXT:    ret
275   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
276   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
277   %v = call <vscale x 16 x float> @llvm.vp.fsub.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x i1> %m, i32 %evl)
278   ret <vscale x 16 x float> %v
281 define <vscale x 16 x float> @vfrsub_vf_nxv16f32_unmasked(<vscale x 16 x float> %va, float %b, i32 zeroext %evl) {
282 ; CHECK-LABEL: vfrsub_vf_nxv16f32_unmasked:
283 ; CHECK:       # %bb.0:
284 ; CHECK-NEXT:    vsetvli zero, a0, e32, m8, ta, ma
285 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
286 ; CHECK-NEXT:    ret
287   %elt.head = insertelement <vscale x 16 x float> poison, float %b, i32 0
288   %vb = shufflevector <vscale x 16 x float> %elt.head, <vscale x 16 x float> poison, <vscale x 16 x i32> zeroinitializer
289   %v = call <vscale x 16 x float> @llvm.vp.fsub.nxv16f32(<vscale x 16 x float> %vb, <vscale x 16 x float> %va, <vscale x 16 x i1> splat (i1 true), i32 %evl)
290   ret <vscale x 16 x float> %v
293 declare <vscale x 1 x double> @llvm.vp.fsub.nxv1f64(<vscale x 1 x double>, <vscale x 1 x double>, <vscale x 1 x i1>, i32)
295 define <vscale x 1 x double> @vfrsub_vf_nxv1f64(<vscale x 1 x double> %va, double %b, <vscale x 1 x i1> %m, i32 zeroext %evl) {
296 ; CHECK-LABEL: vfrsub_vf_nxv1f64:
297 ; CHECK:       # %bb.0:
298 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
299 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
300 ; CHECK-NEXT:    ret
301   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
302   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
303   %v = call <vscale x 1 x double> @llvm.vp.fsub.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x i1> %m, i32 %evl)
304   ret <vscale x 1 x double> %v
307 define <vscale x 1 x double> @vfrsub_vf_nxv1f64_unmasked(<vscale x 1 x double> %va, double %b, i32 zeroext %evl) {
308 ; CHECK-LABEL: vfrsub_vf_nxv1f64_unmasked:
309 ; CHECK:       # %bb.0:
310 ; CHECK-NEXT:    vsetvli zero, a0, e64, m1, ta, ma
311 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
312 ; CHECK-NEXT:    ret
313   %elt.head = insertelement <vscale x 1 x double> poison, double %b, i32 0
314   %vb = shufflevector <vscale x 1 x double> %elt.head, <vscale x 1 x double> poison, <vscale x 1 x i32> zeroinitializer
315   %v = call <vscale x 1 x double> @llvm.vp.fsub.nxv1f64(<vscale x 1 x double> %vb, <vscale x 1 x double> %va, <vscale x 1 x i1> splat (i1 true), i32 %evl)
316   ret <vscale x 1 x double> %v
319 declare <vscale x 2 x double> @llvm.vp.fsub.nxv2f64(<vscale x 2 x double>, <vscale x 2 x double>, <vscale x 2 x i1>, i32)
321 define <vscale x 2 x double> @vfrsub_vf_nxv2f64(<vscale x 2 x double> %va, double %b, <vscale x 2 x i1> %m, i32 zeroext %evl) {
322 ; CHECK-LABEL: vfrsub_vf_nxv2f64:
323 ; CHECK:       # %bb.0:
324 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
325 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
326 ; CHECK-NEXT:    ret
327   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
328   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
329   %v = call <vscale x 2 x double> @llvm.vp.fsub.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x i1> %m, i32 %evl)
330   ret <vscale x 2 x double> %v
333 define <vscale x 2 x double> @vfrsub_vf_nxv2f64_unmasked(<vscale x 2 x double> %va, double %b, i32 zeroext %evl) {
334 ; CHECK-LABEL: vfrsub_vf_nxv2f64_unmasked:
335 ; CHECK:       # %bb.0:
336 ; CHECK-NEXT:    vsetvli zero, a0, e64, m2, ta, ma
337 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
338 ; CHECK-NEXT:    ret
339   %elt.head = insertelement <vscale x 2 x double> poison, double %b, i32 0
340   %vb = shufflevector <vscale x 2 x double> %elt.head, <vscale x 2 x double> poison, <vscale x 2 x i32> zeroinitializer
341   %v = call <vscale x 2 x double> @llvm.vp.fsub.nxv2f64(<vscale x 2 x double> %vb, <vscale x 2 x double> %va, <vscale x 2 x i1> splat (i1 true), i32 %evl)
342   ret <vscale x 2 x double> %v
345 declare <vscale x 4 x double> @llvm.vp.fsub.nxv4f64(<vscale x 4 x double>, <vscale x 4 x double>, <vscale x 4 x i1>, i32)
347 define <vscale x 4 x double> @vfrsub_vf_nxv4f64(<vscale x 4 x double> %va, double %b, <vscale x 4 x i1> %m, i32 zeroext %evl) {
348 ; CHECK-LABEL: vfrsub_vf_nxv4f64:
349 ; CHECK:       # %bb.0:
350 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
351 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
352 ; CHECK-NEXT:    ret
353   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
354   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
355   %v = call <vscale x 4 x double> @llvm.vp.fsub.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x i1> %m, i32 %evl)
356   ret <vscale x 4 x double> %v
359 define <vscale x 4 x double> @vfrsub_vf_nxv4f64_unmasked(<vscale x 4 x double> %va, double %b, i32 zeroext %evl) {
360 ; CHECK-LABEL: vfrsub_vf_nxv4f64_unmasked:
361 ; CHECK:       # %bb.0:
362 ; CHECK-NEXT:    vsetvli zero, a0, e64, m4, ta, ma
363 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
364 ; CHECK-NEXT:    ret
365   %elt.head = insertelement <vscale x 4 x double> poison, double %b, i32 0
366   %vb = shufflevector <vscale x 4 x double> %elt.head, <vscale x 4 x double> poison, <vscale x 4 x i32> zeroinitializer
367   %v = call <vscale x 4 x double> @llvm.vp.fsub.nxv4f64(<vscale x 4 x double> %vb, <vscale x 4 x double> %va, <vscale x 4 x i1> splat (i1 true), i32 %evl)
368   ret <vscale x 4 x double> %v
371 declare <vscale x 8 x double> @llvm.vp.fsub.nxv8f64(<vscale x 8 x double>, <vscale x 8 x double>, <vscale x 8 x i1>, i32)
373 define <vscale x 8 x double> @vfrsub_vf_nxv8f64(<vscale x 8 x double> %va, double %b, <vscale x 8 x i1> %m, i32 zeroext %evl) {
374 ; CHECK-LABEL: vfrsub_vf_nxv8f64:
375 ; CHECK:       # %bb.0:
376 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
377 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0, v0.t
378 ; CHECK-NEXT:    ret
379   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
380   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
381   %v = call <vscale x 8 x double> @llvm.vp.fsub.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x i1> %m, i32 %evl)
382   ret <vscale x 8 x double> %v
385 define <vscale x 8 x double> @vfrsub_vf_nxv8f64_unmasked(<vscale x 8 x double> %va, double %b, i32 zeroext %evl) {
386 ; CHECK-LABEL: vfrsub_vf_nxv8f64_unmasked:
387 ; CHECK:       # %bb.0:
388 ; CHECK-NEXT:    vsetvli zero, a0, e64, m8, ta, ma
389 ; CHECK-NEXT:    vfrsub.vf v8, v8, fa0
390 ; CHECK-NEXT:    ret
391   %elt.head = insertelement <vscale x 8 x double> poison, double %b, i32 0
392   %vb = shufflevector <vscale x 8 x double> %elt.head, <vscale x 8 x double> poison, <vscale x 8 x i32> zeroinitializer
393   %v = call <vscale x 8 x double> @llvm.vp.fsub.nxv8f64(<vscale x 8 x double> %vb, <vscale x 8 x double> %va, <vscale x 8 x i1> splat (i1 true), i32 %evl)
394   ret <vscale x 8 x double> %v