@@ -1,8 +1,8 @@
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV32
; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,CHECK-RV64
; RUN: llc -mtriple=riscv32 -mattr=+v,+experimental-zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes =CHECK-ZVBB,CHECK-ZVBB32
; RUN: llc -mtriple=riscv64 -mattr=+v,+experimental-zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefixes =CHECK-ZVBB,CHECK-ZVBB64
; RUN: llc -mtriple=riscv32 -mattr=+v,+experimental-zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefix =CHECK-ZVBB
; RUN: llc -mtriple=riscv64 -mattr=+v,+experimental-zvbb -verify-machineinstrs < %s | FileCheck %s --check-prefix =CHECK-ZVBB
declare <vscale x 1 x i8 > @llvm.fshl.nxv1i8 (<vscale x 1 x i8 >, <vscale x 1 x i8 >, <vscale x 1 x i8 >)
Expand Down
Expand Up
@@ -942,21 +942,15 @@ define <vscale x 1 x i64> @vrol_vv_nxv1i64(<vscale x 1 x i64> %a, <vscale x 1 x
define <vscale x 1 x i64 > @vrol_vx_nxv1i64 (<vscale x 1 x i64 > %a , i64 %b ) {
; CHECK-RV32-LABEL: vrol_vx_nxv1i64:
; CHECK-RV32: # %bb.0:
; CHECK-RV32-NEXT: addi sp, sp, -16
; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
; CHECK-RV32-NEXT: sw a1, 12(sp)
; CHECK-RV32-NEXT: sw a0, 8(sp)
; CHECK-RV32-NEXT: addi a0, sp, 8
; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
; CHECK-RV32-NEXT: vlse64.v v9, (a0), zero
; CHECK-RV32-NEXT: vmv.v.x v9, a0
; CHECK-RV32-NEXT: li a0, 63
; CHECK-RV32-NEXT: vand.vx v10, v9, a0
; CHECK-RV32-NEXT: vsll.vv v10, v8, v10
; CHECK-RV32-NEXT: vrsub.vi v9, v9, 0
; CHECK-RV32-NEXT: vand.vx v9, v9, a0
; CHECK-RV32-NEXT: vsrl.vv v8, v8, v9
; CHECK-RV32-NEXT: vor.vv v8, v10, v8
; CHECK-RV32-NEXT: addi sp, sp, 16
; CHECK-RV32-NEXT: ret
;
; CHECK-RV64-LABEL: vrol_vx_nxv1i64:
Expand All
@@ -970,24 +964,11 @@ define <vscale x 1 x i64> @vrol_vx_nxv1i64(<vscale x 1 x i64> %a, i64 %b) {
; CHECK-RV64-NEXT: vor.vv v8, v9, v8
; CHECK-RV64-NEXT: ret
;
; CHECK-ZVBB32-LABEL: vrol_vx_nxv1i64:
; CHECK-ZVBB32: # %bb.0:
; CHECK-ZVBB32-NEXT: addi sp, sp, -16
; CHECK-ZVBB32-NEXT: .cfi_def_cfa_offset 16
; CHECK-ZVBB32-NEXT: sw a1, 12(sp)
; CHECK-ZVBB32-NEXT: sw a0, 8(sp)
; CHECK-ZVBB32-NEXT: addi a0, sp, 8
; CHECK-ZVBB32-NEXT: vsetvli a1, zero, e64, m1, ta, ma
; CHECK-ZVBB32-NEXT: vlse64.v v9, (a0), zero
; CHECK-ZVBB32-NEXT: vrol.vv v8, v8, v9
; CHECK-ZVBB32-NEXT: addi sp, sp, 16
; CHECK-ZVBB32-NEXT: ret
;
; CHECK-ZVBB64-LABEL: vrol_vx_nxv1i64:
; CHECK-ZVBB64: # %bb.0:
; CHECK-ZVBB64-NEXT: vsetvli a1, zero, e64, m1, ta, ma
; CHECK-ZVBB64-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB64-NEXT: ret
; CHECK-ZVBB-LABEL: vrol_vx_nxv1i64:
; CHECK-ZVBB: # %bb.0:
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e64, m1, ta, ma
; CHECK-ZVBB-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB-NEXT: ret
%b.head = insertelement <vscale x 1 x i64 > poison, i64 %b , i32 0
%b.splat = shufflevector <vscale x 1 x i64 > %b.head , <vscale x 1 x i64 > poison, <vscale x 1 x i32 > zeroinitializer
%x = call <vscale x 1 x i64 > @llvm.fshl.nxv1i64 (<vscale x 1 x i64 > %a , <vscale x 1 x i64 > %a , <vscale x 1 x i64 > %b.splat )
Expand Down
Expand Up
@@ -1021,21 +1002,15 @@ define <vscale x 2 x i64> @vrol_vv_nxv2i64(<vscale x 2 x i64> %a, <vscale x 2 x
define <vscale x 2 x i64 > @vrol_vx_nxv2i64 (<vscale x 2 x i64 > %a , i64 %b ) {
; CHECK-RV32-LABEL: vrol_vx_nxv2i64:
; CHECK-RV32: # %bb.0:
; CHECK-RV32-NEXT: addi sp, sp, -16
; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
; CHECK-RV32-NEXT: sw a1, 12(sp)
; CHECK-RV32-NEXT: sw a0, 8(sp)
; CHECK-RV32-NEXT: addi a0, sp, 8
; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
; CHECK-RV32-NEXT: vlse64.v v10, (a0), zero
; CHECK-RV32-NEXT: vmv.v.x v10, a0
; CHECK-RV32-NEXT: li a0, 63
; CHECK-RV32-NEXT: vand.vx v12, v10, a0
; CHECK-RV32-NEXT: vsll.vv v12, v8, v12
; CHECK-RV32-NEXT: vrsub.vi v10, v10, 0
; CHECK-RV32-NEXT: vand.vx v10, v10, a0
; CHECK-RV32-NEXT: vsrl.vv v8, v8, v10
; CHECK-RV32-NEXT: vor.vv v8, v12, v8
; CHECK-RV32-NEXT: addi sp, sp, 16
; CHECK-RV32-NEXT: ret
;
; CHECK-RV64-LABEL: vrol_vx_nxv2i64:
Expand All
@@ -1049,24 +1024,11 @@ define <vscale x 2 x i64> @vrol_vx_nxv2i64(<vscale x 2 x i64> %a, i64 %b) {
; CHECK-RV64-NEXT: vor.vv v8, v10, v8
; CHECK-RV64-NEXT: ret
;
; CHECK-ZVBB32-LABEL: vrol_vx_nxv2i64:
; CHECK-ZVBB32: # %bb.0:
; CHECK-ZVBB32-NEXT: addi sp, sp, -16
; CHECK-ZVBB32-NEXT: .cfi_def_cfa_offset 16
; CHECK-ZVBB32-NEXT: sw a1, 12(sp)
; CHECK-ZVBB32-NEXT: sw a0, 8(sp)
; CHECK-ZVBB32-NEXT: addi a0, sp, 8
; CHECK-ZVBB32-NEXT: vsetvli a1, zero, e64, m2, ta, ma
; CHECK-ZVBB32-NEXT: vlse64.v v10, (a0), zero
; CHECK-ZVBB32-NEXT: vrol.vv v8, v8, v10
; CHECK-ZVBB32-NEXT: addi sp, sp, 16
; CHECK-ZVBB32-NEXT: ret
;
; CHECK-ZVBB64-LABEL: vrol_vx_nxv2i64:
; CHECK-ZVBB64: # %bb.0:
; CHECK-ZVBB64-NEXT: vsetvli a1, zero, e64, m2, ta, ma
; CHECK-ZVBB64-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB64-NEXT: ret
; CHECK-ZVBB-LABEL: vrol_vx_nxv2i64:
; CHECK-ZVBB: # %bb.0:
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e64, m2, ta, ma
; CHECK-ZVBB-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB-NEXT: ret
%b.head = insertelement <vscale x 2 x i64 > poison, i64 %b , i32 0
%b.splat = shufflevector <vscale x 2 x i64 > %b.head , <vscale x 2 x i64 > poison, <vscale x 2 x i32 > zeroinitializer
%x = call <vscale x 2 x i64 > @llvm.fshl.nxv2i64 (<vscale x 2 x i64 > %a , <vscale x 2 x i64 > %a , <vscale x 2 x i64 > %b.splat )
Expand Down
Expand Up
@@ -1100,21 +1062,15 @@ define <vscale x 4 x i64> @vrol_vv_nxv4i64(<vscale x 4 x i64> %a, <vscale x 4 x
define <vscale x 4 x i64 > @vrol_vx_nxv4i64 (<vscale x 4 x i64 > %a , i64 %b ) {
; CHECK-RV32-LABEL: vrol_vx_nxv4i64:
; CHECK-RV32: # %bb.0:
; CHECK-RV32-NEXT: addi sp, sp, -16
; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
; CHECK-RV32-NEXT: sw a1, 12(sp)
; CHECK-RV32-NEXT: sw a0, 8(sp)
; CHECK-RV32-NEXT: addi a0, sp, 8
; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
; CHECK-RV32-NEXT: vlse64.v v12, (a0), zero
; CHECK-RV32-NEXT: vmv.v.x v12, a0
; CHECK-RV32-NEXT: li a0, 63
; CHECK-RV32-NEXT: vand.vx v16, v12, a0
; CHECK-RV32-NEXT: vsll.vv v16, v8, v16
; CHECK-RV32-NEXT: vrsub.vi v12, v12, 0
; CHECK-RV32-NEXT: vand.vx v12, v12, a0
; CHECK-RV32-NEXT: vsrl.vv v8, v8, v12
; CHECK-RV32-NEXT: vor.vv v8, v16, v8
; CHECK-RV32-NEXT: addi sp, sp, 16
; CHECK-RV32-NEXT: ret
;
; CHECK-RV64-LABEL: vrol_vx_nxv4i64:
Expand All
@@ -1128,24 +1084,11 @@ define <vscale x 4 x i64> @vrol_vx_nxv4i64(<vscale x 4 x i64> %a, i64 %b) {
; CHECK-RV64-NEXT: vor.vv v8, v12, v8
; CHECK-RV64-NEXT: ret
;
; CHECK-ZVBB32-LABEL: vrol_vx_nxv4i64:
; CHECK-ZVBB32: # %bb.0:
; CHECK-ZVBB32-NEXT: addi sp, sp, -16
; CHECK-ZVBB32-NEXT: .cfi_def_cfa_offset 16
; CHECK-ZVBB32-NEXT: sw a1, 12(sp)
; CHECK-ZVBB32-NEXT: sw a0, 8(sp)
; CHECK-ZVBB32-NEXT: addi a0, sp, 8
; CHECK-ZVBB32-NEXT: vsetvli a1, zero, e64, m4, ta, ma
; CHECK-ZVBB32-NEXT: vlse64.v v12, (a0), zero
; CHECK-ZVBB32-NEXT: vrol.vv v8, v8, v12
; CHECK-ZVBB32-NEXT: addi sp, sp, 16
; CHECK-ZVBB32-NEXT: ret
;
; CHECK-ZVBB64-LABEL: vrol_vx_nxv4i64:
; CHECK-ZVBB64: # %bb.0:
; CHECK-ZVBB64-NEXT: vsetvli a1, zero, e64, m4, ta, ma
; CHECK-ZVBB64-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB64-NEXT: ret
; CHECK-ZVBB-LABEL: vrol_vx_nxv4i64:
; CHECK-ZVBB: # %bb.0:
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e64, m4, ta, ma
; CHECK-ZVBB-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB-NEXT: ret
%b.head = insertelement <vscale x 4 x i64 > poison, i64 %b , i32 0
%b.splat = shufflevector <vscale x 4 x i64 > %b.head , <vscale x 4 x i64 > poison, <vscale x 4 x i32 > zeroinitializer
%x = call <vscale x 4 x i64 > @llvm.fshl.nxv4i64 (<vscale x 4 x i64 > %a , <vscale x 4 x i64 > %a , <vscale x 4 x i64 > %b.splat )
Expand Down
Expand Up
@@ -1179,21 +1122,15 @@ define <vscale x 8 x i64> @vrol_vv_nxv8i64(<vscale x 8 x i64> %a, <vscale x 8 x
define <vscale x 8 x i64 > @vrol_vx_nxv8i64 (<vscale x 8 x i64 > %a , i64 %b ) {
; CHECK-RV32-LABEL: vrol_vx_nxv8i64:
; CHECK-RV32: # %bb.0:
; CHECK-RV32-NEXT: addi sp, sp, -16
; CHECK-RV32-NEXT: .cfi_def_cfa_offset 16
; CHECK-RV32-NEXT: sw a1, 12(sp)
; CHECK-RV32-NEXT: sw a0, 8(sp)
; CHECK-RV32-NEXT: addi a0, sp, 8
; CHECK-RV32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
; CHECK-RV32-NEXT: vlse64.v v16, (a0), zero
; CHECK-RV32-NEXT: vmv.v.x v16, a0
; CHECK-RV32-NEXT: li a0, 63
; CHECK-RV32-NEXT: vand.vx v24, v16, a0
; CHECK-RV32-NEXT: vsll.vv v24, v8, v24
; CHECK-RV32-NEXT: vrsub.vi v16, v16, 0
; CHECK-RV32-NEXT: vand.vx v16, v16, a0
; CHECK-RV32-NEXT: vsrl.vv v8, v8, v16
; CHECK-RV32-NEXT: vor.vv v8, v24, v8
; CHECK-RV32-NEXT: addi sp, sp, 16
; CHECK-RV32-NEXT: ret
;
; CHECK-RV64-LABEL: vrol_vx_nxv8i64:
Expand All
@@ -1207,24 +1144,11 @@ define <vscale x 8 x i64> @vrol_vx_nxv8i64(<vscale x 8 x i64> %a, i64 %b) {
; CHECK-RV64-NEXT: vor.vv v8, v16, v8
; CHECK-RV64-NEXT: ret
;
; CHECK-ZVBB32-LABEL: vrol_vx_nxv8i64:
; CHECK-ZVBB32: # %bb.0:
; CHECK-ZVBB32-NEXT: addi sp, sp, -16
; CHECK-ZVBB32-NEXT: .cfi_def_cfa_offset 16
; CHECK-ZVBB32-NEXT: sw a1, 12(sp)
; CHECK-ZVBB32-NEXT: sw a0, 8(sp)
; CHECK-ZVBB32-NEXT: addi a0, sp, 8
; CHECK-ZVBB32-NEXT: vsetvli a1, zero, e64, m8, ta, ma
; CHECK-ZVBB32-NEXT: vlse64.v v16, (a0), zero
; CHECK-ZVBB32-NEXT: vrol.vv v8, v8, v16
; CHECK-ZVBB32-NEXT: addi sp, sp, 16
; CHECK-ZVBB32-NEXT: ret
;
; CHECK-ZVBB64-LABEL: vrol_vx_nxv8i64:
; CHECK-ZVBB64: # %bb.0:
; CHECK-ZVBB64-NEXT: vsetvli a1, zero, e64, m8, ta, ma
; CHECK-ZVBB64-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB64-NEXT: ret
; CHECK-ZVBB-LABEL: vrol_vx_nxv8i64:
; CHECK-ZVBB: # %bb.0:
; CHECK-ZVBB-NEXT: vsetvli a1, zero, e64, m8, ta, ma
; CHECK-ZVBB-NEXT: vrol.vx v8, v8, a0
; CHECK-ZVBB-NEXT: ret
%b.head = insertelement <vscale x 8 x i64 > poison, i64 %b , i32 0
%b.splat = shufflevector <vscale x 8 x i64 > %b.head , <vscale x 8 x i64 > poison, <vscale x 8 x i32 > zeroinitializer
%x = call <vscale x 8 x i64 > @llvm.fshl.nxv8i64 (<vscale x 8 x i64 > %a , <vscale x 8 x i64 > %a , <vscale x 8 x i64 > %b.splat )
Expand Down