xref: /llvm-project/llvm/test/CodeGen/LoongArch/lsx/ir-instruction/add.ll (revision a5c90e48b6f11bc6db7344503589648f76b16d80)
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