[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 21:36:07 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>;
----------------
topperc wrote:
Can we directly select PseudoAMOCAS_W and PseudoAMOCAS_D_RV64 without going through a pseudoinstruction? Similar to `AMOPat`?
https://github.com/llvm/llvm-project/pull/67918
More information about the llvm-commits
mailing list