1de21308fSwanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2de21308fSwanglei; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s 3de21308fSwanglei 4de21308fSwangleidefine void @select_v32i8_imm(ptr %res, ptr %a0) nounwind { 5de21308fSwanglei; CHECK-LABEL: select_v32i8_imm: 6de21308fSwanglei; CHECK: # %bb.0: 7de21308fSwanglei; CHECK-NEXT: xvld $xr0, $a1, 0 8de21308fSwanglei; CHECK-NEXT: xvrepli.h $xr1, -256 9da5378e8Swanglei; CHECK-NEXT: xvbitseli.b $xr1, $xr0, 1 10da5378e8Swanglei; CHECK-NEXT: xvst $xr1, $a0, 0 11de21308fSwanglei; CHECK-NEXT: ret 12de21308fSwanglei %v0 = load <32 x i8>, ptr %a0 13da5378e8Swanglei %sel = select <32 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <32 x i8> <i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1, i8 1>, <32 x i8> %v0 14de21308fSwanglei store <32 x i8> %sel, ptr %res 15de21308fSwanglei ret void 16de21308fSwanglei} 17de21308fSwanglei 18de21308fSwangleidefine void @select_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind { 19de21308fSwanglei; CHECK-LABEL: select_v32i8: 20de21308fSwanglei; CHECK: # %bb.0: 21de21308fSwanglei; CHECK-NEXT: xvld $xr0, $a1, 0 22de21308fSwanglei; CHECK-NEXT: xvld $xr1, $a2, 0 23de21308fSwanglei; CHECK-NEXT: xvrepli.h $xr2, -256 24de21308fSwanglei; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr0, $xr2 25de21308fSwanglei; CHECK-NEXT: xvst $xr0, $a0, 0 26de21308fSwanglei; CHECK-NEXT: ret 27de21308fSwanglei %v0 = load <32 x i8>, ptr %a0 28de21308fSwanglei %v1 = load <32 x i8>, ptr %a1 29de21308fSwanglei %sel = select <32 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <32 x i8> %v0, <32 x i8> %v1 30de21308fSwanglei store <32 x i8> %sel, ptr %res 31de21308fSwanglei ret void 32de21308fSwanglei} 33de21308fSwanglei 34de21308fSwangleidefine void @select_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind { 35de21308fSwanglei; CHECK-LABEL: select_v16i16: 36de21308fSwanglei; CHECK: # %bb.0: 37a5c90e48Swanglei; CHECK-NEXT: xvld $xr0, $a1, 0 38a5c90e48Swanglei; CHECK-NEXT: xvld $xr1, $a2, 0 39a5c90e48Swanglei; CHECK-NEXT: lu12i.w $a1, -16 40a5c90e48Swanglei; CHECK-NEXT: xvreplgr2vr.w $xr2, $a1 41a5c90e48Swanglei; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr0, $xr2 42de21308fSwanglei; CHECK-NEXT: xvst $xr0, $a0, 0 43de21308fSwanglei; CHECK-NEXT: ret 44de21308fSwanglei %v0 = load <16 x i16>, ptr %a0 45de21308fSwanglei %v1 = load <16 x i16>, ptr %a1 46de21308fSwanglei %sel = select <16 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <16 x i16> %v0, <16 x i16> %v1 47de21308fSwanglei store <16 x i16> %sel, ptr %res 48de21308fSwanglei ret void 49de21308fSwanglei} 50de21308fSwanglei 51de21308fSwangleidefine void @select_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind { 52de21308fSwanglei; CHECK-LABEL: select_v8i32: 53de21308fSwanglei; CHECK: # %bb.0: 54de21308fSwanglei; CHECK-NEXT: xvld $xr0, $a1, 0 55de21308fSwanglei; CHECK-NEXT: xvld $xr1, $a2, 0 56de21308fSwanglei; CHECK-NEXT: ori $a1, $zero, 0 57de21308fSwanglei; CHECK-NEXT: lu32i.d $a1, -1 58de21308fSwanglei; CHECK-NEXT: xvreplgr2vr.d $xr2, $a1 59de21308fSwanglei; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr0, $xr2 60de21308fSwanglei; CHECK-NEXT: xvst $xr0, $a0, 0 61de21308fSwanglei; CHECK-NEXT: ret 62de21308fSwanglei %v0 = load <8 x i32>, ptr %a0 63de21308fSwanglei %v1 = load <8 x i32>, ptr %a1 64de21308fSwanglei %sel = select <8 x i1> <i1 false, i1 true, i1 false, i1 true, i1 false, i1 true, i1 false, i1 true>, <8 x i32> %v0, <8 x i32> %v1 65de21308fSwanglei store <8 x i32> %sel, ptr %res 66de21308fSwanglei ret void 67de21308fSwanglei} 68de21308fSwanglei 69de21308fSwangleidefine void @select_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind { 70de21308fSwanglei; CHECK-LABEL: select_v4i64: 71de21308fSwanglei; CHECK: # %bb.0: 72a5c90e48Swanglei; CHECK-NEXT: xvld $xr0, $a1, 0 73a5c90e48Swanglei; CHECK-NEXT: xvld $xr1, $a2, 0 74a5c90e48Swanglei; CHECK-NEXT: pcalau12i $a1, %pc_hi20(.LCPI4_0) 75*985d64b0Shev; CHECK-NEXT: xvld $xr2, $a1, %pc_lo12(.LCPI4_0) 76a5c90e48Swanglei; CHECK-NEXT: xvbitsel.v $xr0, $xr1, $xr0, $xr2 77de21308fSwanglei; CHECK-NEXT: xvst $xr0, $a0, 0 78de21308fSwanglei; CHECK-NEXT: ret 79de21308fSwanglei %v0 = load <4 x i64>, ptr %a0 80de21308fSwanglei %v1 = load <4 x i64>, ptr %a1 81de21308fSwanglei %sel = select <4 x i1> <i1 true, i1 false, i1 true, i1 false>, <4 x i64> %v0, <4 x i64> %v1 82de21308fSwanglei store <4 x i64> %sel, ptr %res 83de21308fSwanglei ret void 84de21308fSwanglei} 85