; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s 2>%t | FileCheck %s ; RUN: FileCheck --check-prefix=WARN --allow-empty %s <%t ; If this check fails please read test/CodeGen/AArch64/README for instructions on how to resolve it. ; WARN-NOT: warning ; ; RBIT ; define @rbit_i8( %a, %pg, %b) { ; CHECK-LABEL: rbit_i8: ; CHECK: rbit z0.b, p0/m, z1.b ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.rbit.nxv16i8( %a, %pg, %b) ret %out } define @rbit_i16( %a, %pg, %b) { ; CHECK-LABEL: rbit_i16: ; CHECK: rbit z0.h, p0/m, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.rbit.nxv8i16( %a, %pg, %b) ret %out } define @rbit_i32( %a, %pg, %b) { ; CHECK-LABEL: rbit_i32: ; CHECK: rbit z0.s, p0/m, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.rbit.nxv4i32( %a, %pg, %b) ret %out } define @rbit_i64( %a, %pg, %b) { ; CHECK-LABEL: rbit_i64: ; CHECK: rbit z0.d, p0/m, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.rbit.nxv2i64( %a, %pg, %b) ret %out } ; ; REVB ; define @revb_i16( %a, %pg, %b) { ; CHECK-LABEL: revb_i16: ; CHECK: revb z0.h, p0/m, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.revb.nxv8i16( %a, %pg, %b) ret %out } define @revb_i32( %a, %pg, %b) { ; CHECK-LABEL: revb_i32: ; CHECK: revb z0.s, p0/m, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.revb.nxv4i32( %a, %pg, %b) ret %out } define @revb_i64( %a, %pg, %b) { ; CHECK-LABEL: revb_i64: ; CHECK: revb z0.d, p0/m, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.revb.nxv2i64( %a, %pg, %b) ret %out } ; ; REVB (bswap) ; define @revb_i16_bswap( %a) { ; CHECK-LABEL: revb_i16_bswap: ; CHECK: ptrue [[PG:p[0-9]+]].h ; CHECK-NEXT: revb z0.h, [[PG]]/m, z0.h ; CHECK-NEXT: ret %res = call @llvm.bswap.nxv8i16( %a) ret %res } define @revb_i32_bswap( %a) { ; CHECK-LABEL: revb_i32_bswap: ; CHECK: ptrue [[PG:p[0-9]+]].s ; CHECK-NEXT: revb z0.s, [[PG]]/m, z0.s ; CHECK-NEXT: ret %res = call @llvm.bswap.nxv4i32( %a) ret %res } define @revb_i64_bswap( %a) { ; CHECK-LABEL: revb_i64_bswap: ; CHECK: ptrue [[PG:p[0-9]+]].d ; CHECK-NEXT: revb z0.d, [[PG]]/m, z0.d ; CHECK-NEXT: ret %res = call @llvm.bswap.nxv2i64( %a) ret %res } ; ; REVH ; define @revh_i32( %a, %pg, %b) { ; CHECK-LABEL: revh_i32: ; CHECK: revh z0.s, p0/m, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.revh.nxv4i32( %a, %pg, %b) ret %out } define @revh_i64( %a, %pg, %b) { ; CHECK-LABEL: revh_i64: ; CHECK: revh z0.d, p0/m, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.revh.nxv2i64( %a, %pg, %b) ret %out } ; ; REVW ; define @revw_i64( %a, %pg, %b) { ; CHECK-LABEL: revw_i64: ; CHECK: revw z0.d, p0/m, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.revw.nxv2i64( %a, %pg, %b) ret %out } declare @llvm.aarch64.sve.rbit.nxv16i8(, , ) declare @llvm.aarch64.sve.rbit.nxv8i16(, , ) declare @llvm.aarch64.sve.rbit.nxv4i32(, , ) declare @llvm.aarch64.sve.rbit.nxv2i64(, , ) declare @llvm.aarch64.sve.revb.nxv8i16(, , ) declare @llvm.aarch64.sve.revb.nxv4i32(, , ) declare @llvm.aarch64.sve.revb.nxv2i64(, , ) declare @llvm.bswap.nxv8i16() declare @llvm.bswap.nxv4i32() declare @llvm.bswap.nxv2i64() declare @llvm.aarch64.sve.revh.nxv4i32(, , ) declare @llvm.aarch64.sve.revh.nxv2i64(, , ) declare @llvm.aarch64.sve.revw.nxv2i64(, , )