Skip to content

Commit 630712f

Browse files
authored
[RISCV] Add a helper class to reduce PseudoAtomicLoadNand* pattern duplication. NFC (#154838)
1 parent b1b5102 commit 630712f

File tree

1 file changed

+17
-24
lines changed

1 file changed

+17
-24
lines changed

llvm/lib/Target/RISCV/RISCVInstrInfoA.td

Lines changed: 17 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -277,6 +277,21 @@ class PseudoMaskedAMOUMinUMax
277277
let hasSideEffects = 0;
278278
}
279279

280+
// Ordering constants must be kept in sync with the AtomicOrdering enum in
281+
// AtomicOrdering.h.
282+
multiclass PseudoAMOPat<string AtomicOp, Pseudo AMOInst, ValueType vt = XLenVT> {
283+
def : Pat<(vt (!cast<PatFrag>(AtomicOp#"_monotonic") GPR:$addr, GPR:$incr)),
284+
(AMOInst GPR:$addr, GPR:$incr, 2)>;
285+
def : Pat<(vt (!cast<PatFrag>(AtomicOp#"_acquire") GPR:$addr, GPR:$incr)),
286+
(AMOInst GPR:$addr, GPR:$incr, 4)>;
287+
def : Pat<(vt (!cast<PatFrag>(AtomicOp#"_release") GPR:$addr, GPR:$incr)),
288+
(AMOInst GPR:$addr, GPR:$incr, 5)>;
289+
def : Pat<(vt (!cast<PatFrag>(AtomicOp#"_acq_rel") GPR:$addr, GPR:$incr)),
290+
(AMOInst GPR:$addr, GPR:$incr, 6)>;
291+
def : Pat<(vt (!cast<PatFrag>(AtomicOp#"_seq_cst") GPR:$addr, GPR:$incr)),
292+
(AMOInst GPR:$addr, GPR:$incr, 7)>;
293+
}
294+
280295
class PseudoMaskedAMOPat<Intrinsic intrin, Pseudo AMOInst>
281296
: Pat<(intrin GPR:$addr, GPR:$incr, GPR:$mask, timm:$ordering),
282297
(AMOInst GPR:$addr, GPR:$incr, GPR:$mask, timm:$ordering)>;
@@ -291,18 +306,7 @@ let Predicates = [HasStdExtA] in {
291306

292307
let Size = 20 in
293308
def PseudoAtomicLoadNand32 : PseudoAMO;
294-
// Ordering constants must be kept in sync with the AtomicOrdering enum in
295-
// AtomicOrdering.h.
296-
def : Pat<(XLenVT (atomic_load_nand_i32_monotonic GPR:$addr, GPR:$incr)),
297-
(PseudoAtomicLoadNand32 GPR:$addr, GPR:$incr, 2)>;
298-
def : Pat<(XLenVT (atomic_load_nand_i32_acquire GPR:$addr, GPR:$incr)),
299-
(PseudoAtomicLoadNand32 GPR:$addr, GPR:$incr, 4)>;
300-
def : Pat<(XLenVT (atomic_load_nand_i32_release GPR:$addr, GPR:$incr)),
301-
(PseudoAtomicLoadNand32 GPR:$addr, GPR:$incr, 5)>;
302-
def : Pat<(XLenVT (atomic_load_nand_i32_acq_rel GPR:$addr, GPR:$incr)),
303-
(PseudoAtomicLoadNand32 GPR:$addr, GPR:$incr, 6)>;
304-
def : Pat<(XLenVT (atomic_load_nand_i32_seq_cst GPR:$addr, GPR:$incr)),
305-
(PseudoAtomicLoadNand32 GPR:$addr, GPR:$incr, 7)>;
309+
defm : PseudoAMOPat<"atomic_load_nand_i32", PseudoAtomicLoadNand32>;
306310

307311
let Size = 28 in {
308312
def PseudoMaskedAtomicSwap32 : PseudoMaskedAMO;
@@ -345,18 +349,7 @@ let Predicates = [HasStdExtA, IsRV64] in {
345349

346350
let Size = 20 in
347351
def PseudoAtomicLoadNand64 : PseudoAMO;
348-
// Ordering constants must be kept in sync with the AtomicOrdering enum in
349-
// AtomicOrdering.h.
350-
def : Pat<(i64 (atomic_load_nand_i64_monotonic GPR:$addr, GPR:$incr)),
351-
(PseudoAtomicLoadNand64 GPR:$addr, GPR:$incr, 2)>;
352-
def : Pat<(i64 (atomic_load_nand_i64_acquire GPR:$addr, GPR:$incr)),
353-
(PseudoAtomicLoadNand64 GPR:$addr, GPR:$incr, 4)>;
354-
def : Pat<(i64 (atomic_load_nand_i64_release GPR:$addr, GPR:$incr)),
355-
(PseudoAtomicLoadNand64 GPR:$addr, GPR:$incr, 5)>;
356-
def : Pat<(i64 (atomic_load_nand_i64_acq_rel GPR:$addr, GPR:$incr)),
357-
(PseudoAtomicLoadNand64 GPR:$addr, GPR:$incr, 6)>;
358-
def : Pat<(i64 (atomic_load_nand_i64_seq_cst GPR:$addr, GPR:$incr)),
359-
(PseudoAtomicLoadNand64 GPR:$addr, GPR:$incr, 7)>;
352+
defm : PseudoAMOPat<"atomic_load_nand_i64", PseudoAtomicLoadNand64, i64>;
360353

361354
def : PseudoMaskedAMOPat<int_riscv_masked_atomicrmw_xchg_i64,
362355
PseudoMaskedAtomicSwap32>;

0 commit comments

Comments
 (0)