1 //===-- RISCVScheduleV.td - RISCV Scheduling Definitions V -*- tablegen -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
9 //===----------------------------------------------------------------------===//
10 /// Define scheduler resources associated with def operands.
12 // 7. Vector Loads and Stores
13 // 7.4. Vector Unit-Stride Instructions
14 def WriteVLDE8 : SchedWrite;
15 def WriteVLDE16 : SchedWrite;
16 def WriteVLDE32 : SchedWrite;
17 def WriteVLDE64 : SchedWrite;
18 def WriteVSTE8 : SchedWrite;
19 def WriteVSTE16 : SchedWrite;
20 def WriteVSTE32 : SchedWrite;
21 def WriteVSTE64 : SchedWrite;
22 // 7.4.1. Vector Unit-Strided Mask
23 def WriteVLDM : SchedWrite;
24 def WriteVSTM : SchedWrite;
25 // 7.5. Vector Strided Instructions
26 def WriteVLDS8 : SchedWrite;
27 def WriteVLDS16 : SchedWrite;
28 def WriteVLDS32 : SchedWrite;
29 def WriteVLDS64 : SchedWrite;
30 def WriteVSTS8 : SchedWrite;
31 def WriteVSTS16 : SchedWrite;
32 def WriteVSTS32 : SchedWrite;
33 def WriteVSTS64 : SchedWrite;
34 // 7.6. Vector Indexed Instructions
35 def WriteVLDUX8 : SchedWrite;
36 def WriteVLDUX16 : SchedWrite;
37 def WriteVLDUX32 : SchedWrite;
38 def WriteVLDUX64 : SchedWrite;
39 def WriteVLDOX8 : SchedWrite;
40 def WriteVLDOX16 : SchedWrite;
41 def WriteVLDOX32 : SchedWrite;
42 def WriteVLDOX64 : SchedWrite;
43 def WriteVSTUX8 : SchedWrite;
44 def WriteVSTUX16 : SchedWrite;
45 def WriteVSTUX32 : SchedWrite;
46 def WriteVSTUX64 : SchedWrite;
47 def WriteVSTOX8 : SchedWrite;
48 def WriteVSTOX16 : SchedWrite;
49 def WriteVSTOX32 : SchedWrite;
50 def WriteVSTOX64 : SchedWrite;
51 // 7.7. Vector Unit-stride Fault-Only-First Loads
52 def WriteVLDFF8 : SchedWrite;
53 def WriteVLDFF16 : SchedWrite;
54 def WriteVLDFF32 : SchedWrite;
55 def WriteVLDFF64 : SchedWrite;
56 // 7.9. Vector Whole Register Instructions
57 def WriteVLD1R8 : SchedWrite;
58 def WriteVLD1R16 : SchedWrite;
59 def WriteVLD1R32 : SchedWrite;
60 def WriteVLD1R64 : SchedWrite;
61 def WriteVLD2R8 : SchedWrite;
62 def WriteVLD2R16 : SchedWrite;
63 def WriteVLD2R32 : SchedWrite;
64 def WriteVLD2R64 : SchedWrite;
65 def WriteVLD4R8 : SchedWrite;
66 def WriteVLD4R16 : SchedWrite;
67 def WriteVLD4R32 : SchedWrite;
68 def WriteVLD4R64 : SchedWrite;
69 def WriteVLD8R8 : SchedWrite;
70 def WriteVLD8R16 : SchedWrite;
71 def WriteVLD8R32 : SchedWrite;
72 def WriteVLD8R64 : SchedWrite;
73 def WriteVST1R : SchedWrite;
74 def WriteVST2R : SchedWrite;
75 def WriteVST4R : SchedWrite;
76 def WriteVST8R : SchedWrite;
78 // 11. Vector Integer Arithmetic Instructions
79 // 11.1. Vector Single-Width Integer Add and Subtract
80 // 11.5. Vector Bitwise Logical Instructions
81 def WriteVIALUV : SchedWrite;
82 def WriteVIALUX : SchedWrite;
83 def WriteVIALUI : SchedWrite;
84 // 11.2. Vector Widening Integer Add/Subtract
85 def WriteVIWALUV : SchedWrite;
86 def WriteVIWALUX : SchedWrite;
87 def WriteVIWALUI : SchedWrite;
88 // 11.3. Vector Integer Extension
89 def WriteVExtV : SchedWrite;
90 // 11.4. Vector Integer Arithmetic with Carry or Borrow Instructions
91 def WriteVICALUV : SchedWrite;
92 def WriteVICALUX : SchedWrite;
93 def WriteVICALUI : SchedWrite;
94 // 11.6. Vector Single-Width Bit Shift Instructions
95 def WriteVShiftV : SchedWrite;
96 def WriteVShiftX : SchedWrite;
97 def WriteVShiftI : SchedWrite;
98 // 11.7. Vector Narrowing Integer Right Shift Instructions
99 def WriteVNShiftV : SchedWrite;
100 def WriteVNShiftX : SchedWrite;
101 def WriteVNShiftI : SchedWrite;
102 // 11.8. Vector Integer Comparison Instructions
103 // 11.9. Vector Integer Min/Max Instructions
104 def WriteVICmpV : SchedWrite;
105 def WriteVICmpX : SchedWrite;
106 def WriteVICmpI : SchedWrite;
107 // 11.10. Vector Single-Width Integer Multiply Instructions
108 def WriteVIMulV : SchedWrite;
109 def WriteVIMulX : SchedWrite;
110 // 11.11. Vector Integer Divide Instructions
111 def WriteVIDivV : SchedWrite;
112 def WriteVIDivX : SchedWrite;
113 // 11.12. Vector Widening Integer Multiply Instructions
114 def WriteVIWMulV : SchedWrite;
115 def WriteVIWMulX : SchedWrite;
116 // 11.13. Vector Single-Width Integer Multiply-Add Instructions
117 def WriteVIMulAddV : SchedWrite;
118 def WriteVIMulAddX : SchedWrite;
119 // 11.14. Vector Widening Integer Multiply-Add Instructions
120 def WriteVIWMulAddV : SchedWrite;
121 def WriteVIWMulAddX : SchedWrite;
122 // 11.15. Vector Integer Merge Instructions
123 def WriteVIMergeV : SchedWrite;
124 def WriteVIMergeX : SchedWrite;
125 def WriteVIMergeI : SchedWrite;
126 // 11.16. Vector Integer Move Instructions
127 def WriteVIMovV : SchedWrite;
128 def WriteVIMovX : SchedWrite;
129 def WriteVIMovI : SchedWrite;
131 // 12. Vector Fixed-Point Arithmetic Instructions
132 // 12.1. Vector Single-Width Saturating Add and Subtract
133 def WriteVSALUV : SchedWrite;
134 def WriteVSALUX : SchedWrite;
135 def WriteVSALUI : SchedWrite;
136 // 12.2. Vector Single-Width Averaging Add and Subtract
137 def WriteVAALUV : SchedWrite;
138 def WriteVAALUX : SchedWrite;
139 // 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
140 def WriteVSMulV : SchedWrite;
141 def WriteVSMulX : SchedWrite;
142 // 12.4. Vector Single-Width Scaling Shift Instructions
143 def WriteVSShiftV : SchedWrite;
144 def WriteVSShiftX : SchedWrite;
145 def WriteVSShiftI : SchedWrite;
146 // 12.5. Vector Narrowing Fixed-Point Clip Instructions
147 def WriteVNClipV : SchedWrite;
148 def WriteVNClipX : SchedWrite;
149 def WriteVNClipI : SchedWrite;
151 // 13. Vector Floating-Point Instructions
152 // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
153 def WriteVFALUV : SchedWrite;
154 def WriteVFALUF : SchedWrite;
155 // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
156 def WriteVFWALUV : SchedWrite;
157 def WriteVFWALUF : SchedWrite;
158 // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
159 def WriteVFMulV : SchedWrite;
160 def WriteVFMulF : SchedWrite;
161 def WriteVFDivV : SchedWrite;
162 def WriteVFDivF : SchedWrite;
163 // 13.5. Vector Widening Floating-Point Multiply
164 def WriteVFWMulV : SchedWrite;
165 def WriteVFWMulF : SchedWrite;
166 // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
167 def WriteVFMulAddV : SchedWrite;
168 def WriteVFMulAddF : SchedWrite;
169 // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
170 def WriteVFWMulAddV : SchedWrite;
171 def WriteVFWMulAddF : SchedWrite;
172 // 13.8. Vector Floating-Point Square-Root Instruction
173 def WriteVFSqrtV : SchedWrite;
174 // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
175 // 13.10. Vector Floating-Point Reciprocal Estimate Instruction
176 def WriteVFRecpV : SchedWrite;
177 // 13.11. Vector Floating-Point MIN/MAX Instructions
178 // 13.13. Vector Floating-Point Compare Instructions
179 def WriteVFCmpV : SchedWrite;
180 def WriteVFCmpF : SchedWrite;
181 // 13.12. Vector Floating-Point Sign-Injection Instructions
182 def WriteVFSgnjV : SchedWrite;
183 def WriteVFSgnjF : SchedWrite;
184 // 13.14. Vector Floating-Point Classify Instruction
185 def WriteVFClassV : SchedWrite;
186 // 13.15. Vector Floating-Point Merge Instruction
187 def WriteVFMergeV : SchedWrite;
188 // 13.16. Vector Floating-Point Move Instruction
189 def WriteVFMovV : SchedWrite;
190 // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
191 def WriteVFCvtIToFV : SchedWrite;
192 def WriteVFCvtFToIV : SchedWrite;
193 def WriteVFCvtFToFV : SchedWrite;
194 // 13.18. Widening Floating-Point/Integer Type-Convert Instructions
195 def WriteVFWCvtIToFV : SchedWrite;
196 def WriteVFWCvtFToIV : SchedWrite;
197 def WriteVFWCvtFToFV : SchedWrite;
198 // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
199 def WriteVFNCvtIToFV : SchedWrite;
200 def WriteVFNCvtFToIV : SchedWrite;
201 def WriteVFNCvtFToFV : SchedWrite;
203 // 14. Vector Reduction Operations
204 // 14.1. Vector Single-Width Integer Reduction Instructions
205 def WriteVIRedV : SchedWrite;
206 // 14.2. Vector Widening Integer Reduction Instructions
207 def WriteVIWRedV : SchedWrite;
208 // 14.3. Vector Single-Width Floating-Point Reduction Instructions
209 def WriteVFRedV : SchedWrite;
210 def WriteVFRedOV : SchedWrite;
211 // 14.4. Vector Widening Floating-Point Reduction Instructions
212 def WriteVFWRedV : SchedWrite;
213 def WriteVFWRedOV : SchedWrite;
215 // 15. Vector Mask Instructions
216 // 15.1. Vector Mask-Register Logical Instructions
217 def WriteVMALUV : SchedWrite;
218 // 15.2. Vector Mask Population Count
219 def WriteVMPopV : SchedWrite;
220 // 15.3. Vector Find-First-Set Mask Bit
221 def WriteVMFFSV : SchedWrite;
222 // 15.4. Vector Set-Before-First Mask Bit
223 // 15.5. Vector Set-Including-First Mask Bit
224 // 15.6. Vector Set-only-First Mask Bit
225 def WriteVMSFSV : SchedWrite;
226 // 15.8. Vector Iota Instruction
227 def WriteVMIotV : SchedWrite;
228 // 15.9. Vector Element Index Instruction
229 def WriteVMIdxV : SchedWrite;
231 // 16. Vector Permutation Instructions
232 // 16.1. Integer Scalar Move Instructions
233 def WriteVIMovVX : SchedWrite;
234 def WriteVIMovXV : SchedWrite;
235 // 16.2. Floating-Point Scalar Move Instructions
236 def WriteVFMovVF : SchedWrite;
237 def WriteVFMovFV : SchedWrite;
238 // 16.3. Vector Slide Instructions
239 def WriteVISlideX : SchedWrite;
240 def WriteVISlideI : SchedWrite;
241 def WriteVISlide1X : SchedWrite;
242 def WriteVFSlide1F : SchedWrite;
243 // 16.4. Vector Register Gather Instructions
244 def WriteVGatherV : SchedWrite;
245 def WriteVGatherX : SchedWrite;
246 def WriteVGatherI : SchedWrite;
247 // 16.5. Vector Compress Instruction
248 def WriteVCompressV : SchedWrite;
249 // 16.6. Whole Vector Register Move
250 def WriteVMov1V : SchedWrite;
251 def WriteVMov2V : SchedWrite;
252 def WriteVMov4V : SchedWrite;
253 def WriteVMov8V : SchedWrite;
255 //===----------------------------------------------------------------------===//
256 /// Define scheduler resources associated with use operands.
258 // 7. Vector Loads and Stores
259 def ReadVLDX : SchedRead;
260 def ReadVSTX : SchedRead;
261 // 7.4. Vector Unit-Stride Instructions
262 def ReadVSTE8V : SchedRead;
263 def ReadVSTE16V : SchedRead;
264 def ReadVSTE32V : SchedRead;
265 def ReadVSTE64V : SchedRead;
266 // 7.4.1. Vector Unit-Strided Mask
267 def ReadVSTM : SchedRead;
268 // 7.5. Vector Strided Instructions
269 def ReadVLDSX : SchedRead;
270 def ReadVSTSX : SchedRead;
271 def ReadVSTS8V : SchedRead;
272 def ReadVSTS16V : SchedRead;
273 def ReadVSTS32V : SchedRead;
274 def ReadVSTS64V : SchedRead;
275 // 7.6. Vector Indexed Instructions
276 def ReadVLDUXV : SchedRead;
277 def ReadVLDOXV : SchedRead;
278 def ReadVSTUX8 : SchedRead;
279 def ReadVSTUX16 : SchedRead;
280 def ReadVSTUX32 : SchedRead;
281 def ReadVSTUX64 : SchedRead;
282 def ReadVSTUXV : SchedRead;
283 def ReadVSTUX8V : SchedRead;
284 def ReadVSTUX16V : SchedRead;
285 def ReadVSTUX32V : SchedRead;
286 def ReadVSTUX64V : SchedRead;
287 def ReadVSTOX8 : SchedRead;
288 def ReadVSTOX16 : SchedRead;
289 def ReadVSTOX32 : SchedRead;
290 def ReadVSTOX64 : SchedRead;
291 def ReadVSTOXV : SchedRead;
292 def ReadVSTOX8V : SchedRead;
293 def ReadVSTOX16V : SchedRead;
294 def ReadVSTOX32V : SchedRead;
295 def ReadVSTOX64V : SchedRead;
296 // 7.9. Vector Whole Register Instructions
297 def ReadVST1R : SchedRead;
298 def ReadVST2R : SchedRead;
299 def ReadVST4R : SchedRead;
300 def ReadVST8R : SchedRead;
302 // 11. Vector Integer Arithmetic Instructions
303 // 11.1. Vector Single-Width Integer Add and Subtract
304 // 11.5. Vector Bitwise Logical Instructions
305 def ReadVIALUV : SchedRead;
306 def ReadVIALUX : SchedRead;
307 // 11.2. Vector Widening Integer Add/Subtract
308 def ReadVIWALUV : SchedRead;
309 def ReadVIWALUX : SchedRead;
310 // 11.3. Vector Integer Extension
311 def ReadVExtV : SchedRead;
312 // 11.4. Vector Integer Arithmetic with Carry or Borrow Instructions
313 def ReadVIALUCV : SchedRead;
314 def ReadVIALUCX : SchedRead;
315 // 11.6. Vector Single-Width Bit Shift Instructions
316 def ReadVShiftV : SchedRead;
317 def ReadVShiftX : SchedRead;
318 // 11.7. Vector Narrowing Integer Right Shift Instructions
319 def ReadVNShiftV : SchedRead;
320 def ReadVNShiftX : SchedRead;
321 // 11.8. Vector Integer Comparison Instructions
322 // 11.9. Vector Integer Min/Max Instructions
323 def ReadVICmpV : SchedRead;
324 def ReadVICmpX : SchedRead;
325 // 11.10. Vector Single-Width Integer Multiply Instructions
326 def ReadVIMulV : SchedRead;
327 def ReadVIMulX : SchedRead;
328 // 11.11. Vector Integer Divide Instructions
329 def ReadVIDivV : SchedRead;
330 def ReadVIDivX : SchedRead;
331 // 11.12. Vector Widening Integer Multiply Instructions
332 def ReadVIWMulV : SchedRead;
333 def ReadVIWMulX : SchedRead;
334 // 11.13. Vector Single-Width Integer Multiply-Add Instructions
335 def ReadVIMulAddV : SchedRead;
336 def ReadVIMulAddX : SchedRead;
337 // 11.14. Vector Widening Integer Multiply-Add Instructions
338 def ReadVIWMulAddV : SchedRead;
339 def ReadVIWMulAddX : SchedRead;
340 // 11.15. Vector Integer Merge Instructions
341 def ReadVIMergeV : SchedRead;
342 def ReadVIMergeX : SchedRead;
343 // 11.16. Vector Integer Move Instructions
344 def ReadVIMovV : SchedRead;
345 def ReadVIMovX : SchedRead;
347 // 12. Vector Fixed-Point Arithmetic Instructions
348 // 12.1. Vector Single-Width Saturating Add and Subtract
349 def ReadVSALUV : SchedRead;
350 def ReadVSALUX : SchedRead;
351 // 12.2. Vector Single-Width Averaging Add and Subtract
352 def ReadVAALUV : SchedRead;
353 def ReadVAALUX : SchedRead;
354 // 12.3. Vector Single-Width Fractional Multiply with Rounding and Saturation
355 def ReadVSMulV : SchedRead;
356 def ReadVSMulX : SchedRead;
357 // 12.4. Vector Single-Width Scaling Shift Instructions
358 def ReadVSShiftV : SchedRead;
359 def ReadVSShiftX : SchedRead;
360 // 12.5. Vector Narrowing Fixed-Point Clip Instructions
361 def ReadVNClipV : SchedRead;
362 def ReadVNClipX : SchedRead;
364 // 13. Vector Floating-Point Instructions
365 // 13.2. Vector Single-Width Floating-Point Add/Subtract Instructions
366 def ReadVFALUV : SchedRead;
367 def ReadVFALUF : SchedRead;
368 // 13.3. Vector Widening Floating-Point Add/Subtract Instructions
369 def ReadVFWALUV : SchedRead;
370 def ReadVFWALUF : SchedRead;
371 // 13.4. Vector Single-Width Floating-Point Multiply/Divide Instructions
372 def ReadVFMulV : SchedRead;
373 def ReadVFMulF : SchedRead;
374 def ReadVFDivV : SchedRead;
375 def ReadVFDivF : SchedRead;
376 // 13.5. Vector Widening Floating-Point Multiply
377 def ReadVFWMulV : SchedRead;
378 def ReadVFWMulF : SchedRead;
379 // 13.6. Vector Single-Width Floating-Point Fused Multiply-Add Instructions
380 def ReadVFMulAddV : SchedRead;
381 def ReadVFMulAddF : SchedRead;
382 // 13.7. Vector Widening Floating-Point Fused Multiply-Add Instructions
383 def ReadVFWMulAddV : SchedRead;
384 def ReadVFWMulAddF : SchedRead;
385 // 13.8. Vector Floating-Point Square-Root Instruction
386 def ReadVFSqrtV : SchedRead;
387 // 13.9. Vector Floating-Point Reciprocal Square-Root Estimate Instruction
388 // 13.10. Vector Floating-Point Reciprocal Estimate Instruction
389 def ReadVFRecpV : SchedRead;
390 // 13.11. Vector Floating-Point MIN/MAX Instructions
391 // 13.13. Vector Floating-Point Compare Instructions
392 def ReadVFCmpV : SchedRead;
393 def ReadVFCmpF : SchedRead;
394 // 13.12. Vector Floating-Point Sign-Injection Instructions
395 def ReadVFSgnjV : SchedRead;
396 def ReadVFSgnjF : SchedRead;
397 // 13.14. Vector Floating-Point Classify Instruction
398 def ReadVFClassV : SchedRead;
399 // 13.15. Vector Floating-Point Merge Instruction
400 def ReadVFMergeV : SchedRead;
401 def ReadVFMergeF : SchedRead;
402 // 13.16. Vector Floating-Point Move Instruction
403 def ReadVFMovF : SchedRead;
404 // 13.17. Single-Width Floating-Point/Integer Type-Convert Instructions
405 def ReadVFCvtIToFV : SchedRead;
406 def ReadVFCvtFToIV : SchedRead;
407 // 13.18. Widening Floating-Point/Integer Type-Convert Instructions
408 def ReadVFWCvtIToFV : SchedRead;
409 def ReadVFWCvtFToIV : SchedRead;
410 def ReadVFWCvtFToFV : SchedRead;
411 // 13.19. Narrowing Floating-Point/Integer Type-Convert Instructions
412 def ReadVFNCvtIToFV : SchedRead;
413 def ReadVFNCvtFToIV : SchedRead;
414 def ReadVFNCvtFToFV : SchedRead;
416 // 14. Vector Reduction Operations
417 // 14.1. Vector Single-Width Integer Reduction Instructions
418 def ReadVIRedV : SchedRead;
419 def ReadVIRedV0 : SchedRead;
420 // 14.2. Vector Widening Integer Reduction Instructions
421 def ReadVIWRedV : SchedRead;
422 def ReadVIWRedV0 : SchedRead;
423 // 14.3. Vector Single-Width Floating-Point Reduction Instructions
424 def ReadVFRedV : SchedRead;
425 def ReadVFRedV0 : SchedRead;
426 def ReadVFRedOV : SchedRead;
427 def ReadVFRedOV0 : SchedRead;
428 // 14.4. Vector Widening Floating-Point Reduction Instructions
429 def ReadVFWRedV : SchedRead;
430 def ReadVFWRedV0 : SchedRead;
431 def ReadVFWRedOV : SchedRead;
432 def ReadVFWRedOV0 : SchedRead;
434 // 15. Vector Mask Instructions
435 // 15.1. Vector Mask-Register Logical Instructions
436 def ReadVMALUV : SchedRead;
437 // 15.2. Vector Mask Population Count
438 def ReadVMPopV : SchedRead;
439 // 15.3. Vector Find-First-Set Mask Bit
440 def ReadVMFFSV : SchedRead;
441 // 15.4. Vector Set-Before-First Mask Bit
442 // 15.5. Vector Set-Including-First Mask Bit
443 // 15.6. Vector Set-only-First Mask Bit
444 def ReadVMSFSV : SchedRead;
445 // 15.8. Vector Iota Instruction
446 def ReadVMIotV : SchedRead;
448 // 16. Vector Permutation Instructions
449 // 16.1. Integer Scalar Move Instructions
450 def ReadVIMovVX : SchedRead;
451 def ReadVIMovXV : SchedRead;
452 def ReadVIMovXX : SchedRead;
453 // 16.2. Floating-Point Scalar Move Instructions
454 def ReadVFMovVF : SchedRead;
455 def ReadVFMovFV : SchedRead;
456 def ReadVFMovFX : SchedRead;
457 // 16.3. Vector Slide Instructions
458 def ReadVISlideV : SchedRead;
459 def ReadVISlideX : SchedRead;
460 def ReadVFSlideV : SchedRead;
461 def ReadVFSlideF : SchedRead;
462 // 16.4. Vector Register Gather Instructions
463 def ReadVGatherV : SchedRead;
464 def ReadVGatherX : SchedRead;
465 // 16.5. Vector Compress Instruction
466 def ReadVCompressV : SchedRead;
467 // 16.6. Whole Vector Register Move
468 def ReadVMov1V : SchedRead;
469 def ReadVMov2V : SchedRead;
470 def ReadVMov4V : SchedRead;
471 def ReadVMov8V : SchedRead;
474 def ReadVMask : SchedRead;
476 //===----------------------------------------------------------------------===//
477 /// Define default scheduler resources for V.
479 multiclass UnsupportedSchedV {
480 let Unsupported = true in {
482 // 7. Vector Loads and Stores
483 def : WriteRes<WriteVLDE8, []>;
484 def : WriteRes<WriteVLDE16, []>;
485 def : WriteRes<WriteVLDE32, []>;
486 def : WriteRes<WriteVLDE64, []>;
487 def : WriteRes<WriteVSTE8, []>;
488 def : WriteRes<WriteVSTE16, []>;
489 def : WriteRes<WriteVSTE32, []>;
490 def : WriteRes<WriteVSTE64, []>;
491 def : WriteRes<WriteVLDM, []>;
492 def : WriteRes<WriteVSTM, []>;
493 def : WriteRes<WriteVLDS8, []>;
494 def : WriteRes<WriteVLDS16, []>;
495 def : WriteRes<WriteVLDS32, []>;
496 def : WriteRes<WriteVLDS64, []>;
497 def : WriteRes<WriteVSTS8, []>;
498 def : WriteRes<WriteVSTS16, []>;
499 def : WriteRes<WriteVSTS32, []>;
500 def : WriteRes<WriteVSTS64, []>;
501 def : WriteRes<WriteVLDUX8, []>;
502 def : WriteRes<WriteVLDUX16, []>;
503 def : WriteRes<WriteVLDUX32, []>;
504 def : WriteRes<WriteVLDUX64, []>;
505 def : WriteRes<WriteVLDOX8, []>;
506 def : WriteRes<WriteVLDOX16, []>;
507 def : WriteRes<WriteVLDOX32, []>;
508 def : WriteRes<WriteVLDOX64, []>;
509 def : WriteRes<WriteVSTUX8, []>;
510 def : WriteRes<WriteVSTUX16, []>;
511 def : WriteRes<WriteVSTUX32, []>;
512 def : WriteRes<WriteVSTUX64, []>;
513 def : WriteRes<WriteVSTOX8, []>;
514 def : WriteRes<WriteVSTOX16, []>;
515 def : WriteRes<WriteVSTOX32, []>;
516 def : WriteRes<WriteVSTOX64, []>;
517 def : WriteRes<WriteVLDFF8, []>;
518 def : WriteRes<WriteVLDFF16, []>;
519 def : WriteRes<WriteVLDFF32, []>;
520 def : WriteRes<WriteVLDFF64, []>;
521 def : WriteRes<WriteVLD1R8, []>;
522 def : WriteRes<WriteVLD1R16, []>;
523 def : WriteRes<WriteVLD1R32, []>;
524 def : WriteRes<WriteVLD1R64, []>;
525 def : WriteRes<WriteVLD2R8, []>;
526 def : WriteRes<WriteVLD2R16, []>;
527 def : WriteRes<WriteVLD2R32, []>;
528 def : WriteRes<WriteVLD2R64, []>;
529 def : WriteRes<WriteVLD4R8, []>;
530 def : WriteRes<WriteVLD4R16, []>;
531 def : WriteRes<WriteVLD4R32, []>;
532 def : WriteRes<WriteVLD4R64, []>;
533 def : WriteRes<WriteVLD8R8, []>;
534 def : WriteRes<WriteVLD8R16, []>;
535 def : WriteRes<WriteVLD8R32, []>;
536 def : WriteRes<WriteVLD8R64, []>;
537 def : WriteRes<WriteVST1R, []>;
538 def : WriteRes<WriteVST2R, []>;
539 def : WriteRes<WriteVST4R, []>;
540 def : WriteRes<WriteVST8R, []>;
542 // 12. Vector Integer Arithmetic Instructions
543 def : WriteRes<WriteVIALUV, []>;
544 def : WriteRes<WriteVIALUX, []>;
545 def : WriteRes<WriteVIALUI, []>;
546 def : WriteRes<WriteVIWALUV, []>;
547 def : WriteRes<WriteVIWALUX, []>;
548 def : WriteRes<WriteVIWALUI, []>;
549 def : WriteRes<WriteVExtV, []>;
550 def : WriteRes<WriteVICALUV, []>;
551 def : WriteRes<WriteVICALUX, []>;
552 def : WriteRes<WriteVICALUI, []>;
553 def : WriteRes<WriteVShiftV, []>;
554 def : WriteRes<WriteVShiftX, []>;
555 def : WriteRes<WriteVShiftI, []>;
556 def : WriteRes<WriteVNShiftV, []>;
557 def : WriteRes<WriteVNShiftX, []>;
558 def : WriteRes<WriteVNShiftI, []>;
559 def : WriteRes<WriteVICmpV, []>;
560 def : WriteRes<WriteVICmpX, []>;
561 def : WriteRes<WriteVICmpI, []>;
562 def : WriteRes<WriteVIMulV, []>;
563 def : WriteRes<WriteVIMulX, []>;
564 def : WriteRes<WriteVIDivV, []>;
565 def : WriteRes<WriteVIDivX, []>;
566 def : WriteRes<WriteVIWMulV, []>;
567 def : WriteRes<WriteVIWMulX, []>;
568 def : WriteRes<WriteVIMulAddV, []>;
569 def : WriteRes<WriteVIMulAddX, []>;
570 def : WriteRes<WriteVIWMulAddV, []>;
571 def : WriteRes<WriteVIWMulAddX, []>;
572 def : WriteRes<WriteVIMergeV, []>;
573 def : WriteRes<WriteVIMergeX, []>;
574 def : WriteRes<WriteVIMergeI, []>;
575 def : WriteRes<WriteVIMovV, []>;
576 def : WriteRes<WriteVIMovX, []>;
577 def : WriteRes<WriteVIMovI, []>;
579 // 13. Vector Fixed-Point Arithmetic Instructions
580 def : WriteRes<WriteVSALUV, []>;
581 def : WriteRes<WriteVSALUX, []>;
582 def : WriteRes<WriteVSALUI, []>;
583 def : WriteRes<WriteVAALUV, []>;
584 def : WriteRes<WriteVAALUX, []>;
585 def : WriteRes<WriteVSMulV, []>;
586 def : WriteRes<WriteVSMulX, []>;
587 def : WriteRes<WriteVSShiftV, []>;
588 def : WriteRes<WriteVSShiftX, []>;
589 def : WriteRes<WriteVSShiftI, []>;
590 def : WriteRes<WriteVNClipV, []>;
591 def : WriteRes<WriteVNClipX, []>;
592 def : WriteRes<WriteVNClipI, []>;
594 // 14. Vector Floating-Point Instructions
595 def : WriteRes<WriteVFALUV, []>;
596 def : WriteRes<WriteVFALUF, []>;
597 def : WriteRes<WriteVFWALUV, []>;
598 def : WriteRes<WriteVFWALUF, []>;
599 def : WriteRes<WriteVFMulV, []>;
600 def : WriteRes<WriteVFMulF, []>;
601 def : WriteRes<WriteVFDivV, []>;
602 def : WriteRes<WriteVFDivF, []>;
603 def : WriteRes<WriteVFWMulV, []>;
604 def : WriteRes<WriteVFWMulF, []>;
605 def : WriteRes<WriteVFMulAddV, []>;
606 def : WriteRes<WriteVFMulAddF, []>;
607 def : WriteRes<WriteVFWMulAddV, []>;
608 def : WriteRes<WriteVFWMulAddF, []>;
609 def : WriteRes<WriteVFSqrtV, []>;
610 def : WriteRes<WriteVFRecpV, []>;
611 def : WriteRes<WriteVFCmpV, []>;
612 def : WriteRes<WriteVFCmpF, []>;
613 def : WriteRes<WriteVFSgnjV, []>;
614 def : WriteRes<WriteVFSgnjF, []>;
615 def : WriteRes<WriteVFClassV, []>;
616 def : WriteRes<WriteVFMergeV, []>;
617 def : WriteRes<WriteVFMovV, []>;
618 def : WriteRes<WriteVFCvtIToFV, []>;
619 def : WriteRes<WriteVFCvtFToIV, []>;
620 def : WriteRes<WriteVFCvtFToFV, []>;
621 def : WriteRes<WriteVFWCvtIToFV, []>;
622 def : WriteRes<WriteVFWCvtFToIV, []>;
623 def : WriteRes<WriteVFWCvtFToFV, []>;
624 def : WriteRes<WriteVFNCvtIToFV, []>;
625 def : WriteRes<WriteVFNCvtFToIV, []>;
626 def : WriteRes<WriteVFNCvtFToFV, []>;
628 // 15. Vector Reduction Operations
629 def : WriteRes<WriteVIRedV, []>;
630 def : WriteRes<WriteVIWRedV, []>;
631 def : WriteRes<WriteVFRedV, []>;
632 def : WriteRes<WriteVFRedOV, []>;
633 def : WriteRes<WriteVFWRedV, []>;
634 def : WriteRes<WriteVFWRedOV, []>;
636 // 16. Vector Mask Instructions
637 def : WriteRes<WriteVMALUV, []>;
638 def : WriteRes<WriteVMPopV, []>;
639 def : WriteRes<WriteVMFFSV, []>;
640 def : WriteRes<WriteVMSFSV, []>;
641 def : WriteRes<WriteVMIotV, []>;
642 def : WriteRes<WriteVMIdxV, []>;
644 // 17. Vector Permutation Instructions
645 def : WriteRes<WriteVIMovVX, []>;
646 def : WriteRes<WriteVIMovXV, []>;
647 def : WriteRes<WriteVFMovVF, []>;
648 def : WriteRes<WriteVFMovFV, []>;
649 def : WriteRes<WriteVISlideX, []>;
650 def : WriteRes<WriteVISlideI, []>;
651 def : WriteRes<WriteVISlide1X, []>;
652 def : WriteRes<WriteVFSlide1F, []>;
653 def : WriteRes<WriteVGatherV, []>;
654 def : WriteRes<WriteVGatherX, []>;
655 def : WriteRes<WriteVGatherI, []>;
656 def : WriteRes<WriteVCompressV, []>;
657 def : WriteRes<WriteVMov1V, []>;
658 def : WriteRes<WriteVMov2V, []>;
659 def : WriteRes<WriteVMov4V, []>;
660 def : WriteRes<WriteVMov8V, []>;
662 // 7. Vector Loads and Stores
663 def : ReadAdvance<ReadVLDX, 0>;
664 def : ReadAdvance<ReadVSTX, 0>;
665 def : ReadAdvance<ReadVSTE8V, 0>;
666 def : ReadAdvance<ReadVSTE16V, 0>;
667 def : ReadAdvance<ReadVSTE32V, 0>;
668 def : ReadAdvance<ReadVSTE64V, 0>;
669 def : ReadAdvance<ReadVSTM, 0>;
670 def : ReadAdvance<ReadVLDSX, 0>;
671 def : ReadAdvance<ReadVSTSX, 0>;
672 def : ReadAdvance<ReadVSTS8V, 0>;
673 def : ReadAdvance<ReadVSTS16V, 0>;
674 def : ReadAdvance<ReadVSTS32V, 0>;
675 def : ReadAdvance<ReadVSTS64V, 0>;
676 def : ReadAdvance<ReadVLDUXV, 0>;
677 def : ReadAdvance<ReadVLDOXV, 0>;
678 def : ReadAdvance<ReadVSTUXV, 0>;
679 def : ReadAdvance<ReadVSTUX8, 0>;
680 def : ReadAdvance<ReadVSTUX16, 0>;
681 def : ReadAdvance<ReadVSTUX32, 0>;
682 def : ReadAdvance<ReadVSTUX64, 0>;
683 def : ReadAdvance<ReadVSTUX8V, 0>;
684 def : ReadAdvance<ReadVSTUX16V, 0>;
685 def : ReadAdvance<ReadVSTUX32V, 0>;
686 def : ReadAdvance<ReadVSTUX64V, 0>;
687 def : ReadAdvance<ReadVSTOX8, 0>;
688 def : ReadAdvance<ReadVSTOX16, 0>;
689 def : ReadAdvance<ReadVSTOX32, 0>;
690 def : ReadAdvance<ReadVSTOX64, 0>;
691 def : ReadAdvance<ReadVSTOXV, 0>;
692 def : ReadAdvance<ReadVSTOX8V, 0>;
693 def : ReadAdvance<ReadVSTOX16V, 0>;
694 def : ReadAdvance<ReadVSTOX32V, 0>;
695 def : ReadAdvance<ReadVSTOX64V, 0>;
696 def : ReadAdvance<ReadVST1R, 0>;
697 def : ReadAdvance<ReadVST2R, 0>;
698 def : ReadAdvance<ReadVST4R, 0>;
699 def : ReadAdvance<ReadVST8R, 0>;
701 // 12. Vector Integer Arithmetic Instructions
702 def : ReadAdvance<ReadVIALUV, 0>;
703 def : ReadAdvance<ReadVIALUX, 0>;
704 def : ReadAdvance<ReadVIWALUV, 0>;
705 def : ReadAdvance<ReadVIWALUX, 0>;
706 def : ReadAdvance<ReadVExtV, 0>;
707 def : ReadAdvance<ReadVIALUCV, 0>;
708 def : ReadAdvance<ReadVIALUCX, 0>;
709 def : ReadAdvance<ReadVShiftV, 0>;
710 def : ReadAdvance<ReadVShiftX, 0>;
711 def : ReadAdvance<ReadVNShiftV, 0>;
712 def : ReadAdvance<ReadVNShiftX, 0>;
713 def : ReadAdvance<ReadVICmpV, 0>;
714 def : ReadAdvance<ReadVICmpX, 0>;
715 def : ReadAdvance<ReadVIMulV, 0>;
716 def : ReadAdvance<ReadVIMulX, 0>;
717 def : ReadAdvance<ReadVIDivV, 0>;
718 def : ReadAdvance<ReadVIDivX, 0>;
719 def : ReadAdvance<ReadVIWMulV, 0>;
720 def : ReadAdvance<ReadVIWMulX, 0>;
721 def : ReadAdvance<ReadVIMulAddV, 0>;
722 def : ReadAdvance<ReadVIMulAddX, 0>;
723 def : ReadAdvance<ReadVIWMulAddV, 0>;
724 def : ReadAdvance<ReadVIWMulAddX, 0>;
725 def : ReadAdvance<ReadVIMergeV, 0>;
726 def : ReadAdvance<ReadVIMergeX, 0>;
727 def : ReadAdvance<ReadVIMovV, 0>;
728 def : ReadAdvance<ReadVIMovX, 0>;
730 // 13. Vector Fixed-Point Arithmetic Instructions
731 def : ReadAdvance<ReadVSALUV, 0>;
732 def : ReadAdvance<ReadVSALUX, 0>;
733 def : ReadAdvance<ReadVAALUV, 0>;
734 def : ReadAdvance<ReadVAALUX, 0>;
735 def : ReadAdvance<ReadVSMulV, 0>;
736 def : ReadAdvance<ReadVSMulX, 0>;
737 def : ReadAdvance<ReadVSShiftV, 0>;
738 def : ReadAdvance<ReadVSShiftX, 0>;
739 def : ReadAdvance<ReadVNClipV, 0>;
740 def : ReadAdvance<ReadVNClipX, 0>;
742 // 14. Vector Floating-Point Instructions
743 def : ReadAdvance<ReadVFALUV, 0>;
744 def : ReadAdvance<ReadVFALUF, 0>;
745 def : ReadAdvance<ReadVFWALUV, 0>;
746 def : ReadAdvance<ReadVFWALUF, 0>;
747 def : ReadAdvance<ReadVFMulV, 0>;
748 def : ReadAdvance<ReadVFMulF, 0>;
749 def : ReadAdvance<ReadVFDivV, 0>;
750 def : ReadAdvance<ReadVFDivF, 0>;
751 def : ReadAdvance<ReadVFWMulV, 0>;
752 def : ReadAdvance<ReadVFWMulF, 0>;
753 def : ReadAdvance<ReadVFMulAddV, 0>;
754 def : ReadAdvance<ReadVFMulAddF, 0>;
755 def : ReadAdvance<ReadVFWMulAddV, 0>;
756 def : ReadAdvance<ReadVFWMulAddF, 0>;
757 def : ReadAdvance<ReadVFSqrtV, 0>;
758 def : ReadAdvance<ReadVFRecpV, 0>;
759 def : ReadAdvance<ReadVFCmpV, 0>;
760 def : ReadAdvance<ReadVFCmpF, 0>;
761 def : ReadAdvance<ReadVFSgnjV, 0>;
762 def : ReadAdvance<ReadVFSgnjF, 0>;
763 def : ReadAdvance<ReadVFClassV, 0>;
764 def : ReadAdvance<ReadVFMergeV, 0>;
765 def : ReadAdvance<ReadVFMergeF, 0>;
766 def : ReadAdvance<ReadVFMovF, 0>;
767 def : ReadAdvance<ReadVFCvtIToFV, 0>;
768 def : ReadAdvance<ReadVFCvtFToIV, 0>;
769 def : ReadAdvance<ReadVFWCvtIToFV, 0>;
770 def : ReadAdvance<ReadVFWCvtFToIV, 0>;
771 def : ReadAdvance<ReadVFWCvtFToFV, 0>;
772 def : ReadAdvance<ReadVFNCvtIToFV, 0>;
773 def : ReadAdvance<ReadVFNCvtFToIV, 0>;
774 def : ReadAdvance<ReadVFNCvtFToFV, 0>;
776 // 15. Vector Reduction Operations
777 def : ReadAdvance<ReadVIRedV, 0>;
778 def : ReadAdvance<ReadVIRedV0, 0>;
779 def : ReadAdvance<ReadVIWRedV, 0>;
780 def : ReadAdvance<ReadVIWRedV0, 0>;
781 def : ReadAdvance<ReadVFRedV, 0>;
782 def : ReadAdvance<ReadVFRedV0, 0>;
783 def : ReadAdvance<ReadVFRedOV, 0>;
784 def : ReadAdvance<ReadVFRedOV0, 0>;
785 def : ReadAdvance<ReadVFWRedV, 0>;
786 def : ReadAdvance<ReadVFWRedV0, 0>;
787 def : ReadAdvance<ReadVFWRedOV, 0>;
788 def : ReadAdvance<ReadVFWRedOV0, 0>;
790 // 16. Vector Mask Instructions
791 def : ReadAdvance<ReadVMALUV, 0>;
792 def : ReadAdvance<ReadVMPopV, 0>;
793 def : ReadAdvance<ReadVMFFSV, 0>;
794 def : ReadAdvance<ReadVMSFSV, 0>;
795 def : ReadAdvance<ReadVMIotV, 0>;
797 // 17. Vector Permutation Instructions
798 def : ReadAdvance<ReadVIMovVX, 0>;
799 def : ReadAdvance<ReadVIMovXV, 0>;
800 def : ReadAdvance<ReadVIMovXX, 0>;
801 def : ReadAdvance<ReadVFMovVF, 0>;
802 def : ReadAdvance<ReadVFMovFV, 0>;
803 def : ReadAdvance<ReadVFMovFX, 0>;
804 def : ReadAdvance<ReadVISlideV, 0>;
805 def : ReadAdvance<ReadVISlideX, 0>;
806 def : ReadAdvance<ReadVFSlideV, 0>;
807 def : ReadAdvance<ReadVFSlideF, 0>;
808 def : ReadAdvance<ReadVGatherV, 0>;
809 def : ReadAdvance<ReadVGatherX, 0>;
810 def : ReadAdvance<ReadVCompressV, 0>;
811 def : ReadAdvance<ReadVMov1V, 0>;
812 def : ReadAdvance<ReadVMov2V, 0>;
813 def : ReadAdvance<ReadVMov4V, 0>;
814 def : ReadAdvance<ReadVMov8V, 0>;
817 def : ReadAdvance<ReadVMask, 0>;
820 } // UnsupportedSchedV