; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -mtriple=thumbv8.1m.main-arm-none-eabi -mattr=+mve -verify-machineinstrs %s -o - | FileCheck %s declare arm_aapcs_vfpcc <4 x i32> @ext_i32() declare arm_aapcs_vfpcc <8 x i16> @ext_i16() declare arm_aapcs_vfpcc <16 x i8> @ext_i8() define arm_aapcs_vfpcc <4 x i32> @shuffle1_v4i32(<4 x i32> %src, <4 x i32> %a) { ; CHECK-LABEL: shuffle1_v4i32: ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: .save {r7, lr} ; CHECK-NEXT: push {r7, lr} ; CHECK-NEXT: .vsave {d8, d9} ; CHECK-NEXT: vpush {d8, d9} ; CHECK-NEXT: .pad #8 ; CHECK-NEXT: sub sp, #8 ; CHECK-NEXT: vcmp.i32 eq, q0, zr ; CHECK-NEXT: vmov q4, q1 ; CHECK-NEXT: vstr p0, [sp, #4] @ 4-byte Spill ; CHECK-NEXT: bl ext_i32 ; CHECK-NEXT: vldr p0, [sp, #4] @ 4-byte Reload ; CHECK-NEXT: vpsel q0, q4, q0 ; CHECK-NEXT: add sp, #8 ; CHECK-NEXT: vpop {d8, d9} ; CHECK-NEXT: pop {r7, pc} entry: %c = icmp eq <4 x i32> %src, zeroinitializer %ext = call arm_aapcs_vfpcc <4 x i32> @ext_i32() %s = select <4 x i1> %c, <4 x i32> %a, <4 x i32> %ext ret <4 x i32> %s } define arm_aapcs_vfpcc <8 x i16> @shuffle1_v8i16(<8 x i16> %src, <8 x i16> %a) { ; CHECK-LABEL: shuffle1_v8i16: ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: .save {r7, lr} ; CHECK-NEXT: push {r7, lr} ; CHECK-NEXT: .vsave {d8, d9} ; CHECK-NEXT: vpush {d8, d9} ; CHECK-NEXT: .pad #8 ; CHECK-NEXT: sub sp, #8 ; CHECK-NEXT: vcmp.i16 eq, q0, zr ; CHECK-NEXT: vmov q4, q1 ; CHECK-NEXT: vstr p0, [sp, #4] @ 4-byte Spill ; CHECK-NEXT: bl ext_i16 ; CHECK-NEXT: vldr p0, [sp, #4] @ 4-byte Reload ; CHECK-NEXT: vpsel q0, q4, q0 ; CHECK-NEXT: add sp, #8 ; CHECK-NEXT: vpop {d8, d9} ; CHECK-NEXT: pop {r7, pc} entry: %c = icmp eq <8 x i16> %src, zeroinitializer %ext = call arm_aapcs_vfpcc <8 x i16> @ext_i16() %s = select <8 x i1> %c, <8 x i16> %a, <8 x i16> %ext ret <8 x i16> %s } define arm_aapcs_vfpcc <16 x i8> @shuffle1_v16i8(<16 x i8> %src, <16 x i8> %a) { ; CHECK-LABEL: shuffle1_v16i8: ; CHECK: @ %bb.0: @ %entry ; CHECK-NEXT: .save {r7, lr} ; CHECK-NEXT: push {r7, lr} ; CHECK-NEXT: .vsave {d8, d9} ; CHECK-NEXT: vpush {d8, d9} ; CHECK-NEXT: .pad #8 ; CHECK-NEXT: sub sp, #8 ; CHECK-NEXT: vcmp.i8 eq, q0, zr ; CHECK-NEXT: vmov q4, q1 ; CHECK-NEXT: vstr p0, [sp, #4] @ 4-byte Spill ; CHECK-NEXT: bl ext_i8 ; CHECK-NEXT: vldr p0, [sp, #4] @ 4-byte Reload ; CHECK-NEXT: vpsel q0, q4, q0 ; CHECK-NEXT: add sp, #8 ; CHECK-NEXT: vpop {d8, d9} ; CHECK-NEXT: pop {r7, pc} entry: %c = icmp eq <16 x i8> %src, zeroinitializer %ext = call arm_aapcs_vfpcc <16 x i8> @ext_i8() %s = select <16 x i1> %c, <16 x i8> %a, <16 x i8> %ext ret <16 x i8> %s }