|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
|
2 |
| -; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s |
3 |
| -; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s |
4 |
| -; RUN: llc -mtriple=riscv32 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB |
5 |
| -; RUN: llc -mtriple=riscv64 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB |
| 2 | +; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV32 |
| 3 | +; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,RV64 |
| 4 | +; RUN: llc -mtriple=riscv32 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB,CHECK-ZVBB-RV32 |
| 5 | +; RUN: llc -mtriple=riscv64 -mattr=+v,+zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK-ZVBB,CHECK-ZVBB-RV64 |
6 | 6 |
|
7 | 7 | ; ==============================================================================
|
8 | 8 | ; i32 -> i64
|
@@ -499,6 +499,55 @@ define <16 x i16> @vwsll_vv_v16i16_zext(<16 x i8> %a, <16 x i8> %b) {
|
499 | 499 | }
|
500 | 500 |
|
501 | 501 | define <16 x i16> @vwsll_vx_i64_v16i16(<16 x i8> %a, i64 %b) {
|
| 502 | +; RV32-LABEL: vwsll_vx_i64_v16i16: |
| 503 | +; RV32: # %bb.0: |
| 504 | +; RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma |
| 505 | +; RV32-NEXT: vmv.v.x v16, a0 |
| 506 | +; RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma |
| 507 | +; RV32-NEXT: vrgather.vi v24, v16, 0 |
| 508 | +; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 509 | +; RV32-NEXT: vzext.vf2 v10, v8 |
| 510 | +; RV32-NEXT: vsetvli zero, zero, e32, m4, ta, ma |
| 511 | +; RV32-NEXT: vnsrl.wi v12, v24, 0 |
| 512 | +; RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 513 | +; RV32-NEXT: vnsrl.wi v8, v12, 0 |
| 514 | +; RV32-NEXT: vsll.vv v8, v10, v8 |
| 515 | +; RV32-NEXT: ret |
| 516 | +; |
| 517 | +; RV64-LABEL: vwsll_vx_i64_v16i16: |
| 518 | +; RV64: # %bb.0: |
| 519 | +; RV64-NEXT: vsetivli zero, 16, e64, m8, ta, ma |
| 520 | +; RV64-NEXT: vmv.v.x v16, a0 |
| 521 | +; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 522 | +; RV64-NEXT: vzext.vf2 v10, v8 |
| 523 | +; RV64-NEXT: vsetvli zero, zero, e32, m4, ta, ma |
| 524 | +; RV64-NEXT: vnsrl.wi v12, v16, 0 |
| 525 | +; RV64-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 526 | +; RV64-NEXT: vnsrl.wi v8, v12, 0 |
| 527 | +; RV64-NEXT: vsll.vv v8, v10, v8 |
| 528 | +; RV64-NEXT: ret |
| 529 | +; |
| 530 | +; CHECK-ZVBB-RV32-LABEL: vwsll_vx_i64_v16i16: |
| 531 | +; CHECK-ZVBB-RV32: # %bb.0: |
| 532 | +; CHECK-ZVBB-RV32-NEXT: vsetivli zero, 8, e64, m4, ta, ma |
| 533 | +; CHECK-ZVBB-RV32-NEXT: vmv.v.x v16, a0 |
| 534 | +; CHECK-ZVBB-RV32-NEXT: vsetivli zero, 16, e64, m8, ta, ma |
| 535 | +; CHECK-ZVBB-RV32-NEXT: vrgather.vi v24, v16, 0 |
| 536 | +; CHECK-ZVBB-RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 537 | +; CHECK-ZVBB-RV32-NEXT: vzext.vf2 v10, v8 |
| 538 | +; CHECK-ZVBB-RV32-NEXT: vsetvli zero, zero, e32, m4, ta, ma |
| 539 | +; CHECK-ZVBB-RV32-NEXT: vnsrl.wi v12, v24, 0 |
| 540 | +; CHECK-ZVBB-RV32-NEXT: vsetvli zero, zero, e16, m2, ta, ma |
| 541 | +; CHECK-ZVBB-RV32-NEXT: vnsrl.wi v8, v12, 0 |
| 542 | +; CHECK-ZVBB-RV32-NEXT: vsll.vv v8, v10, v8 |
| 543 | +; CHECK-ZVBB-RV32-NEXT: ret |
| 544 | +; |
| 545 | +; CHECK-ZVBB-RV64-LABEL: vwsll_vx_i64_v16i16: |
| 546 | +; CHECK-ZVBB-RV64: # %bb.0: |
| 547 | +; CHECK-ZVBB-RV64-NEXT: vsetivli zero, 16, e8, m1, ta, ma |
| 548 | +; CHECK-ZVBB-RV64-NEXT: vwsll.vx v10, v8, a0 |
| 549 | +; CHECK-ZVBB-RV64-NEXT: vmv2r.v v8, v10 |
| 550 | +; CHECK-ZVBB-RV64-NEXT: ret |
502 | 551 | %head = insertelement <8 x i64> poison, i64 %b, i32 0
|
503 | 552 | %splat = shufflevector <8 x i64> %head, <8 x i64> poison, <16 x i32> zeroinitializer
|
504 | 553 | %x = zext <16 x i8> %a to <16 x i16>
|
|
0 commit comments