[llvm] [WebAssembly] MC support for acquire-release atomics (PR #183656)

Derek Schuff via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 2 13:55:06 PST 2026


================
@@ -1167,11 +1199,21 @@ class WebAssemblyAsmParser final : public MCTargetAsmParser {
     case Match_Success: {
       ensureLocals(Out);
       // Fix unknown p2align operands.
+      const MCInstrDesc &Desc = MII.get(Inst.getOpcode());
       auto Align = WebAssembly::GetDefaultP2AlignAny(Inst.getOpcode());
       if (Align != -1U) {
-        auto &Op0 = Inst.getOperand(0);
-        if (Op0.getImm() == -1)
-          Op0.setImm(Align);
+        unsigned I = 0;
+        // It's operand 0 for regular memory ops and 1 for atomics.
+        for (unsigned E = Desc.getNumOperands(); I < E; ++I) {
+          if (Desc.operands()[I].OperandType == WebAssembly::OPERAND_P2ALIGN) {
+            auto &Op = Inst.getOperand(I);
+            if (Op.getImm() == -1) {
+              Op.setImm(Align);
+            }
+            break;
+          }
+        }
+        assert(I < 2 && "Default p2align set but operand not found");
----------------
dschuff wrote:

I was trying to avoid having a variable that was completely unused in a non-asserts build, to avoid unused variable warnings. Do you think it would be cleaner to do that anyway, but wrap in a `DEBUG()`?

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


More information about the llvm-commits mailing list