xref: /llvm-project/llvm/test/CodeGen/VE/Vector/vec_select.ll (revision 5240e0b891fc4bf69d362199f70c94c28a7b9465)
195bf5ac8SSimon Moll; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2*5240e0b8SFangrui Song; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s
395bf5ac8SSimon Moll
495bf5ac8SSimon Molldeclare <256 x i32> @llvm.vec.select.v256i32(<256 x i1>, <256 x i32>, <256 x i32>, i32)
595bf5ac8SSimon Moll
695bf5ac8SSimon Molldefine fastcc <256 x i32> @test_vec_select_v256i32_vv(<256 x i32> %i0, <256 x i32> %i1, <256 x i1> %m) {
795bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256i32_vv:
895bf5ac8SSimon Moll; CHECK:       # %bb.0:
995bf5ac8SSimon Moll; CHECK-NEXT:    lea %s0, 256
1095bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s0
1195bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
1295bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
1395bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
1495bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
1595bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
1695bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x i32> %i0, <256 x i32> %i1
1795bf5ac8SSimon Moll  ret <256 x i32> %r0
1895bf5ac8SSimon Moll}
1995bf5ac8SSimon Moll
2095bf5ac8SSimon Molldefine fastcc <256 x i32> @test_vec_select_v256i32_vr(<256 x i32> %i0, i32 %s1, <256 x i1> %m) {
2195bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256i32_vr:
2295bf5ac8SSimon Moll; CHECK:       # %bb.0:
2395bf5ac8SSimon Moll; CHECK-NEXT:    and %s0, %s0, (32)0
2495bf5ac8SSimon Moll; CHECK-NEXT:    lea %s1, 256
2595bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s1
2695bf5ac8SSimon Moll; CHECK-NEXT:    vbrd %v1, %s0
2795bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
2895bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
2995bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
3095bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
3195bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
3295bf5ac8SSimon Moll  %xins = insertelement <256 x i32> undef, i32 %s1, i32 0
3395bf5ac8SSimon Moll  %i1 = shufflevector <256 x i32> %xins, <256 x i32> undef, <256 x i32> zeroinitializer
3495bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x i32> %i0, <256 x i32> %i1
3595bf5ac8SSimon Moll  ret <256 x i32> %r0
3695bf5ac8SSimon Moll}
3795bf5ac8SSimon Moll
3895bf5ac8SSimon Molldeclare <256 x float> @llvm.vec.select.v256f32(<256 x i1>, <256 x float>, <256 x float>, i32)
3995bf5ac8SSimon Moll
4095bf5ac8SSimon Molldefine fastcc <256 x float> @test_vec_select_v256f32_vv(<256 x float> %i0, <256 x float> %i1, <256 x i1> %m) {
4195bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256f32_vv:
4295bf5ac8SSimon Moll; CHECK:       # %bb.0:
4395bf5ac8SSimon Moll; CHECK-NEXT:    lea %s0, 256
4495bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s0
4595bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
4695bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
4795bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
4895bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
4995bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
5095bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x float> %i0, <256 x float> %i1
5195bf5ac8SSimon Moll  ret <256 x float> %r0
5295bf5ac8SSimon Moll}
5395bf5ac8SSimon Moll
5495bf5ac8SSimon Molldefine fastcc <256 x float> @test_vec_select_v256f32_vr(<256 x float> %i0, float %s1, <256 x i1> %m) {
5595bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256f32_vr:
5695bf5ac8SSimon Moll; CHECK:       # %bb.0:
5795bf5ac8SSimon Moll; CHECK-NEXT:    lea %s1, 256
5895bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s1
5995bf5ac8SSimon Moll; CHECK-NEXT:    vbrd %v1, %s0
6095bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
6195bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
6295bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
6395bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
6495bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
6595bf5ac8SSimon Moll  %xins = insertelement <256 x float> undef, float %s1, i32 0
6695bf5ac8SSimon Moll  %i1 = shufflevector <256 x float> %xins, <256 x float> undef, <256 x i32> zeroinitializer
6795bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x float> %i0, <256 x float> %i1
6895bf5ac8SSimon Moll  ret <256 x float> %r0
6995bf5ac8SSimon Moll}
7095bf5ac8SSimon Moll
7195bf5ac8SSimon Molldeclare <256 x double> @llvm.vec.select.v256f64(<256 x i1>, <256 x double>, <256 x double>, i32)
7295bf5ac8SSimon Moll
7395bf5ac8SSimon Molldefine fastcc <256 x double> @test_vec_select_v256f64_vv(<256 x double> %i0, <256 x double> %i1, <256 x i1> %m) {
7495bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256f64_vv:
7595bf5ac8SSimon Moll; CHECK:       # %bb.0:
7695bf5ac8SSimon Moll; CHECK-NEXT:    lea %s0, 256
7795bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s0
7895bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
7995bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
8095bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
8195bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
8295bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
8395bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x double> %i0, <256 x double> %i1
8495bf5ac8SSimon Moll  ret <256 x double> %r0
8595bf5ac8SSimon Moll}
8695bf5ac8SSimon Moll
8795bf5ac8SSimon Molldefine fastcc <256 x double> @test_vec_select_v256f64_vr(<256 x double> %i0, double %s1, <256 x i1> %m) {
8895bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256f64_vr:
8995bf5ac8SSimon Moll; CHECK:       # %bb.0:
9095bf5ac8SSimon Moll; CHECK-NEXT:    lea %s1, 256
9195bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s1
9295bf5ac8SSimon Moll; CHECK-NEXT:    vbrd %v1, %s0
9395bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
9495bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
9595bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
9695bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
9795bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
9895bf5ac8SSimon Moll  %xins = insertelement <256 x double> undef, double %s1, i32 0
9995bf5ac8SSimon Moll  %i1 = shufflevector <256 x double> %xins, <256 x double> undef, <256 x i32> zeroinitializer
10095bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x double> %i0, <256 x double> %i1
10195bf5ac8SSimon Moll  ret <256 x double> %r0
10295bf5ac8SSimon Moll}
10395bf5ac8SSimon Moll
10495bf5ac8SSimon Molldeclare <256 x i64> @llvm.vec.select.v256i64(<256 x i1>, <256 x i64>, <256 x i64>, i32)
10595bf5ac8SSimon Moll
10695bf5ac8SSimon Molldefine fastcc <256 x i64> @test_vec_select_v256i64_vv(<256 x i64> %i0, <256 x i64> %i1, <256 x i1> %m) {
10795bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256i64_vv:
10895bf5ac8SSimon Moll; CHECK:       # %bb.0:
10995bf5ac8SSimon Moll; CHECK-NEXT:    lea %s0, 256
11095bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s0
11195bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
11295bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
11395bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
11495bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
11595bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
11695bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x i64> %i0, <256 x i64> %i1
11795bf5ac8SSimon Moll  ret <256 x i64> %r0
11895bf5ac8SSimon Moll}
11995bf5ac8SSimon Moll
12095bf5ac8SSimon Molldefine fastcc <256 x i64> @test_vec_select_v256i64_vr(<256 x i64> %i0, i64 %s1, <256 x i1> %m) {
12195bf5ac8SSimon Moll; CHECK-LABEL: test_vec_select_v256i64_vr:
12295bf5ac8SSimon Moll; CHECK:       # %bb.0:
12395bf5ac8SSimon Moll; CHECK-NEXT:    lea %s1, 256
12495bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s1
12595bf5ac8SSimon Moll; CHECK-NEXT:    vbrd %v1, %s0
12695bf5ac8SSimon Moll; CHECK-NEXT:    vmrg %v1, %v1, %v0, %vm1
12795bf5ac8SSimon Moll; CHECK-NEXT:    lea %s16, 256
12895bf5ac8SSimon Moll; CHECK-NEXT:    lvl %s16
12995bf5ac8SSimon Moll; CHECK-NEXT:    vor %v0, (0)1, %v1
13095bf5ac8SSimon Moll; CHECK-NEXT:    b.l.t (, %s10)
13195bf5ac8SSimon Moll  %xins = insertelement <256 x i64> undef, i64 %s1, i32 0
13295bf5ac8SSimon Moll  %i1 = shufflevector <256 x i64> %xins, <256 x i64> undef, <256 x i32> zeroinitializer
13395bf5ac8SSimon Moll  %r0 = select <256 x i1> %m, <256 x i64> %i0, <256 x i64> %i1
13495bf5ac8SSimon Moll  ret <256 x i64> %r0
13595bf5ac8SSimon Moll}
136