Skip to content

Commit c2cc1a9

Browse files
committed
[CIRGen] Task 1: Support for builtin __atomic_thread_fence
Part of #1274 Implements atomic thread fence synchronization primitive corresponding to `atomic.thread_fence` CIR.
1 parent 0ae5000 commit c2cc1a9

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

clang/include/clang/CIR/Dialect/IR/CIROps.td

+59
Original file line numberDiff line numberDiff line change
@@ -5403,6 +5403,65 @@ def AtomicCmpXchg : CIR_Op<"atomic.cmp_xchg",
54035403
let hasVerifier = 0;
54045404
}
54055405

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+
54065465
def SignBitOp : CIR_Op<"signbit", [Pure]> {
54075466
let summary = "Checks the sign of a floating-point number";
54085467
let description = [{

0 commit comments

Comments
 (0)