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