; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve2p1 -verify-machineinstrs < %s | FileCheck %s ; ; S/UQRSHRN x2 ; define @multi_vector_sat_shift_narrow_interleave_x2_s16( %unused, %zn1, %zn2) { ; CHECK-LABEL: multi_vector_sat_shift_narrow_interleave_x2_s16: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: sqrshrn z0.h, { z2.s, z3.s }, #16 ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.sqrshrn.x2.nxv8i16( %zn1, %zn2, i32 16) ret %res } define @multi_vector_sat_shift_narrow_interleave_x2_u16( %unused, %zn1, %zn2) { ; CHECK-LABEL: multi_vector_sat_shift_narrow_interleave_x2_u16: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: uqrshrn z0.h, { z2.s, z3.s }, #16 ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.uqrshrn.x2.nxv8i16( %zn1, %zn2, i32 16) ret %res } ; ; SQRSHRUN x2 ; define @multi_vector_sat_shift_unsigned_narrow_interleave_x2_s16( %unused, %zn1, %zn2) { ; CHECK-LABEL: multi_vector_sat_shift_unsigned_narrow_interleave_x2_s16: ; CHECK: // %bb.0: ; CHECK-NEXT: mov z3.d, z2.d ; CHECK-NEXT: mov z2.d, z1.d ; CHECK-NEXT: sqrshrun z0.h, { z2.s, z3.s }, #16 ; CHECK-NEXT: ret %res = call @llvm.aarch64.sve.sqrshrun.x2.nxv8i16( %zn1, %zn2, i32 16) ret %res } declare @llvm.aarch64.sve.sqrshrn.x2.nxv8i16(, , i32) declare @llvm.aarch64.sve.uqrshrn.x2.nxv8i16(, , i32) declare @llvm.aarch64.sve.sqrshrun.x2.nxv8i16(, , i32)