[llvm] [RISCV] Initial ISel support for the experimental zacas extension (PR #67918)

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 4 19:32:54 PST 2023


================
@@ -295,6 +295,28 @@ multiclass PseudoCmpXchgPat<string Op, Pseudo CmpXchgInst,
             (CmpXchgInst GPR:$addr, GPR:$cmp, GPR:$new, 7)>;
 }
 
+let Predicates = [HasStdExtZacas] in {
+class PseudoAMOCAS<RegisterClass RC = GPR>
+    : Pseudo<(outs RC:$res),
+             (ins GPR:$addr, RC:$cmpval, RC:$newval, ixlenimm:$ordering), []> {
+  let Constraints = "@earlyclobber $res, $res = $cmpval";
+  let mayLoad = 1;
+  let mayStore = 1;
+  let hasSideEffects = 0;
+}
+def PseudoAMOCAS_W: PseudoAMOCAS;
+defm : PseudoCmpXchgPat<"atomic_cmp_swap_32", PseudoAMOCAS_W>;
+
+let Predicates = [HasStdExtZacas, IsRV32] in {
+  def PseudoAMOCAS_D_32: PseudoAMOCAS<GPRPI64>;
----------------
topperc wrote:

Name this `PseudoAMOCAS_D_RV32` to match the precedent set by `ZEXT_H_RV32`, `REV8_RV32`, etc. 

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


More information about the llvm-commits mailing list