Expand Up
@@ -91,3 +91,99 @@ entry:
declare <8 x half > @llvm.arm.mve.sub.predicated.v8f16.v8i1 (<8 x half >, <8 x half >, <8 x i1 >, <8 x half >) #2
define arm_aapcs_vfpcc <4 x i32 > @test_vsubq_n_u32 (<4 x i32 > %a , i32 %b ) {
; CHECK-LABEL: test_vsubq_n_u32:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vsub.i32 q0, q0, r0
; CHECK-NEXT: bx lr
entry:
%.splatinsert = insertelement <4 x i32 > undef , i32 %b , i32 0
%.splat = shufflevector <4 x i32 > %.splatinsert , <4 x i32 > undef , <4 x i32 > zeroinitializer
%0 = sub <4 x i32 > %a , %.splat
ret <4 x i32 > %0
}
define arm_aapcs_vfpcc <8 x half > @test_vsubq_n_f16 (<8 x half > %a , float %b.coerce ) {
; CHECK-LABEL: test_vsubq_n_f16:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmov r0, s4
; CHECK-NEXT: vsub.f16 q0, q0, r0
; CHECK-NEXT: bx lr
entry:
%0 = bitcast float %b.coerce to i32
%tmp.0.extract.trunc = trunc i32 %0 to i16
%1 = bitcast i16 %tmp.0.extract.trunc to half
%.splatinsert = insertelement <8 x half > undef , half %1 , i32 0
%.splat = shufflevector <8 x half > %.splatinsert , <8 x half > undef , <8 x i32 > zeroinitializer
%2 = fsub <8 x half > %a , %.splat
ret <8 x half > %2
}
define arm_aapcs_vfpcc <16 x i8 > @test_vsubq_m_n_s8 (<16 x i8 > %inactive , <16 x i8 > %a , i8 signext %b , i16 zeroext %p ) {
; CHECK-LABEL: test_vsubq_m_n_s8:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmsr p0, r1
; CHECK-NEXT: vpst
; CHECK-NEXT: vsubt.i8 q0, q1, r0
; CHECK-NEXT: bx lr
entry:
%.splatinsert = insertelement <16 x i8 > undef , i8 %b , i32 0
%.splat = shufflevector <16 x i8 > %.splatinsert , <16 x i8 > undef , <16 x i32 > zeroinitializer
%0 = zext i16 %p to i32
%1 = call <16 x i1 > @llvm.arm.mve.pred.i2v.v16i1 (i32 %0 )
%2 = call <16 x i8 > @llvm.arm.mve.sub.predicated.v16i8.v16i1 (<16 x i8 > %a , <16 x i8 > %.splat , <16 x i1 > %1 , <16 x i8 > %inactive )
ret <16 x i8 > %2
}
define arm_aapcs_vfpcc <4 x float > @test_vsubq_m_n_f32 (<4 x float > %inactive , <4 x float > %a , float %b , i16 zeroext %p ) {
; CHECK-LABEL: test_vsubq_m_n_f32:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmsr p0, r0
; CHECK-NEXT: vmov r0, s8
; CHECK-NEXT: vpst
; CHECK-NEXT: vsubt.f32 q0, q1, r0
; CHECK-NEXT: bx lr
entry:
%.splatinsert = insertelement <4 x float > undef , float %b , i32 0
%.splat = shufflevector <4 x float > %.splatinsert , <4 x float > undef , <4 x i32 > zeroinitializer
%0 = zext i16 %p to i32
%1 = call <4 x i1 > @llvm.arm.mve.pred.i2v.v4i1 (i32 %0 )
%2 = call <4 x float > @llvm.arm.mve.sub.predicated.v4f32.v4i1 (<4 x float > %a , <4 x float > %.splat , <4 x i1 > %1 , <4 x float > %inactive )
ret <4 x float > %2
}
define arm_aapcs_vfpcc <8 x i16 > @test_vsubq_x_n_u16 (<8 x i16 > %a , i16 zeroext %b , i16 zeroext %p ) {
; CHECK-LABEL: test_vsubq_x_n_u16:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmsr p0, r1
; CHECK-NEXT: vpst
; CHECK-NEXT: vsubt.i16 q0, q0, r0
; CHECK-NEXT: bx lr
entry:
%.splatinsert = insertelement <8 x i16 > undef , i16 %b , i32 0
%.splat = shufflevector <8 x i16 > %.splatinsert , <8 x i16 > undef , <8 x i32 > zeroinitializer
%0 = zext i16 %p to i32
%1 = call <8 x i1 > @llvm.arm.mve.pred.i2v.v8i1 (i32 %0 )
%2 = call <8 x i16 > @llvm.arm.mve.sub.predicated.v8i16.v8i1 (<8 x i16 > %a , <8 x i16 > %.splat , <8 x i1 > %1 , <8 x i16 > undef )
ret <8 x i16 > %2
}
define arm_aapcs_vfpcc <8 x half > @test_vsubq_x_n_f16 (<8 x half > %a , float %b.coerce , i16 zeroext %p ) {
; CHECK-LABEL: test_vsubq_x_n_f16:
; CHECK: @ %bb.0: @ %entry
; CHECK-NEXT: vmov r1, s4
; CHECK-NEXT: vmsr p0, r0
; CHECK-NEXT: vpst
; CHECK-NEXT: vsubt.f16 q0, q0, r1
; CHECK-NEXT: bx lr
entry:
%0 = bitcast float %b.coerce to i32
%tmp.0.extract.trunc = trunc i32 %0 to i16
%1 = bitcast i16 %tmp.0.extract.trunc to half
%.splatinsert = insertelement <8 x half > undef , half %1 , i32 0
%.splat = shufflevector <8 x half > %.splatinsert , <8 x half > undef , <8 x i32 > zeroinitializer
%2 = zext i16 %p to i32
%3 = call <8 x i1 > @llvm.arm.mve.pred.i2v.v8i1 (i32 %2 )
%4 = call <8 x half > @llvm.arm.mve.sub.predicated.v8f16.v8i1 (<8 x half > %a , <8 x half > %.splat , <8 x i1 > %3 , <8 x half > undef )
ret <8 x half > %4
}