+
+define void @test_vsel_ltzero(i32 %lhs32, float %a, float %b) {
+; CHECK-LABEL: test_vsel_ltzero
+ %tst1 = icmp slt i32 %lhs32, 0
+ %val1 = select i1 %tst1, float %a, float %b
+ store float %val1, float* @varfloat
+; CHECK: cmp r0, #0
+; CHECK: vselge.f32 s0, s1, s0
+ ret void
+}
+
+define void @test_vsel_lezero(i32 %lhs32, float %a, float %b) {
+; CHECK-LABEL: test_vsel_lezero
+ %tst1 = icmp sle i32 %lhs32, 0
+ %val1 = select i1 %tst1, float %a, float %b
+ store float %val1, float* @varfloat
+; CHECK: cmp r0, #1
+; CHECK: vselge.f32 s0, s1, s0
+ ret void
+}
+
+define void @test_vsel_gtzero(i32 %lhs32, float %a, float %b) {
+; CHECK-LABEL: test_vsel_gtzero
+ %tst1 = icmp sgt i32 %lhs32, 0
+ %val1 = select i1 %tst1, float %a, float %b
+ store float %val1, float* @varfloat
+; CHECK: cmp r0, #0
+; CHECK: vselgt.f32 s0, s0, s1
+ ret void
+}
+
+define void @test_vsel_gezero(i32 %lhs32, float %a, float %b) {
+; CHECK-LABEL: test_vsel_gezero
+ %tst1 = icmp sge i32 %lhs32, 0
+ %val1 = select i1 %tst1, float %a, float %b
+ store float %val1, float* @varfloat
+; CHECK: cmn r0, #1
+; CHECK: vselgt.f32 s0, s0, s1
+ ret void
+}
+
+define void @test_vsel_ltzero64(i32 %lhs32, double %a, double %b) {
+; CHECK-LABEL: test_vsel_ltzero
+ %tst1 = icmp slt i32 %lhs32, 0
+ %val1 = select i1 %tst1, double %a, double %b
+ store double %val1, double* @vardouble
+; CHECK: cmp r0, #0
+; CHECK: vselge.f64 d16, d1, d0
+ ret void
+}
+
+define void @test_vsel_lezero64(i32 %lhs32, double %a, double %b) {
+; CHECK-LABEL: test_vsel_lezero
+ %tst1 = icmp sle i32 %lhs32, 0
+ %val1 = select i1 %tst1, double %a, double %b
+ store double %val1, double* @vardouble
+; CHECK: cmp r0, #1
+; CHECK: vselge.f64 d16, d1, d0
+ ret void
+}
+
+define void @test_vsel_gtzero64(i32 %lhs32, double %a, double %b) {
+; CHECK-LABEL: test_vsel_gtzero
+ %tst1 = icmp sgt i32 %lhs32, 0
+ %val1 = select i1 %tst1, double %a, double %b
+ store double %val1, double* @vardouble
+; CHECK: cmp r0, #0
+; CHECK: vselgt.f64 d16, d0, d1
+ ret void
+}
+
+define void @test_vsel_gezero64(i32 %lhs32, double %a, double %b) {
+; CHECK-LABEL: test_vsel_gezero
+ %tst1 = icmp sge i32 %lhs32, 0
+ %val1 = select i1 %tst1, double %a, double %b
+ store double %val1, double* @vardouble
+; CHECK: cmn r0, #1
+; CHECK: vselgt.f64 d16, d0, d1
+ ret void
+}