[RISCV] Add target feature to force-enable atomics · llvm/llvm-project@f5ed0cb (original) (raw)

`@@ -105,20 +105,25 @@ defm AMOMAXU_D : AMO_rr_aq_rl<0b11100, 0b011, "amomaxu.d">,

`

105

105

`// Pseudo-instructions and codegen patterns

`

106

106

`//===----------------------------------------------------------------------===//

`

107

107

``

108

``

`-

let Predicates = [HasStdExtA] in {

`

109

``

-

110

``

`-

/// Atomic loads and stores

`

111

``

-

``

108

`+

// Atomic load/store are available under both +a and +force-atomics.

`

112

109

`// Fences will be inserted for atomic load/stores according to the logic in

`

113

110

`// RISCVTargetLowering::{emitLeadingFence,emitTrailingFence}.

`

``

111

`+

let Predicates = [HasAtomicLdSt] in {

`

``

112

`+

defm : LdPat<atomic_load_8, LB>;

`

``

113

`+

defm : LdPat<atomic_load_16, LH>;

`

``

114

`+

defm : LdPat<atomic_load_32, LW>;

`

``

115

+

``

116

`+

defm : AtomicStPat<atomic_store_8, SB, GPR>;

`

``

117

`+

defm : AtomicStPat<atomic_store_16, SH, GPR>;

`

``

118

`+

defm : AtomicStPat<atomic_store_32, SW, GPR>;

`

``

119

`+

}

`

114

120

``

115

``

`-

defm : LdPat<atomic_load_8, LB>;

`

116

``

`-

defm : LdPat<atomic_load_16, LH>;

`

117

``

`-

defm : LdPat<atomic_load_32, LW>;

`

``

121

`+

let Predicates = [HasAtomicLdSt, IsRV64] in {

`

``

122

`+

defm : LdPat<atomic_load_64, LD, i64>;

`

``

123

`+

defm : AtomicStPat<atomic_store_64, SD, GPR, i64>;

`

``

124

`+

}

`

118

125

``

119

``

`-

defm : AtomicStPat<atomic_store_8, SB, GPR>;

`

120

``

`-

defm : AtomicStPat<atomic_store_16, SH, GPR>;

`

121

``

`-

defm : AtomicStPat<atomic_store_32, SW, GPR>;

`

``

126

`+

let Predicates = [HasStdExtA] in {

`

122

127

``

123

128

`/// AMOs

`

124

129

``

`@@ -304,13 +309,6 @@ def : Pat<(int_riscv_masked_cmpxchg_i32

`

304

309

``

305

310

`let Predicates = [HasStdExtA, IsRV64] in {

`

306

311

``

307

``

`-

/// 64-bit atomic loads and stores

`

308

``

-

309

``

`-

// Fences will be inserted for atomic load/stores according to the logic in

`

310

``

`-

// RISCVTargetLowering::{emitLeadingFence,emitTrailingFence}.

`

311

``

`-

defm : LdPat<atomic_load_64, LD, i64>;

`

312

``

`-

defm : AtomicStPat<atomic_store_64, SD, GPR, i64>;

`

313

``

-

314

312

`defm : AMOPat<"atomic_swap_64", "AMOSWAP_D">;

`

315

313

`defm : AMOPat<"atomic_load_add_64", "AMOADD_D">;

`

316

314

`defm : AMOPat<"atomic_load_and_64", "AMOAND_D">;

`