xref: /llvm-project/llvm/test/CodeGen/LoongArch/lasx/ir-instruction/add.ll (revision a5c90e48b6f11bc6db7344503589648f76b16d80)
1dbbc7c31Sleecheechen; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2dbbc7c31Sleecheechen; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
3dbbc7c31Sleecheechen
4dbbc7c31Sleecheechendefine void @add_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind {
5dbbc7c31Sleecheechen; CHECK-LABEL: add_v32i8:
6dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
7*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
8*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
9*a5c90e48Swanglei; CHECK-NEXT:    xvadd.b $xr0, $xr0, $xr1
10dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
11dbbc7c31Sleecheechen; CHECK-NEXT:    ret
12dbbc7c31Sleecheechenentry:
13dbbc7c31Sleecheechen  %v0 = load <32 x i8>, ptr %a0
14dbbc7c31Sleecheechen  %v1 = load <32 x i8>, ptr %a1
15dbbc7c31Sleecheechen  %v2 = add <32 x i8> %v0, %v1
16dbbc7c31Sleecheechen  store <32 x i8> %v2, ptr %res
17dbbc7c31Sleecheechen  ret void
18dbbc7c31Sleecheechen}
19dbbc7c31Sleecheechen
20dbbc7c31Sleecheechendefine void @add_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind {
21dbbc7c31Sleecheechen; CHECK-LABEL: add_v16i16:
22dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
23*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
24*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
25*a5c90e48Swanglei; CHECK-NEXT:    xvadd.h $xr0, $xr0, $xr1
26dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
27dbbc7c31Sleecheechen; CHECK-NEXT:    ret
28dbbc7c31Sleecheechenentry:
29dbbc7c31Sleecheechen  %v0 = load <16 x i16>, ptr %a0
30dbbc7c31Sleecheechen  %v1 = load <16 x i16>, ptr %a1
31dbbc7c31Sleecheechen  %v2 = add <16 x i16> %v0, %v1
32dbbc7c31Sleecheechen  store <16 x i16> %v2, ptr %res
33dbbc7c31Sleecheechen  ret void
34dbbc7c31Sleecheechen}
35dbbc7c31Sleecheechen
36dbbc7c31Sleecheechendefine void @add_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind {
37dbbc7c31Sleecheechen; CHECK-LABEL: add_v8i32:
38dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
39*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
40*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
41*a5c90e48Swanglei; CHECK-NEXT:    xvadd.w $xr0, $xr0, $xr1
42dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
43dbbc7c31Sleecheechen; CHECK-NEXT:    ret
44dbbc7c31Sleecheechenentry:
45dbbc7c31Sleecheechen  %v0 = load <8 x i32>, ptr %a0
46dbbc7c31Sleecheechen  %v1 = load <8 x i32>, ptr %a1
47dbbc7c31Sleecheechen  %v2 = add <8 x i32> %v0, %v1
48dbbc7c31Sleecheechen  store <8 x i32> %v2, ptr %res
49dbbc7c31Sleecheechen  ret void
50dbbc7c31Sleecheechen}
51dbbc7c31Sleecheechen
52dbbc7c31Sleecheechendefine void @add_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind {
53dbbc7c31Sleecheechen; CHECK-LABEL: add_v4i64:
54dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
55*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr0, $a1, 0
56*a5c90e48Swanglei; CHECK-NEXT:    xvld $xr1, $a2, 0
57*a5c90e48Swanglei; CHECK-NEXT:    xvadd.d $xr0, $xr0, $xr1
58dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
59dbbc7c31Sleecheechen; CHECK-NEXT:    ret
60dbbc7c31Sleecheechenentry:
61dbbc7c31Sleecheechen  %v0 = load <4 x i64>, ptr %a0
62dbbc7c31Sleecheechen  %v1 = load <4 x i64>, ptr %a1
63dbbc7c31Sleecheechen  %v2 = add <4 x i64> %v0, %v1
64dbbc7c31Sleecheechen  store <4 x i64> %v2, ptr %res
65dbbc7c31Sleecheechen  ret void
66dbbc7c31Sleecheechen}
67dbbc7c31Sleecheechen
68dbbc7c31Sleecheechendefine void @add_v32i8_31(ptr %res, ptr %a0) nounwind {
69dbbc7c31Sleecheechen; CHECK-LABEL: add_v32i8_31:
70dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
71dbbc7c31Sleecheechen; CHECK-NEXT:    xvld $xr0, $a1, 0
72dbbc7c31Sleecheechen; CHECK-NEXT:    xvaddi.bu $xr0, $xr0, 31
73dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
74dbbc7c31Sleecheechen; CHECK-NEXT:    ret
75dbbc7c31Sleecheechenentry:
76dbbc7c31Sleecheechen  %v0 = load <32 x i8>, ptr %a0
77dbbc7c31Sleecheechen  %v1 = add <32 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, 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>
78dbbc7c31Sleecheechen  store <32 x i8> %v1, ptr %res
79dbbc7c31Sleecheechen  ret void
80dbbc7c31Sleecheechen}
81dbbc7c31Sleecheechen
82dbbc7c31Sleecheechendefine void @add_v16i16_31(ptr %res, ptr %a0) nounwind {
83dbbc7c31Sleecheechen; CHECK-LABEL: add_v16i16_31:
84dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
85dbbc7c31Sleecheechen; CHECK-NEXT:    xvld $xr0, $a1, 0
86dbbc7c31Sleecheechen; CHECK-NEXT:    xvaddi.hu $xr0, $xr0, 31
87dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
88dbbc7c31Sleecheechen; CHECK-NEXT:    ret
89dbbc7c31Sleecheechenentry:
90dbbc7c31Sleecheechen  %v0 = load <16 x i16>, ptr %a0
91dbbc7c31Sleecheechen  %v1 = add <16 x i16> %v0, <i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31, i16 31>
92dbbc7c31Sleecheechen  store <16 x i16> %v1, ptr %res
93dbbc7c31Sleecheechen  ret void
94dbbc7c31Sleecheechen}
95dbbc7c31Sleecheechen
96dbbc7c31Sleecheechendefine void @add_v8i32_31(ptr %res, ptr %a0) nounwind {
97dbbc7c31Sleecheechen; CHECK-LABEL: add_v8i32_31:
98dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
99dbbc7c31Sleecheechen; CHECK-NEXT:    xvld $xr0, $a1, 0
100dbbc7c31Sleecheechen; CHECK-NEXT:    xvaddi.wu $xr0, $xr0, 31
101dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
102dbbc7c31Sleecheechen; CHECK-NEXT:    ret
103dbbc7c31Sleecheechenentry:
104dbbc7c31Sleecheechen  %v0 = load <8 x i32>, ptr %a0
105dbbc7c31Sleecheechen  %v1 = add <8 x i32> %v0, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>
106dbbc7c31Sleecheechen  store <8 x i32> %v1, ptr %res
107dbbc7c31Sleecheechen  ret void
108dbbc7c31Sleecheechen}
109dbbc7c31Sleecheechen
110dbbc7c31Sleecheechendefine void @add_v4i64_31(ptr %res, ptr %a0) nounwind {
111dbbc7c31Sleecheechen; CHECK-LABEL: add_v4i64_31:
112dbbc7c31Sleecheechen; CHECK:       # %bb.0: # %entry
113dbbc7c31Sleecheechen; CHECK-NEXT:    xvld $xr0, $a1, 0
114dbbc7c31Sleecheechen; CHECK-NEXT:    xvaddi.du $xr0, $xr0, 31
115dbbc7c31Sleecheechen; CHECK-NEXT:    xvst $xr0, $a0, 0
116dbbc7c31Sleecheechen; CHECK-NEXT:    ret
117dbbc7c31Sleecheechenentry:
118dbbc7c31Sleecheechen  %v0 = load <4 x i64>, ptr %a0
119dbbc7c31Sleecheechen  %v1 = add <4 x i64> %v0, <i64 31, i64 31, i64 31, i64 31>
120dbbc7c31Sleecheechen  store <4 x i64> %v1, ptr %res
121dbbc7c31Sleecheechen  ret void
122dbbc7c31Sleecheechen}
123