|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
2 | 2 | ; RUN: llc -mtriple=riscv32 -mattr=+d,+zfh,+zvfh,+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32
|
3 | 3 | ; RUN: llc -mtriple=riscv64 -mattr=+d,+zfh,+zvfh,+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64
|
| 4 | +; RUN: llc -mtriple=riscv32 -mattr=+d,+zvfhmin,+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 |
| 5 | +; RUN: llc -mtriple=riscv64 -mattr=+d,+zvfhmin,+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 |
4 | 6 |
|
5 | 7 | define <4 x half> @shuffle_v4f16(<4 x half> %x, <4 x half> %y) {
|
6 | 8 | ; CHECK-LABEL: shuffle_v4f16:
|
@@ -262,6 +264,51 @@ define <8 x double> @splice_binary2(<8 x double> %x, <8 x double> %y) {
|
262 | 264 | %s = shufflevector <8 x double> %x, <8 x double> %y, <8 x i32> <i32 13, i32 14, i32 15, i32 0, i32 1, i32 2, i32 3, i32 4>
|
263 | 265 | ret <8 x double> %s
|
264 | 266 | }
|
| 267 | + |
| 268 | +define <4 x half> @vrgather_permute_shuffle_vu_v4f16(<4 x half> %x) { |
| 269 | +; CHECK-LABEL: vrgather_permute_shuffle_vu_v4f16: |
| 270 | +; CHECK: # %bb.0: |
| 271 | +; CHECK-NEXT: lui a0, 4096 |
| 272 | +; CHECK-NEXT: addi a0, a0, 513 |
| 273 | +; CHECK-NEXT: vsetivli zero, 4, e32, m1, ta, ma |
| 274 | +; CHECK-NEXT: vmv.s.x v9, a0 |
| 275 | +; CHECK-NEXT: vsetvli zero, zero, e16, mf2, ta, ma |
| 276 | +; CHECK-NEXT: vsext.vf2 v10, v9 |
| 277 | +; CHECK-NEXT: vrgather.vv v9, v8, v10 |
| 278 | +; CHECK-NEXT: vmv1r.v v8, v9 |
| 279 | +; CHECK-NEXT: ret |
| 280 | + %s = shufflevector <4 x half> %x, <4 x half> poison, <4 x i32> <i32 1, i32 2, i32 0, i32 1> |
| 281 | + ret <4 x half> %s |
| 282 | +} |
| 283 | + |
| 284 | +define <4 x half> @vrgather_shuffle_vv_v4f16(<4 x half> %x, <4 x half> %y) { |
| 285 | +; CHECK-LABEL: vrgather_shuffle_vv_v4f16: |
| 286 | +; CHECK: # %bb.0: |
| 287 | +; CHECK-NEXT: lui a0, %hi(.LCPI21_0) |
| 288 | +; CHECK-NEXT: addi a0, a0, %lo(.LCPI21_0) |
| 289 | +; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, mu |
| 290 | +; CHECK-NEXT: vle16.v v11, (a0) |
| 291 | +; CHECK-NEXT: vmv.v.i v0, 8 |
| 292 | +; CHECK-NEXT: vrgather.vv v10, v8, v11 |
| 293 | +; CHECK-NEXT: vrgather.vi v10, v9, 1, v0.t |
| 294 | +; CHECK-NEXT: vmv1r.v v8, v10 |
| 295 | +; CHECK-NEXT: ret |
| 296 | + %s = shufflevector <4 x half> %x, <4 x half> %y, <4 x i32> <i32 1, i32 2, i32 0, i32 5> |
| 297 | + ret <4 x half> %s |
| 298 | +} |
| 299 | + |
| 300 | +define <4 x half> @vrgather_shuffle_vx_v4f16_load(ptr %p) { |
| 301 | +; CHECK-LABEL: vrgather_shuffle_vx_v4f16_load: |
| 302 | +; CHECK: # %bb.0: |
| 303 | +; CHECK-NEXT: addi a0, a0, 2 |
| 304 | +; CHECK-NEXT: vsetivli zero, 4, e16, mf2, ta, ma |
| 305 | +; CHECK-NEXT: vlse16.v v8, (a0), zero |
| 306 | +; CHECK-NEXT: ret |
| 307 | + %v = load <4 x half>, ptr %p |
| 308 | + %s = shufflevector <4 x half> %v, <4 x half> undef, <4 x i32> <i32 1, i32 1, i32 1, i32 1> |
| 309 | + ret <4 x half> %s |
| 310 | +} |
| 311 | + |
265 | 312 | ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
|
266 | 313 | ; RV32: {{.*}}
|
267 | 314 | ; RV64: {{.*}}
|
0 commit comments