[llvm] [RISCV][ISEL] Lowering to load-acquire/store-release for RISCV Zalasr (PR #82914)

Wang Pengcheng via llvm-commits llvm-commits at lists.llvm.org
Sun Feb 25 21:10:41 PST 2024


================
@@ -105,22 +105,66 @@ defm AMOMAXU_D  : AMO_rr_aq_rl<0b11100, 0b011, "amomaxu.d">,
 // Pseudo-instructions and codegen patterns
 //===----------------------------------------------------------------------===//
 
+// An atomic load operation that does not need either acquire or release
+// semantics.
+class relaxed_load<PatFrags base>
+  : PatFrag<(ops node:$ptr), (base node:$ptr)> {
+  let IsAtomic = 1;
----------------
wangpc-pp wrote:

```
let IsAtomic = 1 in {
class AtomicLoadPatFrag<PatFrags base> : PatFrag<(ops node:$ptr), (base node:$ptr)>;
class AtomicStorePatFrag<PatFrags base> : PatFrag<(ops node:$val, node:$ptr),
                                                  (base node:$val, node:$ptr)>;
}
```
This can save some lines (see also https://github.com/llvm/llvm-project/pull/67108/files#diff-05e7611c943737b140bf2d29e980376e369b537d640ce2ed1ca932219a8c0bd7R130-R158).
Or, you can just add a `let IsAtomic = 1` scope:
```
let IsAtomic = 1 in {
class relaxed_load<PatFrags base> ...
...
}
```

https://github.com/llvm/llvm-project/pull/82914


More information about the llvm-commits mailing list