@@ -5403,6 +5403,65 @@ def AtomicCmpXchg : CIR_Op<"atomic.cmp_xchg",
5403
5403
let hasVerifier = 0;
5404
5404
}
5405
5405
5406
+ def MemScope_SingleThread : I32EnumAttrCase<"MemScope_SingleThread",
5407
+ 0, "single_thread">;
5408
+ def MemScope_System : I32EnumAttrCase<"MemScope_System",
5409
+ 1, "system">;
5410
+
5411
+ def MemScopeKind : I32EnumAttr<
5412
+ "MemScopeKind",
5413
+ "Memory Scope Enumeration",
5414
+ [MemScope_SingleThread, MemScope_System]> {
5415
+ let cppNamespace = "::cir";
5416
+ }
5417
+
5418
+ def AtomicOrdering_Relaxed
5419
+ : I32EnumAttrCase<"AtomicOrdering_Relaxed",
5420
+ 0, "relaxed">;
5421
+ def AtomicOrdering_Aquire
5422
+ : I32EnumAttrCase<"AtomicOrdering_Aquire",
5423
+ 1, "aquire">;
5424
+ def AtomicOrdering_Release
5425
+ : I32EnumAttrCase<"AtomicOrdering_Release",
5426
+ 2, "release">;
5427
+ def AtomicOrdering_AquireRelease
5428
+ : I32EnumAttrCase<"AtomicOrdering_AquireRelease",
5429
+ 3, "acq_rel">;
5430
+ def AtomicOrdering_SequentialConsistency
5431
+ : I32EnumAttrCase<"AtomicOrdering_SequentialConsistency",
5432
+ 4, "seq_cst">;
5433
+
5434
+ def AtomicOrderingKind : I32EnumAttr<
5435
+ "AtomicOrderingKind",
5436
+ "Atomic Ordering Enumeration",
5437
+ [AtomicOrdering_Relaxed, AtomicOrdering_Aquire,
5438
+ AtomicOrdering_AquireRelease, AtomicOrdering_SequentialConsistency]> {
5439
+ let cppNamespace = "::cir";
5440
+ }
5441
+
5442
+ def AtomicFenceOp : CIR_Op<"atomic.thread_fence"> {
5443
+ let summary = "Atomic thread fence";
5444
+ let description = [{
5445
+ C/C++ Atomic thread fence synchronization primitive. Implements the builtin
5446
+ `__atomic_thread_fence` which enforces memory ordering constraints across
5447
+ threads within the specified synchronization scope.
5448
+
5449
+ Example:
5450
+
5451
+
5452
+ }];
5453
+ let results = (outs);
5454
+ let arguments = (ins MemScopeKind:$sync_scope,
5455
+ AtomicOrderingKind:$ordering);
5456
+
5457
+ let assemblyFormat = [{
5458
+ `(` `sync_scope` `=` $sync_scope `,`
5459
+ `ordering` `=` $ordering `)` attr-dict
5460
+ }];
5461
+
5462
+ let hasVerifier = 1;
5463
+ }
5464
+
5406
5465
def SignBitOp : CIR_Op<"signbit", [Pure]> {
5407
5466
let summary = "Checks the sign of a floating-point number";
5408
5467
let description = [{
0 commit comments