1ca66df3bSwanglei; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 3 2ca66df3bSwanglei; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s 3ca66df3bSwanglei 4ca66df3bSwangleidefine void @and_v16i8(ptr %res, ptr %a0, ptr %a1) nounwind { 5ca66df3bSwanglei; CHECK-LABEL: and_v16i8: 6ca66df3bSwanglei; CHECK: # %bb.0: # %entry 7*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 8*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 9*a5c90e48Swanglei; CHECK-NEXT: vand.v $vr0, $vr0, $vr1 10ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 11ca66df3bSwanglei; CHECK-NEXT: ret 12ca66df3bSwangleientry: 13ca66df3bSwanglei %v0 = load <16 x i8>, ptr %a0 14ca66df3bSwanglei %v1 = load <16 x i8>, ptr %a1 15ca66df3bSwanglei %v2 = and <16 x i8> %v0, %v1 16ca66df3bSwanglei store <16 x i8> %v2, ptr %res 17ca66df3bSwanglei ret void 18ca66df3bSwanglei} 19ca66df3bSwanglei 20ca66df3bSwangleidefine void @and_v8i16(ptr %res, ptr %a0, ptr %a1) nounwind { 21ca66df3bSwanglei; CHECK-LABEL: and_v8i16: 22ca66df3bSwanglei; CHECK: # %bb.0: # %entry 23*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 24*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 25*a5c90e48Swanglei; CHECK-NEXT: vand.v $vr0, $vr0, $vr1 26ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 27ca66df3bSwanglei; CHECK-NEXT: ret 28ca66df3bSwangleientry: 29ca66df3bSwanglei %v0 = load <8 x i16>, ptr %a0 30ca66df3bSwanglei %v1 = load <8 x i16>, ptr %a1 31ca66df3bSwanglei %v2 = and <8 x i16> %v0, %v1 32ca66df3bSwanglei store <8 x i16> %v2, ptr %res 33ca66df3bSwanglei ret void 34ca66df3bSwanglei} 35ca66df3bSwanglei 36ca66df3bSwangleidefine void @and_v4i32(ptr %res, ptr %a0, ptr %a1) nounwind { 37ca66df3bSwanglei; CHECK-LABEL: and_v4i32: 38ca66df3bSwanglei; CHECK: # %bb.0: # %entry 39*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 40*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 41*a5c90e48Swanglei; CHECK-NEXT: vand.v $vr0, $vr0, $vr1 42ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 43ca66df3bSwanglei; CHECK-NEXT: ret 44ca66df3bSwangleientry: 45ca66df3bSwanglei %v0 = load <4 x i32>, ptr %a0 46ca66df3bSwanglei %v1 = load <4 x i32>, ptr %a1 47ca66df3bSwanglei %v2 = and <4 x i32> %v0, %v1 48ca66df3bSwanglei store <4 x i32> %v2, ptr %res 49ca66df3bSwanglei ret void 50ca66df3bSwanglei} 51ca66df3bSwanglei 52ca66df3bSwangleidefine void @and_v2i64(ptr %res, ptr %a0, ptr %a1) nounwind { 53ca66df3bSwanglei; CHECK-LABEL: and_v2i64: 54ca66df3bSwanglei; CHECK: # %bb.0: # %entry 55*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 56*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 57*a5c90e48Swanglei; CHECK-NEXT: vand.v $vr0, $vr0, $vr1 58ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 59ca66df3bSwanglei; CHECK-NEXT: ret 60ca66df3bSwangleientry: 61ca66df3bSwanglei %v0 = load <2 x i64>, ptr %a0 62ca66df3bSwanglei %v1 = load <2 x i64>, ptr %a1 63ca66df3bSwanglei %v2 = and <2 x i64> %v0, %v1 64ca66df3bSwanglei store <2 x i64> %v2, ptr %res 65ca66df3bSwanglei ret void 66ca66df3bSwanglei} 67ca66df3bSwanglei 68ca66df3bSwangleidefine void @and_u_v16i8(ptr %res, ptr %a0) nounwind { 69ca66df3bSwanglei; CHECK-LABEL: and_u_v16i8: 70ca66df3bSwanglei; CHECK: # %bb.0: # %entry 71ca66df3bSwanglei; CHECK-NEXT: vld $vr0, $a1, 0 72ca66df3bSwanglei; CHECK-NEXT: vandi.b $vr0, $vr0, 31 73ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 74ca66df3bSwanglei; CHECK-NEXT: ret 75ca66df3bSwangleientry: 76ca66df3bSwanglei %v0 = load <16 x i8>, ptr %a0 77ca66df3bSwanglei %v1 = and <16 x i8> %v0, <i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31, i8 31> 78ca66df3bSwanglei store <16 x i8> %v1, ptr %res 79ca66df3bSwanglei ret void 80ca66df3bSwanglei} 81ca66df3bSwanglei 82ca66df3bSwangleidefine void @and_u_v8i16(ptr %res, ptr %a0) nounwind { 83ca66df3bSwanglei; CHECK-LABEL: and_u_v8i16: 84ca66df3bSwanglei; CHECK: # %bb.0: # %entry 85ca66df3bSwanglei; CHECK-NEXT: vld $vr0, $a1, 0 86ca66df3bSwanglei; CHECK-NEXT: vrepli.h $vr1, 31 87ca66df3bSwanglei; CHECK-NEXT: vand.v $vr0, $vr0, $vr1 88ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 89ca66df3bSwanglei; CHECK-NEXT: ret 90ca66df3bSwangleientry: 91ca66df3bSwanglei %v0 = load <8 x i16>, ptr %a0 92ca66df3bSwanglei %v1 = and <8 x i16> %v0, <i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31> 93ca66df3bSwanglei store <8 x i16> %v1, ptr %res 94ca66df3bSwanglei ret void 95ca66df3bSwanglei} 96ca66df3bSwanglei 97ca66df3bSwangleidefine void @and_u_v4i32(ptr %res, ptr %a0) nounwind { 98ca66df3bSwanglei; CHECK-LABEL: and_u_v4i32: 99ca66df3bSwanglei; CHECK: # %bb.0: # %entry 100ca66df3bSwanglei; CHECK-NEXT: vld $vr0, $a1, 0 101ca66df3bSwanglei; CHECK-NEXT: vrepli.w $vr1, 31 102ca66df3bSwanglei; CHECK-NEXT: vand.v $vr0, $vr0, $vr1 103ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 104ca66df3bSwanglei; CHECK-NEXT: ret 105ca66df3bSwangleientry: 106ca66df3bSwanglei %v0 = load <4 x i32>, ptr %a0 107ca66df3bSwanglei %v1 = and <4 x i32> %v0, <i32 31, i32 31, i32 31, i32 31> 108ca66df3bSwanglei store <4 x i32> %v1, ptr %res 109ca66df3bSwanglei ret void 110ca66df3bSwanglei} 111ca66df3bSwanglei 112ca66df3bSwangleidefine void @and_u_v2i64(ptr %res, ptr %a0) nounwind { 113ca66df3bSwanglei; CHECK-LABEL: and_u_v2i64: 114ca66df3bSwanglei; CHECK: # %bb.0: # %entry 115ca66df3bSwanglei; CHECK-NEXT: vld $vr0, $a1, 0 116ca66df3bSwanglei; CHECK-NEXT: vrepli.d $vr1, 31 117ca66df3bSwanglei; CHECK-NEXT: vand.v $vr0, $vr0, $vr1 118ca66df3bSwanglei; CHECK-NEXT: vst $vr0, $a0, 0 119ca66df3bSwanglei; CHECK-NEXT: ret 120ca66df3bSwangleientry: 121ca66df3bSwanglei %v0 = load <2 x i64>, ptr %a0 122ca66df3bSwanglei %v1 = and <2 x i64> %v0, <i64 31, i64 31> 123ca66df3bSwanglei store <2 x i64> %v1, ptr %res 124ca66df3bSwanglei ret void 125ca66df3bSwanglei} 126