@@ -299,6 +299,20 @@ def CIR_ConstantOp : CIR_Op<"const", [
299299 let hasFolder = 1;
300300}
301301
302+ //===----------------------------------------------------------------------===//
303+ // C/C++ memory order definitions
304+ //===----------------------------------------------------------------------===//
305+
306+ def CIR_MemOrder : CIR_I32EnumAttr<
307+ "MemOrder", "Memory order according to C++11 memory model", [
308+ I32EnumAttrCase<"Relaxed", 0, "relaxed">,
309+ I32EnumAttrCase<"Consume", 1, "consume">,
310+ I32EnumAttrCase<"Acquire", 2, "acquire">,
311+ I32EnumAttrCase<"Release", 3, "release">,
312+ I32EnumAttrCase<"AcquireRelease", 4, "acq_rel">,
313+ I32EnumAttrCase<"SequentiallyConsistent", 5, "seq_cst">
314+ ]>;
315+
302316//===----------------------------------------------------------------------===//
303317// AllocaOp
304318//===----------------------------------------------------------------------===//
@@ -408,13 +422,14 @@ def CIR_LoadOp : CIR_Op<"load", [
408422 let arguments = (ins Arg<CIR_PointerType, "the address to load from",
409423 [MemRead]>:$addr,
410424 UnitAttr:$isDeref,
411- OptionalAttr<I64Attr>:$alignment
412- );
425+ OptionalAttr<I64Attr>:$alignment,
426+ OptionalAttr<CIR_MemOrder>:$mem_order );
413427 let results = (outs CIR_AnyType:$result);
414428
415429 let assemblyFormat = [{
416430 (`deref` $isDeref^)?
417431 (`align` `(` $alignment^ `)`)?
432+ (`atomic` `(` $mem_order^ `)`)?
418433 $addr `:` qualified(type($addr)) `,` type($result) attr-dict
419434 }];
420435
@@ -451,10 +466,12 @@ def CIR_StoreOp : CIR_Op<"store", [
451466 let arguments = (ins CIR_AnyType:$value,
452467 Arg<CIR_PointerType, "the address to store the value",
453468 [MemWrite]>:$addr,
454- OptionalAttr<I64Attr>:$alignment);
469+ OptionalAttr<I64Attr>:$alignment,
470+ OptionalAttr<CIR_MemOrder>:$mem_order);
455471
456472 let assemblyFormat = [{
457473 (`align` `(` $alignment^ `)`)?
474+ (`atomic` `(` $mem_order^ `)`)?
458475 $value `,` $addr attr-dict `:` type($value) `,` qualified(type($addr))
459476 }];
460477
0 commit comments