[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / RISCV / rvv / fixed-vectors-abs.ll
blob60561262d845d169097e1a391ae45d4aa3b0d39b
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: llc -mtriple=riscv32 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX2
3 ; RUN: llc -mtriple=riscv64 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=2 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX2
4 ; RUN: llc -mtriple=riscv32 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX1-RV32
5 ; RUN: llc -mtriple=riscv64 -mattr=+v -riscv-v-fixed-length-vector-lmul-max=1 -verify-machineinstrs < %s | FileCheck %s --check-prefixes=CHECK,LMULMAX1-RV64
7 define void @abs_v16i8(ptr %x) {
8 ; CHECK-LABEL: abs_v16i8:
9 ; CHECK:       # %bb.0:
10 ; CHECK-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
11 ; CHECK-NEXT:    vle8.v v8, (a0)
12 ; CHECK-NEXT:    vrsub.vi v9, v8, 0
13 ; CHECK-NEXT:    vmax.vv v8, v8, v9
14 ; CHECK-NEXT:    vse8.v v8, (a0)
15 ; CHECK-NEXT:    ret
16   %a = load <16 x i8>, ptr %x
17   %b = call <16 x i8> @llvm.abs.v16i8(<16 x i8> %a, i1 false)
18   store <16 x i8> %b, ptr %x
19   ret void
21 declare <16 x i8> @llvm.abs.v16i8(<16 x i8>, i1)
23 define void @abs_v8i16(ptr %x) {
24 ; CHECK-LABEL: abs_v8i16:
25 ; CHECK:       # %bb.0:
26 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
27 ; CHECK-NEXT:    vle16.v v8, (a0)
28 ; CHECK-NEXT:    vrsub.vi v9, v8, 0
29 ; CHECK-NEXT:    vmax.vv v8, v8, v9
30 ; CHECK-NEXT:    vse16.v v8, (a0)
31 ; CHECK-NEXT:    ret
32   %a = load <8 x i16>, ptr %x
33   %b = call <8 x i16> @llvm.abs.v8i16(<8 x i16> %a, i1 false)
34   store <8 x i16> %b, ptr %x
35   ret void
37 declare <8 x i16> @llvm.abs.v8i16(<8 x i16>, i1)
39 define void @abs_v6i16(ptr %x) {
40 ; CHECK-LABEL: abs_v6i16:
41 ; CHECK:       # %bb.0:
42 ; CHECK-NEXT:    vsetivli zero, 6, e16, m1, ta, ma
43 ; CHECK-NEXT:    vle16.v v8, (a0)
44 ; CHECK-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
45 ; CHECK-NEXT:    vrsub.vi v9, v8, 0
46 ; CHECK-NEXT:    vmax.vv v8, v8, v9
47 ; CHECK-NEXT:    vsetivli zero, 6, e16, m1, ta, ma
48 ; CHECK-NEXT:    vse16.v v8, (a0)
49 ; CHECK-NEXT:    ret
50   %a = load <6 x i16>, ptr %x
51   %b = call <6 x i16> @llvm.abs.v6i16(<6 x i16> %a, i1 false)
52   store <6 x i16> %b, ptr %x
53   ret void
55 declare <6 x i16> @llvm.abs.v6i16(<6 x i16>, i1)
57 define void @abs_v4i32(ptr %x) {
58 ; CHECK-LABEL: abs_v4i32:
59 ; CHECK:       # %bb.0:
60 ; CHECK-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
61 ; CHECK-NEXT:    vle32.v v8, (a0)
62 ; CHECK-NEXT:    vrsub.vi v9, v8, 0
63 ; CHECK-NEXT:    vmax.vv v8, v8, v9
64 ; CHECK-NEXT:    vse32.v v8, (a0)
65 ; CHECK-NEXT:    ret
66   %a = load <4 x i32>, ptr %x
67   %b = call <4 x i32> @llvm.abs.v4i32(<4 x i32> %a, i1 false)
68   store <4 x i32> %b, ptr %x
69   ret void
71 declare <4 x i32> @llvm.abs.v4i32(<4 x i32>, i1)
73 define void @abs_v2i64(ptr %x) {
74 ; CHECK-LABEL: abs_v2i64:
75 ; CHECK:       # %bb.0:
76 ; CHECK-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
77 ; CHECK-NEXT:    vle64.v v8, (a0)
78 ; CHECK-NEXT:    vrsub.vi v9, v8, 0
79 ; CHECK-NEXT:    vmax.vv v8, v8, v9
80 ; CHECK-NEXT:    vse64.v v8, (a0)
81 ; CHECK-NEXT:    ret
82   %a = load <2 x i64>, ptr %x
83   %b = call <2 x i64> @llvm.abs.v2i64(<2 x i64> %a, i1 false)
84   store <2 x i64> %b, ptr %x
85   ret void
87 declare <2 x i64> @llvm.abs.v2i64(<2 x i64>, i1)
89 define void @abs_v32i8(ptr %x) {
90 ; LMULMAX2-LABEL: abs_v32i8:
91 ; LMULMAX2:       # %bb.0:
92 ; LMULMAX2-NEXT:    li a1, 32
93 ; LMULMAX2-NEXT:    vsetvli zero, a1, e8, m2, ta, ma
94 ; LMULMAX2-NEXT:    vle8.v v8, (a0)
95 ; LMULMAX2-NEXT:    vrsub.vi v10, v8, 0
96 ; LMULMAX2-NEXT:    vmax.vv v8, v8, v10
97 ; LMULMAX2-NEXT:    vse8.v v8, (a0)
98 ; LMULMAX2-NEXT:    ret
100 ; LMULMAX1-RV32-LABEL: abs_v32i8:
101 ; LMULMAX1-RV32:       # %bb.0:
102 ; LMULMAX1-RV32-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
103 ; LMULMAX1-RV32-NEXT:    addi a1, a0, 16
104 ; LMULMAX1-RV32-NEXT:    vle8.v v8, (a1)
105 ; LMULMAX1-RV32-NEXT:    vle8.v v9, (a0)
106 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v8, 0
107 ; LMULMAX1-RV32-NEXT:    vmax.vv v8, v8, v10
108 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v9, 0
109 ; LMULMAX1-RV32-NEXT:    vmax.vv v9, v9, v10
110 ; LMULMAX1-RV32-NEXT:    vse8.v v9, (a0)
111 ; LMULMAX1-RV32-NEXT:    vse8.v v8, (a1)
112 ; LMULMAX1-RV32-NEXT:    ret
114 ; LMULMAX1-RV64-LABEL: abs_v32i8:
115 ; LMULMAX1-RV64:       # %bb.0:
116 ; LMULMAX1-RV64-NEXT:    vsetivli zero, 16, e8, m1, ta, ma
117 ; LMULMAX1-RV64-NEXT:    addi a1, a0, 16
118 ; LMULMAX1-RV64-NEXT:    vle8.v v8, (a1)
119 ; LMULMAX1-RV64-NEXT:    vle8.v v9, (a0)
120 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v8, 0
121 ; LMULMAX1-RV64-NEXT:    vmax.vv v8, v8, v10
122 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v9, 0
123 ; LMULMAX1-RV64-NEXT:    vmax.vv v9, v9, v10
124 ; LMULMAX1-RV64-NEXT:    vse8.v v9, (a0)
125 ; LMULMAX1-RV64-NEXT:    vse8.v v8, (a1)
126 ; LMULMAX1-RV64-NEXT:    ret
127   %a = load <32 x i8>, ptr %x
128   %b = call <32 x i8> @llvm.abs.v32i8(<32 x i8> %a, i1 false)
129   store <32 x i8> %b, ptr %x
130   ret void
132 declare <32 x i8> @llvm.abs.v32i8(<32 x i8>, i1)
134 define void @abs_v16i16(ptr %x) {
135 ; LMULMAX2-LABEL: abs_v16i16:
136 ; LMULMAX2:       # %bb.0:
137 ; LMULMAX2-NEXT:    vsetivli zero, 16, e16, m2, ta, ma
138 ; LMULMAX2-NEXT:    vle16.v v8, (a0)
139 ; LMULMAX2-NEXT:    vrsub.vi v10, v8, 0
140 ; LMULMAX2-NEXT:    vmax.vv v8, v8, v10
141 ; LMULMAX2-NEXT:    vse16.v v8, (a0)
142 ; LMULMAX2-NEXT:    ret
144 ; LMULMAX1-RV32-LABEL: abs_v16i16:
145 ; LMULMAX1-RV32:       # %bb.0:
146 ; LMULMAX1-RV32-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
147 ; LMULMAX1-RV32-NEXT:    addi a1, a0, 16
148 ; LMULMAX1-RV32-NEXT:    vle16.v v8, (a1)
149 ; LMULMAX1-RV32-NEXT:    vle16.v v9, (a0)
150 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v8, 0
151 ; LMULMAX1-RV32-NEXT:    vmax.vv v8, v8, v10
152 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v9, 0
153 ; LMULMAX1-RV32-NEXT:    vmax.vv v9, v9, v10
154 ; LMULMAX1-RV32-NEXT:    vse16.v v9, (a0)
155 ; LMULMAX1-RV32-NEXT:    vse16.v v8, (a1)
156 ; LMULMAX1-RV32-NEXT:    ret
158 ; LMULMAX1-RV64-LABEL: abs_v16i16:
159 ; LMULMAX1-RV64:       # %bb.0:
160 ; LMULMAX1-RV64-NEXT:    vsetivli zero, 8, e16, m1, ta, ma
161 ; LMULMAX1-RV64-NEXT:    addi a1, a0, 16
162 ; LMULMAX1-RV64-NEXT:    vle16.v v8, (a1)
163 ; LMULMAX1-RV64-NEXT:    vle16.v v9, (a0)
164 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v8, 0
165 ; LMULMAX1-RV64-NEXT:    vmax.vv v8, v8, v10
166 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v9, 0
167 ; LMULMAX1-RV64-NEXT:    vmax.vv v9, v9, v10
168 ; LMULMAX1-RV64-NEXT:    vse16.v v9, (a0)
169 ; LMULMAX1-RV64-NEXT:    vse16.v v8, (a1)
170 ; LMULMAX1-RV64-NEXT:    ret
171   %a = load <16 x i16>, ptr %x
172   %b = call <16 x i16> @llvm.abs.v16i16(<16 x i16> %a, i1 false)
173   store <16 x i16> %b, ptr %x
174   ret void
176 declare <16 x i16> @llvm.abs.v16i16(<16 x i16>, i1)
178 define void @abs_v8i32(ptr %x) {
179 ; LMULMAX2-LABEL: abs_v8i32:
180 ; LMULMAX2:       # %bb.0:
181 ; LMULMAX2-NEXT:    vsetivli zero, 8, e32, m2, ta, ma
182 ; LMULMAX2-NEXT:    vle32.v v8, (a0)
183 ; LMULMAX2-NEXT:    vrsub.vi v10, v8, 0
184 ; LMULMAX2-NEXT:    vmax.vv v8, v8, v10
185 ; LMULMAX2-NEXT:    vse32.v v8, (a0)
186 ; LMULMAX2-NEXT:    ret
188 ; LMULMAX1-RV32-LABEL: abs_v8i32:
189 ; LMULMAX1-RV32:       # %bb.0:
190 ; LMULMAX1-RV32-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
191 ; LMULMAX1-RV32-NEXT:    addi a1, a0, 16
192 ; LMULMAX1-RV32-NEXT:    vle32.v v8, (a1)
193 ; LMULMAX1-RV32-NEXT:    vle32.v v9, (a0)
194 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v8, 0
195 ; LMULMAX1-RV32-NEXT:    vmax.vv v8, v8, v10
196 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v9, 0
197 ; LMULMAX1-RV32-NEXT:    vmax.vv v9, v9, v10
198 ; LMULMAX1-RV32-NEXT:    vse32.v v9, (a0)
199 ; LMULMAX1-RV32-NEXT:    vse32.v v8, (a1)
200 ; LMULMAX1-RV32-NEXT:    ret
202 ; LMULMAX1-RV64-LABEL: abs_v8i32:
203 ; LMULMAX1-RV64:       # %bb.0:
204 ; LMULMAX1-RV64-NEXT:    vsetivli zero, 4, e32, m1, ta, ma
205 ; LMULMAX1-RV64-NEXT:    addi a1, a0, 16
206 ; LMULMAX1-RV64-NEXT:    vle32.v v8, (a1)
207 ; LMULMAX1-RV64-NEXT:    vle32.v v9, (a0)
208 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v8, 0
209 ; LMULMAX1-RV64-NEXT:    vmax.vv v8, v8, v10
210 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v9, 0
211 ; LMULMAX1-RV64-NEXT:    vmax.vv v9, v9, v10
212 ; LMULMAX1-RV64-NEXT:    vse32.v v9, (a0)
213 ; LMULMAX1-RV64-NEXT:    vse32.v v8, (a1)
214 ; LMULMAX1-RV64-NEXT:    ret
215   %a = load <8 x i32>, ptr %x
216   %b = call <8 x i32> @llvm.abs.v8i32(<8 x i32> %a, i1 false)
217   store <8 x i32> %b, ptr %x
218   ret void
220 declare <8 x i32> @llvm.abs.v8i32(<8 x i32>, i1)
222 define void @abs_v4i64(ptr %x) {
223 ; LMULMAX2-LABEL: abs_v4i64:
224 ; LMULMAX2:       # %bb.0:
225 ; LMULMAX2-NEXT:    vsetivli zero, 4, e64, m2, ta, ma
226 ; LMULMAX2-NEXT:    vle64.v v8, (a0)
227 ; LMULMAX2-NEXT:    vrsub.vi v10, v8, 0
228 ; LMULMAX2-NEXT:    vmax.vv v8, v8, v10
229 ; LMULMAX2-NEXT:    vse64.v v8, (a0)
230 ; LMULMAX2-NEXT:    ret
232 ; LMULMAX1-RV32-LABEL: abs_v4i64:
233 ; LMULMAX1-RV32:       # %bb.0:
234 ; LMULMAX1-RV32-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
235 ; LMULMAX1-RV32-NEXT:    addi a1, a0, 16
236 ; LMULMAX1-RV32-NEXT:    vle64.v v8, (a1)
237 ; LMULMAX1-RV32-NEXT:    vle64.v v9, (a0)
238 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v8, 0
239 ; LMULMAX1-RV32-NEXT:    vmax.vv v8, v8, v10
240 ; LMULMAX1-RV32-NEXT:    vrsub.vi v10, v9, 0
241 ; LMULMAX1-RV32-NEXT:    vmax.vv v9, v9, v10
242 ; LMULMAX1-RV32-NEXT:    vse64.v v9, (a0)
243 ; LMULMAX1-RV32-NEXT:    vse64.v v8, (a1)
244 ; LMULMAX1-RV32-NEXT:    ret
246 ; LMULMAX1-RV64-LABEL: abs_v4i64:
247 ; LMULMAX1-RV64:       # %bb.0:
248 ; LMULMAX1-RV64-NEXT:    vsetivli zero, 2, e64, m1, ta, ma
249 ; LMULMAX1-RV64-NEXT:    addi a1, a0, 16
250 ; LMULMAX1-RV64-NEXT:    vle64.v v8, (a1)
251 ; LMULMAX1-RV64-NEXT:    vle64.v v9, (a0)
252 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v8, 0
253 ; LMULMAX1-RV64-NEXT:    vmax.vv v8, v8, v10
254 ; LMULMAX1-RV64-NEXT:    vrsub.vi v10, v9, 0
255 ; LMULMAX1-RV64-NEXT:    vmax.vv v9, v9, v10
256 ; LMULMAX1-RV64-NEXT:    vse64.v v9, (a0)
257 ; LMULMAX1-RV64-NEXT:    vse64.v v8, (a1)
258 ; LMULMAX1-RV64-NEXT:    ret
259   %a = load <4 x i64>, ptr %x
260   %b = call <4 x i64> @llvm.abs.v4i64(<4 x i64> %a, i1 false)
261   store <4 x i64> %b, ptr %x
262   ret void
264 declare <4 x i64> @llvm.abs.v4i64(<4 x i64>, i1)