129a0f3ecSleecheechen; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4 229a0f3ecSleecheechen; RUN: llc --mtriple=loongarch64 --mattr=+lsx < %s | FileCheck %s 329a0f3ecSleecheechen 429a0f3ecSleecheechendefine void @add_v16i8(ptr %res, ptr %a0, ptr %a1) nounwind { 529a0f3ecSleecheechen; CHECK-LABEL: add_v16i8: 629a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 7*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 8*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 9*a5c90e48Swanglei; CHECK-NEXT: vadd.b $vr0, $vr0, $vr1 1029a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 1129a0f3ecSleecheechen; CHECK-NEXT: ret 1229a0f3ecSleecheechenentry: 1329a0f3ecSleecheechen %v0 = load <16 x i8>, ptr %a0 1429a0f3ecSleecheechen %v1 = load <16 x i8>, ptr %a1 1529a0f3ecSleecheechen %v2 = add <16 x i8> %v0, %v1 1629a0f3ecSleecheechen store <16 x i8> %v2, ptr %res 1729a0f3ecSleecheechen ret void 1829a0f3ecSleecheechen} 1929a0f3ecSleecheechen 2029a0f3ecSleecheechendefine void @add_v8i16(ptr %res, ptr %a0, ptr %a1) nounwind { 2129a0f3ecSleecheechen; CHECK-LABEL: add_v8i16: 2229a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 23*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 24*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 25*a5c90e48Swanglei; CHECK-NEXT: vadd.h $vr0, $vr0, $vr1 2629a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 2729a0f3ecSleecheechen; CHECK-NEXT: ret 2829a0f3ecSleecheechenentry: 2929a0f3ecSleecheechen %v0 = load <8 x i16>, ptr %a0 3029a0f3ecSleecheechen %v1 = load <8 x i16>, ptr %a1 3129a0f3ecSleecheechen %v2 = add <8 x i16> %v0, %v1 3229a0f3ecSleecheechen store <8 x i16> %v2, ptr %res 3329a0f3ecSleecheechen ret void 3429a0f3ecSleecheechen} 3529a0f3ecSleecheechen 3629a0f3ecSleecheechendefine void @add_v4i32(ptr %res, ptr %a0, ptr %a1) nounwind { 3729a0f3ecSleecheechen; CHECK-LABEL: add_v4i32: 3829a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 39*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 40*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 41*a5c90e48Swanglei; CHECK-NEXT: vadd.w $vr0, $vr0, $vr1 4229a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 4329a0f3ecSleecheechen; CHECK-NEXT: ret 4429a0f3ecSleecheechenentry: 4529a0f3ecSleecheechen %v0 = load <4 x i32>, ptr %a0 4629a0f3ecSleecheechen %v1 = load <4 x i32>, ptr %a1 4729a0f3ecSleecheechen %v2 = add <4 x i32> %v0, %v1 4829a0f3ecSleecheechen store <4 x i32> %v2, ptr %res 4929a0f3ecSleecheechen ret void 5029a0f3ecSleecheechen} 5129a0f3ecSleecheechen 5229a0f3ecSleecheechendefine void @add_v2i64(ptr %res, ptr %a0, ptr %a1) nounwind { 5329a0f3ecSleecheechen; CHECK-LABEL: add_v2i64: 5429a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 55*a5c90e48Swanglei; CHECK-NEXT: vld $vr0, $a1, 0 56*a5c90e48Swanglei; CHECK-NEXT: vld $vr1, $a2, 0 57*a5c90e48Swanglei; CHECK-NEXT: vadd.d $vr0, $vr0, $vr1 5829a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 5929a0f3ecSleecheechen; CHECK-NEXT: ret 6029a0f3ecSleecheechenentry: 6129a0f3ecSleecheechen %v0 = load <2 x i64>, ptr %a0 6229a0f3ecSleecheechen %v1 = load <2 x i64>, ptr %a1 6329a0f3ecSleecheechen %v2 = add <2 x i64> %v0, %v1 6429a0f3ecSleecheechen store <2 x i64> %v2, ptr %res 6529a0f3ecSleecheechen ret void 6629a0f3ecSleecheechen} 6729a0f3ecSleecheechen 6829a0f3ecSleecheechendefine void @add_v16i8_31(ptr %res, ptr %a0) nounwind { 6929a0f3ecSleecheechen; CHECK-LABEL: add_v16i8_31: 7029a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 7129a0f3ecSleecheechen; CHECK-NEXT: vld $vr0, $a1, 0 7229a0f3ecSleecheechen; CHECK-NEXT: vaddi.bu $vr0, $vr0, 31 7329a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 7429a0f3ecSleecheechen; CHECK-NEXT: ret 7529a0f3ecSleecheechenentry: 7629a0f3ecSleecheechen %v0 = load <16 x i8>, ptr %a0 7729a0f3ecSleecheechen %v1 = add <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> 7829a0f3ecSleecheechen store <16 x i8> %v1, ptr %res 7929a0f3ecSleecheechen ret void 8029a0f3ecSleecheechen} 8129a0f3ecSleecheechen 8229a0f3ecSleecheechendefine void @add_v8i16_31(ptr %res, ptr %a0) nounwind { 8329a0f3ecSleecheechen; CHECK-LABEL: add_v8i16_31: 8429a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 8529a0f3ecSleecheechen; CHECK-NEXT: vld $vr0, $a1, 0 8629a0f3ecSleecheechen; CHECK-NEXT: vaddi.hu $vr0, $vr0, 31 8729a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 8829a0f3ecSleecheechen; CHECK-NEXT: ret 8929a0f3ecSleecheechenentry: 9029a0f3ecSleecheechen %v0 = load <8 x i16>, ptr %a0 9129a0f3ecSleecheechen %v1 = add <8 x i16> %v0, <i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31> 9229a0f3ecSleecheechen store <8 x i16> %v1, ptr %res 9329a0f3ecSleecheechen ret void 9429a0f3ecSleecheechen} 9529a0f3ecSleecheechen 9629a0f3ecSleecheechendefine void @add_v4i32_31(ptr %res, ptr %a0) nounwind { 9729a0f3ecSleecheechen; CHECK-LABEL: add_v4i32_31: 9829a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 9929a0f3ecSleecheechen; CHECK-NEXT: vld $vr0, $a1, 0 10029a0f3ecSleecheechen; CHECK-NEXT: vaddi.wu $vr0, $vr0, 31 10129a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 10229a0f3ecSleecheechen; CHECK-NEXT: ret 10329a0f3ecSleecheechenentry: 10429a0f3ecSleecheechen %v0 = load <4 x i32>, ptr %a0 10529a0f3ecSleecheechen %v1 = add <4 x i32> %v0, <i32 31, i32 31, i32 31, i32 31> 10629a0f3ecSleecheechen store <4 x i32> %v1, ptr %res 10729a0f3ecSleecheechen ret void 10829a0f3ecSleecheechen} 10929a0f3ecSleecheechen 11029a0f3ecSleecheechendefine void @add_v2i64_31(ptr %res, ptr %a0) nounwind { 11129a0f3ecSleecheechen; CHECK-LABEL: add_v2i64_31: 11229a0f3ecSleecheechen; CHECK: # %bb.0: # %entry 11329a0f3ecSleecheechen; CHECK-NEXT: vld $vr0, $a1, 0 11429a0f3ecSleecheechen; CHECK-NEXT: vaddi.du $vr0, $vr0, 31 11529a0f3ecSleecheechen; CHECK-NEXT: vst $vr0, $a0, 0 11629a0f3ecSleecheechen; CHECK-NEXT: ret 11729a0f3ecSleecheechenentry: 11829a0f3ecSleecheechen %v0 = load <2 x i64>, ptr %a0 11929a0f3ecSleecheechen %v1 = add <2 x i64> %v0, <i64 31, i64 31> 12029a0f3ecSleecheechen store <2 x i64> %v1, ptr %res 12129a0f3ecSleecheechen ret void 12229a0f3ecSleecheechen} 123