; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2 < %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 ; ; SQXTNB ; define @sqxtnb_h( %a) { ; CHECK-LABEL: sqxtnb_h: ; CHECK: sqxtnb z0.b, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtnb.nxv8i16( %a) ret %out } define @sqxtnb_s( %a) { ; CHECK-LABEL: sqxtnb_s: ; CHECK: sqxtnb z0.h, z0.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtnb.nxv4i32( %a) ret %out } define @sqxtnb_d( %a) { ; CHECK-LABEL: sqxtnb_d: ; CHECK: sqxtnb z0.s, z0.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtnb.nxv2i64( %a) ret %out } ; ; UQXTNB ; define @uqxtnb_h( %a) { ; CHECK-LABEL: uqxtnb_h: ; CHECK: uqxtnb z0.b, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uqxtnb.nxv8i16( %a) ret %out } define @uqxtnb_s( %a) { ; CHECK-LABEL: uqxtnb_s: ; CHECK: uqxtnb z0.h, z0.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uqxtnb.nxv4i32( %a) ret %out } define @uqxtnb_d( %a) { ; CHECK-LABEL: uqxtnb_d: ; CHECK: uqxtnb z0.s, z0.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uqxtnb.nxv2i64( %a) ret %out } ; ; SQXTUNB ; define @sqxtunb_h( %a) { ; CHECK-LABEL: sqxtunb_h: ; CHECK: sqxtunb z0.b, z0.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtunb.nxv8i16( %a) ret %out } define @sqxtunb_s( %a) { ; CHECK-LABEL: sqxtunb_s: ; CHECK: sqxtunb z0.h, z0.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtunb.nxv4i32( %a) ret %out } define @sqxtunb_d( %a) { ; CHECK-LABEL: sqxtunb_d: ; CHECK: sqxtunb z0.s, z0.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtunb.nxv2i64( %a) ret %out } ; ; SQXTNT ; define @sqxtnt_h( %a, %b) { ; CHECK-LABEL: sqxtnt_h: ; CHECK: sqxtnt z0.b, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtnt.nxv8i16( %a, %b) ret %out } define @sqxtnt_s( %a, %b) { ; CHECK-LABEL: sqxtnt_s: ; CHECK: sqxtnt z0.h, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtnt.nxv4i32( %a, %b) ret %out } define @sqxtnt_d( %a, %b) { ; CHECK-LABEL: sqxtnt_d: ; CHECK: sqxtnt z0.s, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtnt.nxv2i64( %a, %b) ret %out } ; ; UQXTNT ; define @uqxtnt_h( %a, %b) { ; CHECK-LABEL: uqxtnt_h: ; CHECK: uqxtnt z0.b, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uqxtnt.nxv8i16( %a, %b) ret %out } define @uqxtnt_s( %a, %b) { ; CHECK-LABEL: uqxtnt_s: ; CHECK: uqxtnt z0.h, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uqxtnt.nxv4i32( %a, %b) ret %out } define @uqxtnt_d( %a, %b) { ; CHECK-LABEL: uqxtnt_d: ; CHECK: uqxtnt z0.s, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.uqxtnt.nxv2i64( %a, %b) ret %out } ; ; SQXTUNT ; define @sqxtunt_h( %a, %b) { ; CHECK-LABEL: sqxtunt_h: ; CHECK: sqxtunt z0.b, z1.h ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtunt.nxv8i16( %a, %b) ret %out } define @sqxtunt_s( %a, %b) { ; CHECK-LABEL: sqxtunt_s: ; CHECK: sqxtunt z0.h, z1.s ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtunt.nxv4i32( %a, %b) ret %out } define @sqxtunt_d( %a, %b) { ; CHECK-LABEL: sqxtunt_d: ; CHECK: sqxtunt z0.s, z1.d ; CHECK-NEXT: ret %out = call @llvm.aarch64.sve.sqxtunt.nxv2i64( %a, %b) ret %out } declare @llvm.aarch64.sve.sqxtnb.nxv8i16() declare @llvm.aarch64.sve.sqxtnb.nxv4i32() declare @llvm.aarch64.sve.sqxtnb.nxv2i64() declare @llvm.aarch64.sve.uqxtnb.nxv8i16() declare @llvm.aarch64.sve.uqxtnb.nxv4i32() declare @llvm.aarch64.sve.uqxtnb.nxv2i64() declare @llvm.aarch64.sve.sqxtunb.nxv8i16() declare @llvm.aarch64.sve.sqxtunb.nxv4i32() declare @llvm.aarch64.sve.sqxtunb.nxv2i64() declare @llvm.aarch64.sve.sqxtnt.nxv8i16(, ) declare @llvm.aarch64.sve.sqxtnt.nxv4i32(, ) declare @llvm.aarch64.sve.sqxtnt.nxv2i64(, ) declare @llvm.aarch64.sve.uqxtnt.nxv8i16(, ) declare @llvm.aarch64.sve.uqxtnt.nxv4i32(, ) declare @llvm.aarch64.sve.uqxtnt.nxv2i64(, ) declare @llvm.aarch64.sve.sqxtunt.nxv8i16(, ) declare @llvm.aarch64.sve.sqxtunt.nxv4i32(, ) declare @llvm.aarch64.sve.sqxtunt.nxv2i64(, )