[libc++][NFC] Fix incorrect comment for vector::assign(iter, iter) test
[llvm-project.git] / llvm / test / CodeGen / LoongArch / lasx / ir-instruction / mul.ll
blob4745e7003cb1cd01af85f7444d62c450b96d1429
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 @mul_v32i8(ptr %res, ptr %a0, ptr %a1) nounwind {
5 ; CHECK-LABEL: mul_v32i8:
6 ; CHECK:       # %bb.0: # %entry
7 ; CHECK-NEXT:    xvld $xr0, $a1, 0
8 ; CHECK-NEXT:    xvld $xr1, $a2, 0
9 ; CHECK-NEXT:    xvmul.b $xr0, $xr0, $xr1
10 ; CHECK-NEXT:    xvst $xr0, $a0, 0
11 ; CHECK-NEXT:    ret
12 entry:
13   %v0 = load <32 x i8>, ptr %a0
14   %v1 = load <32 x i8>, ptr %a1
15   %v2 = mul <32 x i8> %v0, %v1
16   store <32 x i8> %v2, ptr %res
17   ret void
20 define void @mul_v16i16(ptr %res, ptr %a0, ptr %a1)  nounwind {
21 ; CHECK-LABEL: mul_v16i16:
22 ; CHECK:       # %bb.0: # %entry
23 ; CHECK-NEXT:    xvld $xr0, $a1, 0
24 ; CHECK-NEXT:    xvld $xr1, $a2, 0
25 ; CHECK-NEXT:    xvmul.h $xr0, $xr0, $xr1
26 ; CHECK-NEXT:    xvst $xr0, $a0, 0
27 ; CHECK-NEXT:    ret
28 entry:
29   %v0 = load <16 x i16>, ptr %a0
30   %v1 = load <16 x i16>, ptr %a1
31   %v2 = mul <16 x i16> %v0, %v1
32   store <16 x i16> %v2, ptr %res
33   ret void
36 define void @mul_v8i32(ptr %res, ptr %a0, ptr %a1) nounwind {
37 ; CHECK-LABEL: mul_v8i32:
38 ; CHECK:       # %bb.0: # %entry
39 ; CHECK-NEXT:    xvld $xr0, $a1, 0
40 ; CHECK-NEXT:    xvld $xr1, $a2, 0
41 ; CHECK-NEXT:    xvmul.w $xr0, $xr0, $xr1
42 ; CHECK-NEXT:    xvst $xr0, $a0, 0
43 ; CHECK-NEXT:    ret
44 entry:
45   %v0 = load <8 x i32>, ptr %a0
46   %v1 = load <8 x i32>, ptr %a1
47   %v2 = mul <8 x i32> %v0, %v1
48   store <8 x i32> %v2, ptr %res
49   ret void
52 define void @mul_v4i64(ptr %res, ptr %a0, ptr %a1) nounwind {
53 ; CHECK-LABEL: mul_v4i64:
54 ; CHECK:       # %bb.0: # %entry
55 ; CHECK-NEXT:    xvld $xr0, $a1, 0
56 ; CHECK-NEXT:    xvld $xr1, $a2, 0
57 ; CHECK-NEXT:    xvmul.d $xr0, $xr0, $xr1
58 ; CHECK-NEXT:    xvst $xr0, $a0, 0
59 ; CHECK-NEXT:    ret
60 entry:
61   %v0 = load <4 x i64>, ptr %a0
62   %v1 = load <4 x i64>, ptr %a1
63   %v2 = mul <4 x i64> %v0, %v1
64   store <4 x i64> %v2, ptr %res
65   ret void
68 define void @mul_square_v32i8(ptr %res, ptr %a0) nounwind {
69 ; CHECK-LABEL: mul_square_v32i8:
70 ; CHECK:       # %bb.0: # %entry
71 ; CHECK-NEXT:    xvld $xr0, $a1, 0
72 ; CHECK-NEXT:    xvmul.b $xr0, $xr0, $xr0
73 ; CHECK-NEXT:    xvst $xr0, $a0, 0
74 ; CHECK-NEXT:    ret
75 entry:
76   %v0 = load <32 x i8>, ptr %a0
77   %v1 = mul <32 x i8> %v0, %v0
78   store <32 x i8> %v1, ptr %res
79   ret void
82 define void @mul_square_v16i16(ptr %res, ptr %a0)  nounwind {
83 ; CHECK-LABEL: mul_square_v16i16:
84 ; CHECK:       # %bb.0: # %entry
85 ; CHECK-NEXT:    xvld $xr0, $a1, 0
86 ; CHECK-NEXT:    xvmul.h $xr0, $xr0, $xr0
87 ; CHECK-NEXT:    xvst $xr0, $a0, 0
88 ; CHECK-NEXT:    ret
89 entry:
90   %v0 = load <16 x i16>, ptr %a0
91   %v1 = mul <16 x i16> %v0, %v0
92   store <16 x i16> %v1, ptr %res
93   ret void
96 define void @mul_square_v8i32(ptr %res, ptr %a0) nounwind {
97 ; CHECK-LABEL: mul_square_v8i32:
98 ; CHECK:       # %bb.0: # %entry
99 ; CHECK-NEXT:    xvld $xr0, $a1, 0
100 ; CHECK-NEXT:    xvmul.w $xr0, $xr0, $xr0
101 ; CHECK-NEXT:    xvst $xr0, $a0, 0
102 ; CHECK-NEXT:    ret
103 entry:
104   %v0 = load <8 x i32>, ptr %a0
105   %v1 = mul <8 x i32> %v0, %v0
106   store <8 x i32> %v1, ptr %res
107   ret void
110 define void @mul_square_v4i64(ptr %res, ptr %a0) nounwind {
111 ; CHECK-LABEL: mul_square_v4i64:
112 ; CHECK:       # %bb.0: # %entry
113 ; CHECK-NEXT:    xvld $xr0, $a1, 0
114 ; CHECK-NEXT:    xvmul.d $xr0, $xr0, $xr0
115 ; CHECK-NEXT:    xvst $xr0, $a0, 0
116 ; CHECK-NEXT:    ret
117 entry:
118   %v0 = load <4 x i64>, ptr %a0
119   %v1 = mul <4 x i64> %v0, %v0
120   store <4 x i64> %v1, ptr %res
121   ret void
124 define void @mul_v32i8_8(ptr %res, ptr %a0) nounwind {
125 ; CHECK-LABEL: mul_v32i8_8:
126 ; CHECK:       # %bb.0: # %entry
127 ; CHECK-NEXT:    xvld $xr0, $a1, 0
128 ; CHECK-NEXT:    xvslli.b $xr0, $xr0, 3
129 ; CHECK-NEXT:    xvst $xr0, $a0, 0
130 ; CHECK-NEXT:    ret
131 entry:
132   %v0 = load <32 x i8>, ptr %a0
133   %v1 = mul <32 x i8> %v0, <i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8, i8 8>
134   store <32 x i8> %v1, ptr %res
135   ret void
138 define void @mul_v16i16_8(ptr %res, ptr %a0)  nounwind {
139 ; CHECK-LABEL: mul_v16i16_8:
140 ; CHECK:       # %bb.0: # %entry
141 ; CHECK-NEXT:    xvld $xr0, $a1, 0
142 ; CHECK-NEXT:    xvslli.h $xr0, $xr0, 3
143 ; CHECK-NEXT:    xvst $xr0, $a0, 0
144 ; CHECK-NEXT:    ret
145 entry:
146   %v0 = load <16 x i16>, ptr %a0
147   %v1 = mul <16 x i16> %v0, <i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8, i16 8>
148   store <16 x i16> %v1, ptr %res
149   ret void
152 define void @mul_v8i32_8(ptr %res, ptr %a0) nounwind {
153 ; CHECK-LABEL: mul_v8i32_8:
154 ; CHECK:       # %bb.0: # %entry
155 ; CHECK-NEXT:    xvld $xr0, $a1, 0
156 ; CHECK-NEXT:    xvslli.w $xr0, $xr0, 3
157 ; CHECK-NEXT:    xvst $xr0, $a0, 0
158 ; CHECK-NEXT:    ret
159 entry:
160   %v0 = load <8 x i32>, ptr %a0
161   %v1 = mul <8 x i32> %v0, <i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8>
162   store <8 x i32> %v1, ptr %res
163   ret void
166 define void @mul_v4i64_8(ptr %res, ptr %a0) nounwind {
167 ; CHECK-LABEL: mul_v4i64_8:
168 ; CHECK:       # %bb.0: # %entry
169 ; CHECK-NEXT:    xvld $xr0, $a1, 0
170 ; CHECK-NEXT:    xvslli.d $xr0, $xr0, 3
171 ; CHECK-NEXT:    xvst $xr0, $a0, 0
172 ; CHECK-NEXT:    ret
173 entry:
174   %v0 = load <4 x i64>, ptr %a0
175   %v1 = mul <4 x i64> %v0, <i64 8, i64 8, i64 8, i64 8>
176   store <4 x i64> %v1, ptr %res
177   ret void
180 define void @mul_v32i8_17(ptr %res, ptr %a0) nounwind {
181 ; CHECK-LABEL: mul_v32i8_17:
182 ; CHECK:       # %bb.0: # %entry
183 ; CHECK-NEXT:    xvld $xr0, $a1, 0
184 ; CHECK-NEXT:    xvrepli.b $xr1, 17
185 ; CHECK-NEXT:    xvmul.b $xr0, $xr0, $xr1
186 ; CHECK-NEXT:    xvst $xr0, $a0, 0
187 ; CHECK-NEXT:    ret
188 entry:
189   %v0 = load <32 x i8>, ptr %a0
190   %v1 = mul <32 x i8> %v0, <i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17, i8 17>
191   store <32 x i8> %v1, ptr %res
192   ret void
195 define void @mul_v16i16_17(ptr %res, ptr %a0) nounwind {
196 ; CHECK-LABEL: mul_v16i16_17:
197 ; CHECK:       # %bb.0: # %entry
198 ; CHECK-NEXT:    xvld $xr0, $a1, 0
199 ; CHECK-NEXT:    xvrepli.h $xr1, 17
200 ; CHECK-NEXT:    xvmul.h $xr0, $xr0, $xr1
201 ; CHECK-NEXT:    xvst $xr0, $a0, 0
202 ; CHECK-NEXT:    ret
203 entry:
204   %v0 = load <16 x i16>, ptr %a0
205   %v1 = mul <16 x i16> %v0, <i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17, i16 17>
206   store <16 x i16> %v1, ptr %res
207   ret void
210 define void @mul_v8i32_17(ptr %res, ptr %a0) nounwind {
211 ; CHECK-LABEL: mul_v8i32_17:
212 ; CHECK:       # %bb.0: # %entry
213 ; CHECK-NEXT:    xvld $xr0, $a1, 0
214 ; CHECK-NEXT:    xvrepli.w $xr1, 17
215 ; CHECK-NEXT:    xvmul.w $xr0, $xr0, $xr1
216 ; CHECK-NEXT:    xvst $xr0, $a0, 0
217 ; CHECK-NEXT:    ret
218 entry:
219   %v0 = load <8 x i32>, ptr %a0
220   %v1 = mul <8 x i32> %v0, <i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17, i32 17>
221   store <8 x i32> %v1, ptr %res
222   ret void
225 define void @mul_v4i64_17(ptr %res, ptr %a0) nounwind {
226 ; CHECK-LABEL: mul_v4i64_17:
227 ; CHECK:       # %bb.0: # %entry
228 ; CHECK-NEXT:    xvld $xr0, $a1, 0
229 ; CHECK-NEXT:    xvrepli.d $xr1, 17
230 ; CHECK-NEXT:    xvmul.d $xr0, $xr0, $xr1
231 ; CHECK-NEXT:    xvst $xr0, $a0, 0
232 ; CHECK-NEXT:    ret
233 entry:
234   %v0 = load <4 x i64>, ptr %a0
235   %v1 = mul <4 x i64> %v0, <i64 17, i64 17, i64 17, i64 17>
236   store <4 x i64> %v1, ptr %res
237   ret void