Bump version to 19.1.0-rc3
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / rvv-peephole-vmerge-masked-vops.ll
blobd26fd0ca26c729a448f43aa5e501091511e119d2
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc < %s -mtriple=riscv64 -mattr=+v | FileCheck %s
4 declare <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i64);
5 declare <vscale x 2 x float> @llvm.riscv.vmerge.nxv2f32.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i64);
7 define <vscale x 2 x i32> @vpmerge_vadd(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %vl) {
8 ; CHECK-LABEL: vpmerge_vadd:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
11 ; CHECK-NEXT:    vadd.vv v8, v9, v10, v0.t
12 ; CHECK-NEXT:    ret
13   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %vl, i64 1)
14   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
15   ret <vscale x 2 x i32> %b
17 declare <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i64, i64)
19 define <vscale x 2 x i32> @vpmerge_vsub(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %vl) {
20 ; CHECK-LABEL: vpmerge_vsub:
21 ; CHECK:       # %bb.0:
22 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
23 ; CHECK-NEXT:    vsub.vv v8, v9, v10, v0.t
24 ; CHECK-NEXT:    ret
25   %a = call <vscale x 2 x i32> @llvm.riscv.vsub.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %vl, i64 1)
26   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
27   ret <vscale x 2 x i32> %b
29 declare <vscale x 2 x i32> @llvm.riscv.vsub.mask.nxv2i32.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i32>, <vscale x 2 x i1>, i64, i64)
31 define <vscale x 2 x float> @vpmerge_vfadd(<vscale x 2 x float> %passthru, <vscale x 2 x float> %x, <vscale x 2 x float> %y, <vscale x 2 x i1> %m, i64 %vl) {
32 ; CHECK-LABEL: vpmerge_vfadd:
33 ; CHECK:       # %bb.0:
34 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
35 ; CHECK-NEXT:    vfadd.vv v8, v9, v10, v0.t
36 ; CHECK-NEXT:    ret
37   %a = call <vscale x 2 x float> @llvm.riscv.vfadd.mask.nxv2f32.nxv2f32(<vscale x 2 x float> %passthru, <vscale x 2 x float> %x, <vscale x 2 x float> %y, <vscale x 2 x i1> %m, i64 7, i64 %vl, i64 1)
38   %b = call <vscale x 2 x float> @llvm.riscv.vmerge.nxv2f32.nxv2f32(<vscale x 2 x float> %passthru, <vscale x 2 x float> %passthru, <vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
40   ret <vscale x 2 x float> %b
42 declare <vscale x 2 x float> @llvm.riscv.vfadd.mask.nxv2f32.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i64, i64, i64)
44 define <vscale x 2 x float> @vpmerge_vfsub(<vscale x 2 x float> %passthru, <vscale x 2 x float> %x, <vscale x 2 x float> %y, <vscale x 2 x i1> %m, i64 %vl) {
45 ; CHECK-LABEL: vpmerge_vfsub:
46 ; CHECK:       # %bb.0:
47 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
48 ; CHECK-NEXT:    vfsub.vv v8, v9, v10, v0.t
49 ; CHECK-NEXT:    ret
50   %a = call <vscale x 2 x float> @llvm.riscv.vfsub.mask.nxv2f32.nxv2f32(<vscale x 2 x float> %passthru, <vscale x 2 x float> %x, <vscale x 2 x float> %y, <vscale x 2 x i1> %m, i64 7, i64 %vl, i64 1)
51   %b = call <vscale x 2 x float> @llvm.riscv.vmerge.nxv2f32.nxv2f32(<vscale x 2 x float> %passthru, <vscale x 2 x float> %passthru, <vscale x 2 x float> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
52   ret <vscale x 2 x float> %b
54 declare <vscale x 2 x float> @llvm.riscv.vfsub.mask.nxv2f32.nxv2f32(<vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x float>, <vscale x 2 x i1>, i64, i64, i64)
56 define <vscale x 2 x i32> @vpmerge_vwadd(<vscale x 2 x i32> %passthru, <vscale x 2 x i16> %x, <vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i64 %vl) {
57 ; CHECK-LABEL: vpmerge_vwadd:
58 ; CHECK:       # %bb.0:
59 ; CHECK-NEXT:    vsetvli zero, a0, e16, mf2, tu, mu
60 ; CHECK-NEXT:    vwadd.vv v8, v9, v10, v0.t
61 ; CHECK-NEXT:    ret
62   %a = call <vscale x 2 x i32> @llvm.riscv.vwadd.mask.nxv2i32.nxv2i16.nxv2i16(<vscale x 2 x i32> %passthru, <vscale x 2 x i16> %x, <vscale x 2 x i16> %y, <vscale x 2 x i1> %m, i64 %vl, i64 1)
63   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
64   ret <vscale x 2 x i32> %b
66 declare <vscale x 2 x i32> @llvm.riscv.vwadd.mask.nxv2i32.nxv2i16.nxv2i16(<vscale x 2 x i32>, <vscale x 2 x i16>, <vscale x 2 x i16>, <vscale x 2 x i1>, i64, i64)
68 define <vscale x 2 x i32> @vpmerge_vle(<vscale x 2 x i32> %passthru, ptr %p, <vscale x 2 x i1> %m, i64 %vl) {
69 ; CHECK-LABEL: vpmerge_vle:
70 ; CHECK:       # %bb.0:
71 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
72 ; CHECK-NEXT:    vle32.v v8, (a0), v0.t
73 ; CHECK-NEXT:    ret
74   %a = call <vscale x 2 x i32> @llvm.riscv.vle.mask.nxv2i32(
75     <vscale x 2 x i32> %passthru,
76     ptr %p,
77     <vscale x 2 x i1> %m,
78     i64 %vl, i64 1)
79   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
80   ret <vscale x 2 x i32> %b
82 declare <vscale x 2 x i32> @llvm.riscv.vle.mask.nxv2i32(<vscale x 2 x i32>, ptr, <vscale x 2 x i1>, i64, i64)
84 declare <vscale x 2 x i32> @llvm.riscv.vslideup.mask.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, i64, <vscale x 2 x i1>, i64, i64)
85 define <vscale x 2 x i32> @vpmerge_vslideup(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i64 %x, <vscale x 2 x i1> %m, i64 %vl) {
86 ; CHECK-LABEL: vpmerge_vslideup:
87 ; CHECK:       # %bb.0:
88 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
89 ; CHECK-NEXT:    vslideup.vx v8, v9, a0, v0.t
90 ; CHECK-NEXT:    ret
91   %a = call <vscale x 2 x i32> @llvm.riscv.vslideup.mask.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i64 %x, <vscale x 2 x i1> %m, i64 %vl, i64 0)
92   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
93   ret <vscale x 2 x i32> %b
96 declare <vscale x 2 x i32> @llvm.riscv.vslidedown.mask.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, i64, <vscale x 2 x i1>, i64, i64)
97 define <vscale x 2 x i32> @vpmerge_vslidedown(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i64 %x, <vscale x 2 x i1> %m, i64 %vl) {
98 ; CHECK-LABEL: vpmerge_vslidedown:
99 ; CHECK:       # %bb.0:
100 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
101 ; CHECK-NEXT:    vslidedown.vx v8, v9, a0, v0.t
102 ; CHECK-NEXT:    ret
103   %a = call <vscale x 2 x i32> @llvm.riscv.vslidedown.mask.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i64 %x, <vscale x 2 x i1> %m, i64 %vl, i64 0)
104   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
105   ret <vscale x 2 x i32> %b
108 declare <vscale x 2 x i32> @llvm.riscv.vslide1up.mask.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, i32, <vscale x 2 x i1>, i64, i64)
109 define <vscale x 2 x i32> @vpmerge_vslide1up(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i32 %x, <vscale x 2 x i1> %m, i64 %vl) {
110 ; CHECK-LABEL: vpmerge_vslide1up:
111 ; CHECK:       # %bb.0:
112 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
113 ; CHECK-NEXT:    vslide1up.vx v8, v9, a0, v0.t
114 ; CHECK-NEXT:    ret
115   %a = call <vscale x 2 x i32> @llvm.riscv.vslide1up.mask.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i32 %x, <vscale x 2 x i1> %m, i64 %vl, i64 0)
116   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
117   ret <vscale x 2 x i32> %b
120 declare <vscale x 2 x i32> @llvm.riscv.vslide1down.mask.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i32>, i32, <vscale x 2 x i1>, i64, i64)
121 define <vscale x 2 x i32> @vpmerge_vslide1down(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i32 %x, <vscale x 2 x i1> %m, i64 %vl) {
122 ; CHECK-LABEL: vpmerge_vslide1down:
123 ; CHECK:       # %bb.0:
124 ; CHECK-NEXT:    vsetvli zero, a1, e32, m1, tu, mu
125 ; CHECK-NEXT:    vslide1down.vx v8, v9, a0, v0.t
126 ; CHECK-NEXT:    ret
127   %a = call <vscale x 2 x i32> @llvm.riscv.vslide1down.mask.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %v, i32 %x, <vscale x 2 x i1> %m, i64 %vl, i64 0)
128   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %vl)
129   ret <vscale x 2 x i32> %b
132 ; Tests for folding vmerge into its ops when their VLs differ
134 ; Can fold with VL=2
135 define <vscale x 2 x i32> @vmerge_smaller_vl_same_passthru(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m) {
136 ; CHECK-LABEL: vmerge_smaller_vl_same_passthru:
137 ; CHECK:       # %bb.0:
138 ; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, mu
139 ; CHECK-NEXT:    vadd.vv v8, v9, v10, v0.t
140 ; CHECK-NEXT:    ret
141   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 3, i64 0)
142   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 2)
143   ret <vscale x 2 x i32> %b
146 ; Can fold with VL=2
147 define <vscale x 2 x i32> @vmerge_larger_vl_same_passthru(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m) {
148 ; CHECK-LABEL: vmerge_larger_vl_same_passthru:
149 ; CHECK:       # %bb.0:
150 ; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, mu
151 ; CHECK-NEXT:    vadd.vv v8, v9, v10, v0.t
152 ; CHECK-NEXT:    ret
153   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 2, i64 0)
154   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 3)
155   ret <vscale x 2 x i32> %b
158 ; Can fold with VL=2
159 define <vscale x 2 x i32> @vmerge_smaller_vl_different_passthru(<vscale x 2 x i32> %pt1, <vscale x 2 x i32> %pt2, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m) {
160 ; CHECK-LABEL: vmerge_smaller_vl_different_passthru:
161 ; CHECK:       # %bb.0:
162 ; CHECK-NEXT:    vsetivli zero, 3, e32, m1, tu, mu
163 ; CHECK-NEXT:    vadd.vv v8, v10, v11, v0.t
164 ; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, ma
165 ; CHECK-NEXT:    vmv.v.v v9, v8
166 ; CHECK-NEXT:    vmv1r.v v8, v9
167 ; CHECK-NEXT:    ret
168   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %pt1, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 3, i64 0)
169   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %pt2, <vscale x 2 x i32> %pt2, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 2)
170   ret <vscale x 2 x i32> %b
173 ; Can't fold this because we need to take elements from both %pt1 and %pt2
174 define <vscale x 2 x i32> @vmerge_larger_vl_different_passthru(<vscale x 2 x i32> %pt1, <vscale x 2 x i32> %pt2, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m) {
175 ; CHECK-LABEL: vmerge_larger_vl_different_passthru:
176 ; CHECK:       # %bb.0:
177 ; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, mu
178 ; CHECK-NEXT:    vadd.vv v8, v10, v11, v0.t
179 ; CHECK-NEXT:    vsetivli zero, 3, e32, m1, tu, ma
180 ; CHECK-NEXT:    vmv.v.v v9, v8
181 ; CHECK-NEXT:    vmv1r.v v8, v9
182 ; CHECK-NEXT:    ret
183   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %pt1, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 2, i64 0)
184   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %pt2, <vscale x 2 x i32> %pt2, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 3)
185   ret <vscale x 2 x i32> %b
188 ; Can fold with VL=2
189 define <vscale x 2 x i32> @vmerge_smaller_vl_poison_passthru(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m) {
190 ; CHECK-LABEL: vmerge_smaller_vl_poison_passthru:
191 ; CHECK:       # %bb.0:
192 ; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, mu
193 ; CHECK-NEXT:    vadd.vv v8, v9, v10, v0.t
194 ; CHECK-NEXT:    ret
195   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> poison, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 3, i64 0)
196   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 2)
197   ret <vscale x 2 x i32> %b
200 ; Can fold with VL=2
201 define <vscale x 2 x i32> @vmerge_larger_vl_poison_passthru(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m) {
202 ; CHECK-LABEL: vmerge_larger_vl_poison_passthru:
203 ; CHECK:       # %bb.0:
204 ; CHECK-NEXT:    vsetivli zero, 2, e32, m1, tu, mu
205 ; CHECK-NEXT:    vadd.vv v8, v9, v10, v0.t
206 ; CHECK-NEXT:    ret
207   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> poison, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 2, i64 0)
208   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 3)
209   ret <vscale x 2 x i32> %b
212 ; Test VFCVT_RM
213 declare <vscale x 2 x float> @llvm.floor.nxv2f32(<vscale x 2 x float>)
214 declare <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1>, <vscale x 2 x i32>, <vscale x 2 x i32>, i32)
215 define <vscale x 2 x i32> @vmerge_vfcvt_rm(<vscale x 2 x i32> %passthru, <vscale x 2 x float> %a, <vscale x 2 x i1> %m, i32 zeroext %evl) {
216 ; CHECK-LABEL: vmerge_vfcvt_rm:
217 ; CHECK:       # %bb.0: # %entry
218 ; CHECK-NEXT:    fsrmi a1, 2
219 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
220 ; CHECK-NEXT:    vfcvt.x.f.v v8, v9, v0.t
221 ; CHECK-NEXT:    fsrm a1
222 ; CHECK-NEXT:    ret
223 entry:
224   %floor = call <vscale x 2 x float> @llvm.floor.nxv2f32(<vscale x 2 x float> %a)
225   %i = fptosi <vscale x 2 x float> %floor to <vscale x 2 x i32>
226   %res = call <vscale x 2 x i32> @llvm.vp.merge.nxv2i32(<vscale x 2 x i1> %m, <vscale x 2 x i32> %i, <vscale x 2 x i32> %passthru, i32 %evl)
227   ret <vscale x 2 x i32> %res
230 ; Test VIOTA_M
231 declare <vscale x 2 x i32> @llvm.riscv.viota.mask.nxv2i32(<vscale x 2 x i32>, <vscale x 2 x i1>,  <vscale x 2 x i1>, i64, i64)
232 define <vscale x 2 x i32> @vpmerge_viota(<vscale x 2 x i32> %passthru, <vscale x 2 x i1> %m, <vscale x 2 x i1> %vm, i32 zeroext %vl) {
233 ; CHECK-LABEL: vpmerge_viota:
234 ; CHECK:       # %bb.0:
235 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
236 ; CHECK-NEXT:    viota.m v8, v9, v0.t
237 ; CHECK-NEXT:    ret
238   %1 = zext i32 %vl to i64
239   %a = call <vscale x 2 x i32> @llvm.riscv.viota.mask.nxv2i32(<vscale x 2 x i32> undef, <vscale x 2 x i1> %vm, <vscale x 2 x i1> %m, i64 %1, i64 0)
240   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> splat (i1 -1), i64 %1)
241   ret <vscale x 2 x i32> %b
244 define <vscale x 2 x i32> @vpmerge_vadd_same_mask(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %vl) {
245 ; CHECK-LABEL: vpmerge_vadd_same_mask:
246 ; CHECK:       # %bb.0:
247 ; CHECK-NEXT:    vsetvli zero, a0, e32, m1, tu, mu
248 ; CHECK-NEXT:    vadd.vv v8, v9, v10, v0.t
249 ; CHECK-NEXT:    ret
250   %a = call <vscale x 2 x i32> @llvm.riscv.vadd.mask.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %x, <vscale x 2 x i32> %y, <vscale x 2 x i1> %m, i64 %vl, i64 1)
251   %b = call <vscale x 2 x i32> @llvm.riscv.vmerge.nxv2i32.nxv2i32(<vscale x 2 x i32> %passthru, <vscale x 2 x i32> %passthru, <vscale x 2 x i32> %a, <vscale x 2 x i1> %m, i64 %vl)
252   ret <vscale x 2 x i32> %b