1
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
2
+ ; RUN: llc -mtriple=riscv32 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
3
+ ; RUN: llc -mtriple=riscv64 -mattr=+v -verify-machineinstrs < %s | FileCheck %s
6
4
7
5
define void @abs_v16i8 (ptr %x ) {
8
6
; CHECK-LABEL: abs_v16i8:
@@ -87,43 +85,15 @@ define void @abs_v2i64(ptr %x) {
87
85
declare <2 x i64 > @llvm.abs.v2i64 (<2 x i64 >, i1 )
88
86
89
87
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
99
- ;
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
113
- ;
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
88
+ ; CHECK-LABEL: abs_v32i8:
89
+ ; CHECK: # %bb.0:
90
+ ; CHECK-NEXT: li a1, 32
91
+ ; CHECK-NEXT: vsetvli zero, a1, e8, m2, ta, ma
92
+ ; CHECK-NEXT: vle8.v v8, (a0)
93
+ ; CHECK-NEXT: vrsub.vi v10, v8, 0
94
+ ; CHECK-NEXT: vmax.vv v8, v8, v10
95
+ ; CHECK-NEXT: vse8.v v8, (a0)
96
+ ; CHECK-NEXT: ret
127
97
%a = load <32 x i8 >, ptr %x
128
98
%b = call <32 x i8 > @llvm.abs.v32i8 (<32 x i8 > %a , i1 false )
129
99
store <32 x i8 > %b , ptr %x
@@ -132,42 +102,14 @@ define void @abs_v32i8(ptr %x) {
132
102
declare <32 x i8 > @llvm.abs.v32i8 (<32 x i8 >, i1 )
133
103
134
104
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
143
- ;
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
157
- ;
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
105
+ ; CHECK-LABEL: abs_v16i16:
106
+ ; CHECK: # %bb.0:
107
+ ; CHECK-NEXT: vsetivli zero, 16, e16, m2, ta, ma
108
+ ; CHECK-NEXT: vle16.v v8, (a0)
109
+ ; CHECK-NEXT: vrsub.vi v10, v8, 0
110
+ ; CHECK-NEXT: vmax.vv v8, v8, v10
111
+ ; CHECK-NEXT: vse16.v v8, (a0)
112
+ ; CHECK-NEXT: ret
171
113
%a = load <16 x i16 >, ptr %x
172
114
%b = call <16 x i16 > @llvm.abs.v16i16 (<16 x i16 > %a , i1 false )
173
115
store <16 x i16 > %b , ptr %x
@@ -176,42 +118,14 @@ define void @abs_v16i16(ptr %x) {
176
118
declare <16 x i16 > @llvm.abs.v16i16 (<16 x i16 >, i1 )
177
119
178
120
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
187
- ;
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
201
- ;
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
121
+ ; CHECK-LABEL: abs_v8i32:
122
+ ; CHECK: # %bb.0:
123
+ ; CHECK-NEXT: vsetivli zero, 8, e32, m2, ta, ma
124
+ ; CHECK-NEXT: vle32.v v8, (a0)
125
+ ; CHECK-NEXT: vrsub.vi v10, v8, 0
126
+ ; CHECK-NEXT: vmax.vv v8, v8, v10
127
+ ; CHECK-NEXT: vse32.v v8, (a0)
128
+ ; CHECK-NEXT: ret
215
129
%a = load <8 x i32 >, ptr %x
216
130
%b = call <8 x i32 > @llvm.abs.v8i32 (<8 x i32 > %a , i1 false )
217
131
store <8 x i32 > %b , ptr %x
@@ -220,42 +134,14 @@ define void @abs_v8i32(ptr %x) {
220
134
declare <8 x i32 > @llvm.abs.v8i32 (<8 x i32 >, i1 )
221
135
222
136
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
231
- ;
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
245
- ;
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
137
+ ; CHECK-LABEL: abs_v4i64:
138
+ ; CHECK: # %bb.0:
139
+ ; CHECK-NEXT: vsetivli zero, 4, e64, m2, ta, ma
140
+ ; CHECK-NEXT: vle64.v v8, (a0)
141
+ ; CHECK-NEXT: vrsub.vi v10, v8, 0
142
+ ; CHECK-NEXT: vmax.vv v8, v8, v10
143
+ ; CHECK-NEXT: vse64.v v8, (a0)
144
+ ; CHECK-NEXT: ret
259
145
%a = load <4 x i64 >, ptr %x
260
146
%b = call <4 x i64 > @llvm.abs.v4i64 (<4 x i64 > %a , i1 false )
261
147
store <4 x i64 > %b , ptr %x
0 commit comments