[llvm] [RISCV] Add an OperandType for ordering for atomic pseudos. (PR #171744)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 10 16:05:18 PST 2025
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: Craig Topper (topperc)
<details>
<summary>Changes</summary>
---
Full diff: https://github.com/llvm/llvm-project/pull/171744.diff
3 Files Affected:
- (modified) llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h (+2)
- (modified) llvm/lib/Target/RISCV/RISCVInstrInfo.cpp (+3)
- (modified) llvm/lib/Target/RISCV/RISCVInstrInfoA.td (+14-6)
``````````diff
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
index 40b46f503ca53..74066c86d6ebe 100644
--- a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
+++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVBaseInfo.h
@@ -433,6 +433,8 @@ enum OperandType : unsigned {
OPERAND_RTZARG,
// Condition code used by select and short forward branch pseudos.
OPERAND_COND_CODE,
+ // Ordering for atomic pseudos.
+ OPERAND_ATOMIC_ORDERING,
// Vector policy operand.
OPERAND_VEC_POLICY,
// Vector SEW operand. Stores in log2(SEW).
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
index ce5a67bd23a9a..76dc57c45fb0b 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfo.cpp
@@ -3025,6 +3025,9 @@ bool RISCVInstrInfo::verifyInstruction(const MachineInstr &MI,
case RISCVOp::OPERAND_COND_CODE:
Ok = Imm >= 0 && Imm < RISCVCC::COND_INVALID;
break;
+ case RISCVOp::OPERAND_ATOMIC_ORDERING:
+ Ok = isValidAtomicOrdering(Imm);
+ break;
case RISCVOp::OPERAND_VEC_POLICY:
Ok = (Imm & (RISCVVType::TAIL_AGNOSTIC | RISCVVType::MASK_AGNOSTIC)) ==
Imm;
diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoA.td b/llvm/lib/Target/RISCV/RISCVInstrInfoA.td
index 5c81a0990a64f..44798b63376f7 100644
--- a/llvm/lib/Target/RISCV/RISCVInstrInfoA.td
+++ b/llvm/lib/Target/RISCV/RISCVInstrInfoA.td
@@ -11,6 +11,14 @@
//
//===----------------------------------------------------------------------===//
+//===----------------------------------------------------------------------===//
+// Operand and SDNode transformation definitions.
+//===----------------------------------------------------------------------===//
+
+def ordering : RISCVOp {
+ let OperandType = "OPERAND_ATOMIC_ORDERING";
+}
+
//===----------------------------------------------------------------------===//
// Instruction class templates
//===----------------------------------------------------------------------===//
@@ -244,7 +252,7 @@ defm : AMOPat<"atomic_load_umin_i64", "AMOMINU_D", i64, [IsRV64]>;
/// Pseudo AMOs
class PseudoAMO : Pseudo<(outs GPR:$res, GPR:$scratch),
- (ins GPR:$addr, GPR:$incr, ixlenimm:$ordering), []> {
+ (ins GPR:$addr, GPR:$incr, ordering:$ordering), []> {
let Constraints = "@earlyclobber $res, at earlyclobber $scratch";
let mayLoad = 1;
let mayStore = 1;
@@ -253,7 +261,7 @@ class PseudoAMO : Pseudo<(outs GPR:$res, GPR:$scratch),
class PseudoMaskedAMO
: Pseudo<(outs GPR:$res, GPR:$scratch),
- (ins GPR:$addr, GPR:$incr, GPR:$mask, ixlenimm:$ordering), []> {
+ (ins GPR:$addr, GPR:$incr, GPR:$mask, ordering:$ordering), []> {
let Constraints = "@earlyclobber $res, at earlyclobber $scratch";
let mayLoad = 1;
let mayStore = 1;
@@ -263,7 +271,7 @@ class PseudoMaskedAMO
class PseudoMaskedAMOMinMax
: Pseudo<(outs GPR:$res, GPR:$scratch1, GPR:$scratch2),
(ins GPR:$addr, GPR:$incr, GPR:$mask, ixlenimm:$sextshamt,
- ixlenimm:$ordering), []> {
+ ordering:$ordering), []> {
let Constraints = "@earlyclobber $res, at earlyclobber $scratch1,"
"@earlyclobber $scratch2";
let mayLoad = 1;
@@ -273,7 +281,7 @@ class PseudoMaskedAMOMinMax
class PseudoMaskedAMOUMinUMax
: Pseudo<(outs GPR:$res, GPR:$scratch1, GPR:$scratch2),
- (ins GPR:$addr, GPR:$incr, GPR:$mask, ixlenimm:$ordering), []> {
+ (ins GPR:$addr, GPR:$incr, GPR:$mask, ordering:$ordering), []> {
let Constraints = "@earlyclobber $res, at earlyclobber $scratch1,"
"@earlyclobber $scratch2";
let mayLoad = 1;
@@ -419,7 +427,7 @@ defm : PseudoAMOPat<"atomic_load_nand_i64", PseudoAtomicLoadNand64, i64>;
class PseudoCmpXchg
: Pseudo<(outs GPR:$res, GPR:$scratch),
- (ins GPR:$addr, GPR:$cmpval, GPR:$newval, ixlenimm:$ordering), []> {
+ (ins GPR:$addr, GPR:$cmpval, GPR:$newval, ordering:$ordering), []> {
let Constraints = "@earlyclobber $res, at earlyclobber $scratch";
let mayLoad = 1;
let mayStore = 1;
@@ -457,7 +465,7 @@ let Predicates = [HasStdExtZalrsc] in {
def PseudoMaskedCmpXchg32
: Pseudo<(outs GPR:$res, GPR:$scratch),
(ins GPR:$addr, GPR:$cmpval, GPR:$newval, GPR:$mask,
- ixlenimm:$ordering), []> {
+ ordering:$ordering), []> {
let Constraints = "@earlyclobber $res, at earlyclobber $scratch";
let mayLoad = 1;
let mayStore = 1;
``````````
</details>
https://github.com/llvm/llvm-project/pull/171744
More information about the llvm-commits
mailing list