Skip to content

Conversation

FantasqueX
Copy link
Collaborator

This PR make CIR's AtomicFenceOp similar to MLIR LLVMIR's FenceOp.

MLIR LLVMIR FenceOp:

def LLVM_FenceOp : LLVM_Op<"fence">, LLVM_MemOpPatterns {
let arguments = (ins AtomicOrdering:$ordering,
OptionalAttr<StrAttr>:$syncscope);
let assemblyFormat = "(`syncscope` `(` $syncscope^ `)`)? $ordering attr-dict";
string llvmInstName = "Fence";
let llvmBuilder = [{
auto *inst = builder.CreateFence(convertAtomicOrderingToLLVM($ordering));
}] # setSyncScopeCode;
string mlirBuilder = [{
llvm::FenceInst *fenceInst = cast<llvm::FenceInst>(inst);
$_op = $_builder.create<LLVM::FenceOp>(
$_location,
convertAtomicOrderingFromLLVM(fenceInst->getOrdering()),
getLLVMSyncScope(fenceInst));
}];
let builders = [
LLVM_VoidResultTypeOpBuilder,
LLVM_ZeroResultOpBuilder,
OpBuilder<(ins "LLVM::AtomicOrdering":$ordering,
CArg<"StringRef", "StringRef()">:$syncscope)>
];
let hasVerifier = 1;
}

@bcardosolopes bcardosolopes merged commit a3ab178 into llvm:main Mar 4, 2025
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants