1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 4
2 ; RUN: llc --mtriple=loongarch64 --mattr=+lasx < %s | FileCheck %s
4 define void @add_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind {
5 ; CHECK-LABEL: add_v32i8:
6 ; CHECK: # %bb.0: # %entry
7 ; CHECK-NEXT: xvld $xr0, $a1, 0
8 ; CHECK-NEXT: xvld $xr1, $a2, 0
9 ; CHECK-NEXT: xvadd.b $xr0, $xr0, $xr1
10 ; CHECK-NEXT: xvst $xr0, $a0, 0
13 %v0 = load <32 x i8>, ptr %a0
14 %v1 = load <32 x i8>, ptr %a1
15 %v2 = add <32 x i8> %v0, %v1
16 store <32 x i8> %v2, ptr %res
20 define void @add_v16i16(ptr %res, ptr %a0, ptr %a1) nounwind {
21 ; CHECK-LABEL: add_v16i16:
22 ; CHECK: # %bb.0: # %entry
23 ; CHECK-NEXT: xvld $xr0, $a1, 0
24 ; CHECK-NEXT: xvld $xr1, $a2, 0
25 ; CHECK-NEXT: xvadd.h $xr0, $xr0, $xr1
26 ; CHECK-NEXT: xvst $xr0, $a0, 0
29 %v0 = load <16 x i16>, ptr %a0
30 %v1 = load <16 x i16>, ptr %a1
31 %v2 = add <16 x i16> %v0, %v1
32 store <16 x i16> %v2, ptr %res
36 define void @add_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind {
37 ; CHECK-LABEL: add_v8i32:
38 ; CHECK: # %bb.0: # %entry
39 ; CHECK-NEXT: xvld $xr0, $a1, 0
40 ; CHECK-NEXT: xvld $xr1, $a2, 0
41 ; CHECK-NEXT: xvadd.w $xr0, $xr0, $xr1
42 ; CHECK-NEXT: xvst $xr0, $a0, 0
45 %v0 = load <8 x i32>, ptr %a0
46 %v1 = load <8 x i32>, ptr %a1
47 %v2 = add <8 x i32> %v0, %v1
48 store <8 x i32> %v2, ptr %res
52 define void @add_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind {
53 ; CHECK-LABEL: add_v4i64:
54 ; CHECK: # %bb.0: # %entry
55 ; CHECK-NEXT: xvld $xr0, $a1, 0
56 ; CHECK-NEXT: xvld $xr1, $a2, 0
57 ; CHECK-NEXT: xvadd.d $xr0, $xr0, $xr1
58 ; CHECK-NEXT: xvst $xr0, $a0, 0
61 %v0 = load <4 x i64>, ptr %a0
62 %v1 = load <4 x i64>, ptr %a1
63 %v2 = add <4 x i64> %v0, %v1
64 store <4 x i64> %v2, ptr %res
68 define void @add_v32i8_31(ptr %res, ptr %a0) nounwind {
69 ; CHECK-LABEL: add_v32i8_31:
70 ; CHECK: # %bb.0: # %entry
71 ; CHECK-NEXT: xvld $xr0, $a1, 0
72 ; CHECK-NEXT: xvaddi.bu $xr0, $xr0, 31
73 ; CHECK-NEXT: xvst $xr0, $a0, 0
76 %v0 = load <32 x i8>, ptr %a0
77 %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>
78 store <32 x i8> %v1, ptr %res
82 define void @add_v16i16_31(ptr %res, ptr %a0) nounwind {
83 ; CHECK-LABEL: add_v16i16_31:
84 ; CHECK: # %bb.0: # %entry
85 ; CHECK-NEXT: xvld $xr0, $a1, 0
86 ; CHECK-NEXT: xvaddi.hu $xr0, $xr0, 31
87 ; CHECK-NEXT: xvst $xr0, $a0, 0
90 %v0 = load <16 x i16>, ptr %a0
91 %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>
92 store <16 x i16> %v1, ptr %res
96 define void @add_v8i32_31(ptr %res, ptr %a0) nounwind {
97 ; CHECK-LABEL: add_v8i32_31:
98 ; CHECK: # %bb.0: # %entry
99 ; CHECK-NEXT: xvld $xr0, $a1, 0
100 ; CHECK-NEXT: xvaddi.wu $xr0, $xr0, 31
101 ; CHECK-NEXT: xvst $xr0, $a0, 0
104 %v0 = load <8 x i32>, ptr %a0
105 %v1 = add <8 x i32> %v0, <i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31, i32 31>
106 store <8 x i32> %v1, ptr %res
110 define void @add_v4i64_31(ptr %res, ptr %a0) nounwind {
111 ; CHECK-LABEL: add_v4i64_31:
112 ; CHECK: # %bb.0: # %entry
113 ; CHECK-NEXT: xvld $xr0, $a1, 0
114 ; CHECK-NEXT: xvaddi.du $xr0, $xr0, 31
115 ; CHECK-NEXT: xvst $xr0, $a0, 0
118 %v0 = load <4 x i64>, ptr %a0
119 %v1 = add <4 x i64> %v0, <i64 31, i64 31, i64 31, i64 31>
120 store <4 x i64> %v1, ptr %res