@@ -466,7 +466,7 @@ class FLAT_AtomicRet_Pseudo<string opName, dag outs, dag ins,
466
466
let PseudoInstr = NAME # "_RTN";
467
467
}
468
468
469
- multiclass FLAT_Atomic_Pseudo <
469
+ multiclass FLAT_Atomic_Pseudo_NO_RTN <
470
470
string opName,
471
471
RegisterClass vdst_rc,
472
472
ValueType vt,
@@ -484,7 +484,16 @@ multiclass FLAT_Atomic_Pseudo<
484
484
let FPAtomic = isFP;
485
485
let AddedComplexity = -1; // Prefer global atomics if available
486
486
}
487
+ }
487
488
489
+ multiclass FLAT_Atomic_Pseudo_RTN<
490
+ string opName,
491
+ RegisterClass vdst_rc,
492
+ ValueType vt,
493
+ ValueType data_vt = vt,
494
+ RegisterClass data_rc = vdst_rc,
495
+ bit isFP = isFloatType<data_vt>.ret,
496
+ RegisterOperand data_op = getLdStRegisterOperand<data_rc>.ret> {
488
497
def _RTN : FLAT_AtomicRet_Pseudo <opName,
489
498
(outs getLdStRegisterOperand<vdst_rc>.ret:$vdst),
490
499
(ins VReg_64:$vaddr, data_op:$vdata, flat_offset:$offset, CPol_GLC1:$cpol),
@@ -496,6 +505,18 @@ multiclass FLAT_Atomic_Pseudo<
496
505
}
497
506
}
498
507
508
+ multiclass FLAT_Atomic_Pseudo<
509
+ string opName,
510
+ RegisterClass vdst_rc,
511
+ ValueType vt,
512
+ ValueType data_vt = vt,
513
+ RegisterClass data_rc = vdst_rc,
514
+ bit isFP = isFloatType<data_vt>.ret,
515
+ RegisterOperand data_op = getLdStRegisterOperand<data_rc>.ret> {
516
+ defm "" : FLAT_Atomic_Pseudo_NO_RTN<opName, vdst_rc, vt, data_vt, data_rc, isFP, data_op>;
517
+ defm "" : FLAT_Atomic_Pseudo_RTN<opName, vdst_rc, vt, data_vt, data_rc, isFP, data_op>;
518
+ }
519
+
499
520
multiclass FLAT_Global_Atomic_Pseudo_NO_RTN<
500
521
string opName,
501
522
RegisterClass vdst_rc,
0 commit comments