@@ -2379,12 +2379,21 @@ multiclass VPseudoVGTR_VV_VX_VI<Operand ImmType = simm5, string Constraint = "">
2379
2379
}
2380
2380
2381
2381
multiclass VPseudoVSALU_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""> {
2382
- defm "" : VPseudoBinaryV_VV<Constraint>,
2383
- Sched<[WriteVSALUV, ReadVSALUV, ReadVSALUV, ReadVMask]>;
2384
- defm "" : VPseudoBinaryV_VX<Constraint>,
2385
- Sched<[WriteVSALUX, ReadVSALUV, ReadVSALUX, ReadVMask]>;
2386
- defm "" : VPseudoBinaryV_VI<ImmType, Constraint>,
2387
- Sched<[WriteVSALUI, ReadVSALUV, ReadVMask]>;
2382
+ foreach m = MxList in {
2383
+ defvar mx = m.MX;
2384
+ defvar WriteVSALUV_MX = !cast<SchedWrite>("WriteVSALUV_" # mx);
2385
+ defvar WriteVSALUX_MX = !cast<SchedWrite>("WriteVSALUX_" # mx);
2386
+ defvar WriteVSALUI_MX = !cast<SchedWrite>("WriteVSALUI_" # mx);
2387
+ defvar ReadVSALUV_MX = !cast<SchedRead>("ReadVSALUV_" # mx);
2388
+ defvar ReadVSALUX_MX = !cast<SchedRead>("ReadVSALUX_" # mx);
2389
+
2390
+ defm "" : VPseudoBinaryV_VV_LMUL<m, Constraint>,
2391
+ Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>;
2392
+ defm "" : VPseudoBinaryV_VX_LMUL<m, Constraint>,
2393
+ Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>;
2394
+ defm "" : VPseudoBinaryV_VI_LMUL<ImmType, m, Constraint>,
2395
+ Sched<[WriteVSALUI_MX, ReadVSALUV_MX, ReadVMask]>;
2396
+ }
2388
2397
}
2389
2398
2390
2399
@@ -2407,12 +2416,21 @@ multiclass VPseudoVSHT_VV_VX_VI<Operand ImmType = simm5, string Constraint = "">
2407
2416
}
2408
2417
2409
2418
multiclass VPseudoVSSHT_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""> {
2410
- defm "" : VPseudoBinaryV_VV<Constraint>,
2411
- Sched<[WriteVSShiftV, ReadVSShiftV, ReadVSShiftV, ReadVMask]>;
2412
- defm "" : VPseudoBinaryV_VX<Constraint>,
2413
- Sched<[WriteVSShiftX, ReadVSShiftV, ReadVSShiftX, ReadVMask]>;
2414
- defm "" : VPseudoBinaryV_VI<ImmType, Constraint>,
2415
- Sched<[WriteVSShiftI, ReadVSShiftV, ReadVMask]>;
2419
+ foreach m = MxList in {
2420
+ defvar mx = m.MX;
2421
+ defvar WriteVSShiftV_MX = !cast<SchedWrite>("WriteVSShiftV_" # mx);
2422
+ defvar WriteVSShiftX_MX = !cast<SchedWrite>("WriteVSShiftX_" # mx);
2423
+ defvar WriteVSShiftI_MX = !cast<SchedWrite>("WriteVSShiftI_" # mx);
2424
+ defvar ReadVSShiftV_MX = !cast<SchedRead>("ReadVSShiftV_" # mx);
2425
+ defvar ReadVSShiftX_MX = !cast<SchedRead>("ReadVSShiftX_" # mx);
2426
+
2427
+ defm "" : VPseudoBinaryV_VV_LMUL<m, Constraint>,
2428
+ Sched<[WriteVSShiftV_MX, ReadVSShiftV_MX, ReadVSShiftV_MX, ReadVMask]>;
2429
+ defm "" : VPseudoBinaryV_VX_LMUL<m, Constraint>,
2430
+ Sched<[WriteVSShiftX_MX, ReadVSShiftV_MX, ReadVSShiftX_MX, ReadVMask]>;
2431
+ defm "" : VPseudoBinaryV_VI_LMUL<ImmType, m, Constraint>,
2432
+ Sched<[WriteVSShiftI_MX, ReadVSShiftV_MX, ReadVMask]>;
2433
+ }
2416
2434
}
2417
2435
2418
2436
multiclass VPseudoVALU_VV_VX_VI<Operand ImmType = simm5, string Constraint = ""> {
@@ -2434,24 +2452,48 @@ multiclass VPseudoVALU_VV_VX_VI<Operand ImmType = simm5, string Constraint = "">
2434
2452
}
2435
2453
2436
2454
multiclass VPseudoVSALU_VV_VX {
2437
- defm "" : VPseudoBinaryV_VV,
2438
- Sched<[WriteVSALUV, ReadVSALUV, ReadVSALUV, ReadVMask]>;
2439
- defm "" : VPseudoBinaryV_VX,
2440
- Sched<[WriteVSALUX, ReadVSALUV, ReadVSALUX, ReadVMask]>;
2455
+ foreach m = MxList in {
2456
+ defvar mx = m.MX;
2457
+ defvar WriteVSALUV_MX = !cast<SchedWrite>("WriteVSALUV_" # mx);
2458
+ defvar WriteVSALUX_MX = !cast<SchedWrite>("WriteVSALUX_" # mx);
2459
+ defvar ReadVSALUV_MX = !cast<SchedRead>("ReadVSALUV_" # mx);
2460
+ defvar ReadVSALUX_MX = !cast<SchedRead>("ReadVSALUX_" # mx);
2461
+
2462
+ defm "" : VPseudoBinaryV_VV_LMUL<m>,
2463
+ Sched<[WriteVSALUV_MX, ReadVSALUV_MX, ReadVSALUV_MX, ReadVMask]>;
2464
+ defm "" : VPseudoBinaryV_VX_LMUL<m>,
2465
+ Sched<[WriteVSALUX_MX, ReadVSALUV_MX, ReadVSALUX_MX, ReadVMask]>;
2466
+ }
2441
2467
}
2442
2468
2443
2469
multiclass VPseudoVSMUL_VV_VX {
2444
- defm "" : VPseudoBinaryV_VV,
2445
- Sched<[WriteVSMulV, ReadVSMulV, ReadVSMulV, ReadVMask]>;
2446
- defm "" : VPseudoBinaryV_VX,
2447
- Sched<[WriteVSMulX, ReadVSMulV, ReadVSMulX, ReadVMask]>;
2470
+ foreach m = MxList in {
2471
+ defvar mx = m.MX;
2472
+ defvar WriteVSMulV_MX = !cast<SchedWrite>("WriteVSMulV_" # mx);
2473
+ defvar WriteVSMulX_MX = !cast<SchedWrite>("WriteVSMulX_" # mx);
2474
+ defvar ReadVSMulV_MX = !cast<SchedRead>("ReadVSMulV_" # mx);
2475
+ defvar ReadVSMulX_MX = !cast<SchedRead>("ReadVSMulX_" # mx);
2476
+
2477
+ defm "" : VPseudoBinaryV_VV_LMUL<m>,
2478
+ Sched<[WriteVSMulV_MX, ReadVSMulV_MX, ReadVSMulV_MX, ReadVMask]>;
2479
+ defm "" : VPseudoBinaryV_VX_LMUL<m>,
2480
+ Sched<[WriteVSMulX_MX, ReadVSMulV_MX, ReadVSMulX_MX, ReadVMask]>;
2481
+ }
2448
2482
}
2449
2483
2450
2484
multiclass VPseudoVAALU_VV_VX {
2451
- defm "" : VPseudoBinaryV_VV,
2452
- Sched<[WriteVAALUV, ReadVAALUV, ReadVAALUV, ReadVMask]>;
2453
- defm "" : VPseudoBinaryV_VX,
2454
- Sched<[WriteVAALUX, ReadVAALUV, ReadVAALUX, ReadVMask]>;
2485
+ foreach m = MxList in {
2486
+ defvar mx = m.MX;
2487
+ defvar WriteVAALUV_MX = !cast<SchedWrite>("WriteVAALUV_" # mx);
2488
+ defvar WriteVAALUX_MX = !cast<SchedWrite>("WriteVAALUX_" # mx);
2489
+ defvar ReadVAALUV_MX = !cast<SchedRead>("ReadVAALUV_" # mx);
2490
+ defvar ReadVAALUX_MX = !cast<SchedRead>("ReadVAALUX_" # mx);
2491
+
2492
+ defm "" : VPseudoBinaryV_VV_LMUL<m>,
2493
+ Sched<[WriteVAALUV_MX, ReadVAALUV_MX, ReadVAALUV_MX, ReadVMask]>;
2494
+ defm "" : VPseudoBinaryV_VX_LMUL<m>,
2495
+ Sched<[WriteVAALUX_MX, ReadVAALUV_MX, ReadVAALUX_MX, ReadVMask]>;
2496
+ }
2455
2497
}
2456
2498
2457
2499
multiclass VPseudoVMINMAX_VV_VX {
@@ -2777,12 +2819,21 @@ multiclass VPseudoVCALUM_V_X<string Constraint> {
2777
2819
}
2778
2820
2779
2821
multiclass VPseudoVNCLP_WV_WX_WI {
2780
- defm "" : VPseudoBinaryV_WV,
2781
- Sched<[WriteVNClipV, ReadVNClipV, ReadVNClipV, ReadVMask]>;
2782
- defm "" : VPseudoBinaryV_WX,
2783
- Sched<[WriteVNClipX, ReadVNClipV, ReadVNClipX, ReadVMask]>;
2784
- defm "" : VPseudoBinaryV_WI,
2785
- Sched<[WriteVNClipI, ReadVNClipV, ReadVMask]>;
2822
+ foreach m = MxListW in {
2823
+ defvar mx = m.MX;
2824
+ defvar WriteVNClipV_MX = !cast<SchedWrite>("WriteVNClipV_" # mx);
2825
+ defvar WriteVNClipX_MX = !cast<SchedWrite>("WriteVNClipX_" # mx);
2826
+ defvar WriteVNClipI_MX = !cast<SchedWrite>("WriteVNClipI_" # mx);
2827
+ defvar ReadVNClipV_MX = !cast<SchedRead>("ReadVNClipV_" # mx);
2828
+ defvar ReadVNClipX_MX = !cast<SchedRead>("ReadVNClipX_" # mx);
2829
+
2830
+ defm "" : VPseudoBinaryV_WV_LMUL<m>,
2831
+ Sched<[WriteVNClipV_MX, ReadVNClipV_MX, ReadVNClipV_MX, ReadVMask]>;
2832
+ defm "" : VPseudoBinaryV_WX_LMUL<m>,
2833
+ Sched<[WriteVNClipX_MX, ReadVNClipV_MX, ReadVNClipX_MX, ReadVMask]>;
2834
+ defm "" : VPseudoBinaryV_WI_LMUL<m>,
2835
+ Sched<[WriteVNClipI_MX, ReadVNClipV_MX, ReadVMask]>;
2836
+ }
2786
2837
}
2787
2838
2788
2839
multiclass VPseudoVNSHT_WV_WX_WI {
0 commit comments