@@ -24,9 +24,9 @@ def tuimm5 : RISCVOp, TImmLeaf<XLenVT, [{return isUInt<5>(Imm);}]>;
24
24
let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in {
25
25
multiclass VCLMUL_MV_V_X<string opcodestr, bits<6> funct6> {
26
26
def V : VALUVV<funct6, OPMVV, opcodestr # "." # "vv">,
27
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
27
+ SchedBinaryMC<"WriteVCLMUL ", "ReadVCLMUL ", "ReadVCLMUL ">;
28
28
def X : VALUVX<funct6, OPMVX, opcodestr # "." # "vx">,
29
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
29
+ SchedBinaryMC<"WriteVCLMULH ", "ReadVCLMULH ", "ReadVCLMULH ">;
30
30
}
31
31
32
32
class RVInstIVI_VROR<bits<6> funct6, dag outs, dag ins, string opcodestr,
@@ -55,7 +55,7 @@ multiclass VROR_IV_V_X_I<string opcodestr, bits<6> funct6>
55
55
def I : RVInstIVI_VROR<funct6, (outs VR:$vd),
56
56
(ins VR:$vs2, uimm6:$imm, VMaskOp:$vm),
57
57
opcodestr # ".vi", "$vd, $vs2, $imm$vm">,
58
- SchedUnaryMC<"WriteVIALUI ", "ReadVIALUV ">;
58
+ SchedUnaryMC<"WriteVROR ", "ReadVROR ">;
59
59
}
60
60
61
61
// op vd, vs2, vs1
@@ -107,10 +107,10 @@ multiclass VAES_MV_V_S<bits<6> funct6_vv, bits<6> funct6_vs, bits<5> vs1,
107
107
RISCVVFormat opv, string opcodestr> {
108
108
let RVVConstraint = NoConstraint in
109
109
def NAME # _VV : PALUVs2NoVmBinary<funct6_vv, vs1, opv, opcodestr # ".vv">,
110
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
110
+ SchedBinaryMC<"WriteVAESMV ", "ReadVAESMV ", "ReadVAESMV ">;
111
111
let RVVConstraint = VS2Constraint in
112
112
def NAME # _VS : PALUVs2NoVmBinary<funct6_vs, vs1, opv, opcodestr # ".vs">,
113
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
113
+ SchedBinaryMC<"WriteVAESMV ", "ReadVAESMV ", "ReadVAESMV ">;
114
114
}
115
115
} // hasSideEffects = 0, mayLoad = 0, mayStore = 0
116
116
@@ -142,22 +142,22 @@ let Predicates = [HasStdExtZvkb] in {
142
142
143
143
let Predicates = [HasStdExtZvkg], RVVConstraint = NoConstraint in {
144
144
def VGHSH_VV : PALUVVNoVmTernary<0b101100, OPMVV, "vghsh.vv">,
145
- SchedTernaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ",
146
- "ReadVIALUV ">;
145
+ SchedTernaryMC<"WriteVGHSH ", "ReadVGHSH ", "ReadVGHSH ",
146
+ "ReadVGHSH ">;
147
147
def VGMUL_VV : PALUVs2NoVmBinary<0b101000, 0b10001, OPMVV, "vgmul.vv">,
148
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
148
+ SchedBinaryMC<"WriteVGMUL ", "ReadVGMUL ", "ReadVGMUL ">;
149
149
} // Predicates = [HasStdExtZvkg]
150
150
151
151
let Predicates = [HasStdExtZvknhaOrZvknhb], RVVConstraint = Sha2Constraint in {
152
152
def VSHA2CH_VV : PALUVVNoVmTernary<0b101110, OPMVV, "vsha2ch.vv">,
153
- SchedTernaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ",
154
- "ReadVIALUV ">;
153
+ SchedTernaryMC<"WriteVSHA2CH ", "ReadVSHA2CH ", "ReadVSHA2CH ",
154
+ "ReadVSHA2CH ">;
155
155
def VSHA2CL_VV : PALUVVNoVmTernary<0b101111, OPMVV, "vsha2cl.vv">,
156
- SchedTernaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ",
157
- "ReadVIALUV ">;
156
+ SchedTernaryMC<"WriteVSHA2CL ", "ReadVSHA2CL ", "ReadVSHA2CL ",
157
+ "ReadVSHA2CL ">;
158
158
def VSHA2MS_VV : PALUVVNoVmTernary<0b101101, OPMVV, "vsha2ms.vv">,
159
- SchedTernaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ",
160
- "ReadVIALUV ">;
159
+ SchedTernaryMC<"WriteVSHA2MS ", "ReadVSHA2MS ", "ReadVSHA2MS ",
160
+ "ReadVSHA2MS ">;
161
161
} // Predicates = [HasStdExtZvknhaOrZvknhb]
162
162
163
163
let Predicates = [HasStdExtZvkned] in {
@@ -166,26 +166,26 @@ let Predicates = [HasStdExtZvkned] in {
166
166
defm VAESEF : VAES_MV_V_S<0b101000, 0b101001, 0b00011, OPMVV, "vaesef">;
167
167
defm VAESEM : VAES_MV_V_S<0b101000, 0b101001, 0b00010, OPMVV, "vaesem">;
168
168
def VAESKF1_VI : PALUVINoVm<0b100010, "vaeskf1.vi", uimm5>,
169
- SchedUnaryMC<"WriteVIALUV ", "ReadVIALUV ">;
169
+ SchedUnaryMC<"WriteVAESKF1 ", "ReadVAESKF2 ">;
170
170
def VAESKF2_VI : PALUVINoVmBinary<0b101010, "vaeskf2.vi", uimm5>,
171
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
171
+ SchedBinaryMC<"WriteVAESKF2 ", "ReadVAESKF2 ", "ReadVAESKF2 ">;
172
172
let RVVConstraint = VS2Constraint in
173
173
def VAESZ_VS : PALUVs2NoVmBinary<0b101001, 0b00111, OPMVV, "vaesz.vs">,
174
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
174
+ SchedBinaryMC<"WriteVAESZ ", "ReadVAESZ ", "ReadVAESZ ">;
175
175
} // Predicates = [HasStdExtZvkned]
176
176
177
177
let Predicates = [HasStdExtZvksed] in {
178
178
let RVVConstraint = NoConstraint in
179
179
def VSM4K_VI : PALUVINoVm<0b100001, "vsm4k.vi", uimm5>,
180
- SchedUnaryMC<"WriteVIALUV ", "ReadVIALUV ">;
180
+ SchedUnaryMC<"WriteVSM4K ", "ReadVSM4K ">;
181
181
defm VSM4R : VAES_MV_V_S<0b101000, 0b101001, 0b10000, OPMVV, "vsm4r">;
182
182
} // Predicates = [HasStdExtZvksed]
183
183
184
184
let Predicates = [HasStdExtZvksh], RVVConstraint = VS2Constraint in {
185
185
def VSM3C_VI : PALUVINoVmBinary<0b101011, "vsm3c.vi", uimm5>,
186
- SchedBinaryMC<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ">;
186
+ SchedBinaryMC<"WriteVSM3C ", "ReadVSM3C ", "ReadVSM3C ">;
187
187
def VSM3ME_VV : PALUVVNoVm<0b100000, OPMVV, "vsm3me.vv">,
188
- SchedUnaryMC<"WriteVIALUI ", "ReadVIALUV ">;
188
+ SchedUnaryMC<"WriteVSM3ME ", "ReadVSM3ME ">;
189
189
} // Predicates = [HasStdExtZvksh]
190
190
191
191
//===----------------------------------------------------------------------===//
@@ -337,10 +337,10 @@ multiclass VPseudoVCLMUL_VV_VX {
337
337
foreach m = MxList in {
338
338
defvar mx = m.MX;
339
339
defm "" : VPseudoBinaryV_VV<m>,
340
- SchedBinary<"WriteVIALUV ", "ReadVIALUV ", "ReadVIALUV ", mx,
340
+ SchedBinary<"WriteVCLMUL ", "ReadVCLMUL ", "ReadVCLMUL ", mx,
341
341
forceMergeOpRead=true>;
342
342
defm "" : VPseudoBinaryV_VX<m>,
343
- SchedBinary<"WriteVIALUX ", "ReadVIALUV ", "ReadVIALUX ", mx,
343
+ SchedBinary<"WriteVCLMULH ", "ReadVCLMULH ", "ReadVCLMULH ", mx,
344
344
forceMergeOpRead=true>;
345
345
}
346
346
}
@@ -354,28 +354,104 @@ multiclass VPseudoUnaryV_V<LMULInfo m> {
354
354
}
355
355
}
356
356
357
- multiclass VPseudoVALU_V {
357
+ multiclass VPseudoVBREV {
358
358
foreach m = MxList in {
359
359
defvar mx = m.MX;
360
360
defm "" : VPseudoUnaryV_V<m>,
361
- SchedUnary<"WriteVIALUV", "ReadVIALUV", mx,
362
- forceMergeOpRead=true>;
361
+ SchedUnary<"WriteVBREV", "ReadVBREV", mx, forceMergeOpRead=true>;
362
+ }
363
+ }
364
+
365
+ multiclass VPseudoVCLZ {
366
+ foreach m = MxList in {
367
+ defvar mx = m.MX;
368
+ defm "" : VPseudoUnaryV_V<m>,
369
+ SchedUnary<"WriteVCLZ", "ReadVCLZ", mx, forceMergeOpRead=true>;
370
+ }
371
+ }
372
+
373
+ multiclass VPseudoVCTZ {
374
+ foreach m = MxList in {
375
+ defvar mx = m.MX;
376
+ defm "" : VPseudoUnaryV_V<m>,
377
+ SchedUnary<"WriteVCTZ", "ReadVCTZ", mx, forceMergeOpRead=true>;
378
+ }
379
+ }
380
+
381
+ multiclass VPseudoVCPOP {
382
+ foreach m = MxList in {
383
+ defvar mx = m.MX;
384
+ defm "" : VPseudoUnaryV_V<m>,
385
+ SchedUnary<"WriteVCPOP", "ReadVCPOP", mx, forceMergeOpRead=true>;
363
386
}
364
387
}
365
388
366
389
multiclass VPseudoVWALU_VV_VX_VI<Operand ImmType> : VPseudoVWALU_VV_VX {
367
390
foreach m = MxListW in {
368
391
defm "" : VPseudoBinaryW_VI<ImmType, m>,
369
- SchedUnary<"WriteVIWALUV ", "ReadVIWALUV ", m.MX,
392
+ SchedUnary<"WriteVWSLL ", "ReadVWSLL ", m.MX,
370
393
forceMergeOpRead=true>;
371
394
}
372
395
}
373
396
397
+ multiclass VPseudoVANDN {
398
+ foreach m = MxList in {
399
+ defm "" : VPseudoBinaryV_VV<m>,
400
+ SchedBinary<"WriteVANDN", "ReadVANDN", "ReadVANDN", m.MX,
401
+ forceMergeOpRead=true>;
402
+ defm "" : VPseudoBinaryV_VX<m>,
403
+ SchedBinary<"WriteVANDN", "ReadVANDN", "ReadVANDN", m.MX,
404
+ forceMergeOpRead=true>;
405
+ }
406
+ }
407
+
408
+ multiclass VPseudoVBREV8 {
409
+ foreach m = MxList in {
410
+ defvar mx = m.MX;
411
+ defm "" : VPseudoUnaryV_V<m>,
412
+ SchedUnary<"WriteVBREV8", "ReadVBREV8", mx, forceMergeOpRead=true>;
413
+ }
414
+ }
415
+
416
+ multiclass VPseudoVREV8 {
417
+ foreach m = MxList in {
418
+ defvar mx = m.MX;
419
+ defm "" : VPseudoUnaryV_V<m>,
420
+ SchedUnary<"WriteVREV8", "ReadVREV8", mx, forceMergeOpRead=true>;
421
+ }
422
+ }
423
+
424
+ multiclass VPseudoVROL {
425
+ foreach m = MxList in {
426
+ defm "" : VPseudoBinaryV_VV<m>,
427
+ SchedBinary<"WriteVROL", "ReadVROL", "ReadVROL", m.MX,
428
+ forceMergeOpRead=true>;
429
+ defm "" : VPseudoBinaryV_VX<m>,
430
+ SchedBinary<"WriteVROL", "ReadVROL", "ReadVROL", m.MX,
431
+ forceMergeOpRead=true>;
432
+ }
433
+ }
434
+
435
+ multiclass VPseudoVROR<Operand ImmType> {
436
+ defvar Constraint = "";
437
+ foreach m = MxList in {
438
+ defvar mx = m.MX;
439
+ defm "" : VPseudoBinaryV_VV<m>,
440
+ SchedBinary<"WriteVROR", "ReadVROR", "ReadVROR", mx,
441
+ forceMergeOpRead=true>;
442
+ defm "" : VPseudoBinaryV_VX<m>,
443
+ SchedBinary<"WriteVROR", "ReadVROR", "ReadVROR", mx,
444
+ forceMergeOpRead=true>;
445
+ defm "" : VPseudoBinaryV_VI<ImmType, m>,
446
+ SchedUnary<"WriteVROR", "ReadVROR", mx, forceMergeOpRead=true>;
447
+ }
448
+ }
449
+
374
450
let Predicates = [HasStdExtZvbb] in {
375
- defm PseudoVBREV : VPseudoVALU_V ;
376
- defm PseudoVCLZ : VPseudoVALU_V ;
377
- defm PseudoVCTZ : VPseudoVALU_V ;
378
- defm PseudoVCPOP : VPseudoVALU_V ;
451
+ defm PseudoVBREV : VPseudoVBREV ;
452
+ defm PseudoVCLZ : VPseudoVCLZ ;
453
+ defm PseudoVCTZ : VPseudoVCTZ ;
454
+ defm PseudoVCPOP : VPseudoVCPOP ;
379
455
defm PseudoVWSLL : VPseudoVWALU_VV_VX_VI<uimm5>;
380
456
} // Predicates = [HasStdExtZvbb]
381
457
@@ -385,10 +461,10 @@ let Predicates = [HasStdExtZvbc] in {
385
461
} // Predicates = [HasStdExtZvbc]
386
462
387
463
let Predicates = [HasStdExtZvkb] in {
388
- defm PseudoVANDN : VPseudoVALU_VV_VX ;
389
- defm PseudoVBREV8 : VPseudoVALU_V ;
390
- defm PseudoVREV8 : VPseudoVALU_V ;
391
- defm PseudoVROL : VPseudoVALU_VV_VX ;
464
+ defm PseudoVANDN : VPseudoVANDN ;
465
+ defm PseudoVBREV8 : VPseudoVBREV8 ;
466
+ defm PseudoVREV8 : VPseudoVREV8 ;
467
+ defm PseudoVROL : VPseudoVROL ;
392
468
defm PseudoVROR : VPseudoVALU_VV_VX_VI<uimm6>;
393
469
} // Predicates = [HasStdExtZvkb]
394
470
0 commit comments