@@ -3812,6 +3812,41 @@ mlir::LogicalResult CIRToLLVMAtomicFetchLowering::matchAndRewrite(
38123812 return mlir::success ();
38133813}
38143814
3815+ mlir::LogicalResult CIRToLLVMAtomicTestAndSetOpLowering::matchAndRewrite (
3816+ cir::AtomicTestAndSetOp op, OpAdaptor adaptor,
3817+ mlir::ConversionPatternRewriter &rewriter) const {
3818+ mlir::LLVM::AtomicOrdering llvmOrder = getLLVMAtomicOrder (op.getMemOrder ());
3819+ llvm::StringRef llvmSyncScope =
3820+ getLLVMSyncScope (adaptor.getSyncscope ()).value_or (StringRef ());
3821+
3822+ auto one = mlir::LLVM::ConstantOp::create (rewriter, op.getLoc (),
3823+ rewriter.getI8Type (), 1 );
3824+ auto rmw = mlir::LLVM::AtomicRMWOp::create (
3825+ rewriter, op.getLoc (), mlir::LLVM::AtomicBinOp::xchg, adaptor.getPtr (),
3826+ one, llvmOrder, llvmSyncScope, adaptor.getAlignment ().value_or (0 ),
3827+ op.getIsVolatile ());
3828+ auto cmp = mlir::LLVM::ICmpOp::create (
3829+ rewriter, op.getLoc (), mlir::LLVM::ICmpPredicate::ne, one, rmw);
3830+
3831+ rewriter.replaceOp (op, cmp);
3832+ return mlir::success ();
3833+ }
3834+
3835+ mlir::LogicalResult CIRToLLVMAtomicClearOpLowering::matchAndRewrite (
3836+ cir::AtomicClearOp op, OpAdaptor adaptor,
3837+ mlir::ConversionPatternRewriter &rewriter) const {
3838+ // FIXME: add syncscope.
3839+ mlir::LLVM::AtomicOrdering llvmOrder = getLLVMAtomicOrder (op.getMemOrder ());
3840+ auto zero = mlir::LLVM::ConstantOp::create (rewriter, op.getLoc (),
3841+ rewriter.getI8Type (), 0 );
3842+ auto store = mlir::LLVM::StoreOp::create (
3843+ rewriter, op.getLoc (), zero, adaptor.getPtr (),
3844+ adaptor.getAlignment ().value_or (0 ), op.getIsVolatile (),
3845+ /* isNonTemporal=*/ false , /* isInvariantGroup=*/ false , llvmOrder);
3846+ rewriter.replaceOp (op, store);
3847+ return mlir::success ();
3848+ }
3849+
38153850mlir::LogicalResult CIRToLLVMAtomicFenceLowering::matchAndRewrite (
38163851 cir::AtomicFence op, OpAdaptor adaptor,
38173852 mlir::ConversionPatternRewriter &rewriter) const {
@@ -4772,8 +4807,10 @@ void populateCIRToLLVMConversionPatterns(
47724807 CIRToLLVMAssumeAlignedOpLowering,
47734808 CIRToLLVMAssumeOpLowering,
47744809 CIRToLLVMAssumeSepStorageOpLowering,
4810+ CIRToLLVMAtomicClearOpLowering,
47754811 CIRToLLVMAtomicCmpXchgLowering,
47764812 CIRToLLVMAtomicFetchLowering,
4813+ CIRToLLVMAtomicTestAndSetOpLowering,
47774814 CIRToLLVMAtomicXchgLowering,
47784815 CIRToLLVMAtomicFenceLowering,
47794816 CIRToLLVMBaseClassAddrOpLowering,
0 commit comments