[clang] 1b14859 - [CIR][NFC] Use declarative llvmOp lowering for coroutine intrinsics (#221343)
via cfe-commits
cfe-commits at lists.llvm.org
Sat Sep 5 09:19:18 PDT 2026
Author: Andres-Salamanca
Date: 2026-09-05T11:19:12-05:00
New Revision: 1b14859d3cd691be104aec3f6c9a51bd658f58a7
URL: https://github.com/llvm/llvm-project/commit/1b14859d3cd691be104aec3f6c9a51bd658f58a7
DIFF: https://github.com/llvm/llvm-project/commit/1b14859d3cd691be104aec3f6c9a51bd658f58a7.diff
LOG: [CIR][NFC] Use declarative llvmOp lowering for coroutine intrinsics (#221343)
This PR switches the coroutine intrinsic ops (`cir.coro.intrinsic.id`,
`.alloc`, `.begin`, `.end`, `.free`, `.size`) to use the declarative
`llvmOp` field instead of hand-written lowering patterns.
Added:
Modified:
clang/include/clang/CIR/Dialect/IR/CIROps.td
clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/CIR/Dialect/IR/CIROps.td b/clang/include/clang/CIR/Dialect/IR/CIROps.td
index c9e5ecc69fa58..632b107402a19 100644
--- a/clang/include/clang/CIR/Dialect/IR/CIROps.td
+++ b/clang/include/clang/CIR/Dialect/IR/CIROps.td
@@ -4951,6 +4951,7 @@ def CIR_CoroIdOp : CIR_CoroIntrinsicOp<"id",
(`coro.alloc`, `coro.begin`, `coro.free`, etc.), tying them all to the
same coroutine instance.
}];
+ let llvmOp = "CoroIdOp";
}
//===----------------------------------------------------------------------===//
@@ -4965,6 +4966,7 @@ def CIR_CoroAllocOp : CIR_CoroIntrinsicOp<"alloc", (ins Token:$id),
allocated frame. Returns `true` if the coroutine frame must be allocated,
or `false` otherwise.
}];
+ let llvmOp = "CoroAllocOp";
}
//===----------------------------------------------------------------------===//
@@ -4980,6 +4982,7 @@ def CIR_CoroBeginOp : CIR_CoroIntrinsicOp<"begin",
from `coro.intrinsic.id`, and `coroframeAddr` points to the memory used
for the coroutine frame. Returns the coroutine handle.
}];
+ let llvmOp = "CoroBeginOp";
}
//===----------------------------------------------------------------------===//
@@ -4998,6 +5001,7 @@ def CIR_CoroEndOp : CIR_CoroIntrinsicOp<"end",
indicates whether this occurrence of `coro.intrinsic.end` lies on the
unwind path (`true`) or the normal control-flow path (`false`).
}];
+ let llvmOp = "CoroEndOp";
}
//===----------------------------------------------------------------------===//
@@ -5014,6 +5018,7 @@ def CIR_CoroFreeOp : CIR_CoroIntrinsicOp<"free",
be passed to the deallocation function to free the coroutine frame, or a
null pointer if the coroutine frame was not dynamically allocated.
}];
+ let llvmOp = "CoroFreeOp";
}
//===----------------------------------------------------------------------===//
@@ -5026,6 +5031,7 @@ def CIR_CoroSizeOp : CIR_CoroIntrinsicOp<"size", (ins),
let description = [{
Returns the size, in bytes, of the coroutine frame.
}];
+ let llvmOp = "CoroSizeOp";
}
//===----------------------------------------------------------------------===//
diff --git a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
index c810a005271e4..31e01c770c55b 100644
--- a/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
+++ b/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
@@ -5570,58 +5570,6 @@ mlir::LogicalResult CIRToLLVMTokenNoneOpLowering::matchAndRewrite(
return mlir::success();
}
-mlir::LogicalResult CIRToLLVMCoroFreeOpLowering::matchAndRewrite(
- cir::CoroFreeOp op, OpAdaptor adaptor,
- mlir::ConversionPatternRewriter &rewriter) const {
- rewriter.replaceOpWithNewOp<mlir::LLVM::CoroFreeOp>(
- op, mlir::LLVM::LLVMPointerType::get(rewriter.getContext()),
- adaptor.getId(), adaptor.getCoroframe());
- return mlir::success();
-}
-
-mlir::LogicalResult CIRToLLVMCoroEndOpLowering::matchAndRewrite(
- cir::CoroEndOp op, OpAdaptor adaptor,
- mlir::ConversionPatternRewriter &rewriter) const {
- rewriter.replaceOpWithNewOp<mlir::LLVM::CoroEndOp>(
- op, mlir::LLVM::LLVMVoidType::get(rewriter.getContext()),
- adaptor.getHandle(), adaptor.getUnwind(), adaptor.getResultToken());
- return mlir::success();
-}
-
-mlir::LogicalResult CIRToLLVMCoroAllocOpLowering::matchAndRewrite(
- cir::CoroAllocOp op, OpAdaptor adaptor,
- mlir::ConversionPatternRewriter &rewriter) const {
- rewriter.replaceOpWithNewOp<mlir::LLVM::CoroAllocOp>(op, rewriter.getI1Type(),
- adaptor.getId());
- return mlir::success();
-}
-
-mlir::LogicalResult CIRToLLVMCoroBeginOpLowering::matchAndRewrite(
- cir::CoroBeginOp op, OpAdaptor adaptor,
- mlir::ConversionPatternRewriter &rewriter) const {
- rewriter.replaceOpWithNewOp<mlir::LLVM::CoroBeginOp>(
- op, mlir::LLVM::LLVMPointerType::get(rewriter.getContext()),
- adaptor.getId(), adaptor.getCoroframeAddr());
- return mlir::success();
-}
-
-mlir::LogicalResult CIRToLLVMCoroIdOpLowering::matchAndRewrite(
- cir::CoroIdOp op, OpAdaptor adaptor,
- mlir::ConversionPatternRewriter &rewriter) const {
- rewriter.replaceOpWithNewOp<mlir::LLVM::CoroIdOp>(
- op, mlir::TokenType::get(rewriter.getContext()), adaptor.getAlign(),
- adaptor.getPromise(), adaptor.getCoroaddr(), adaptor.getFnaddrs());
- return mlir::success();
-}
-
-mlir::LogicalResult CIRToLLVMCoroSizeOpLowering::matchAndRewrite(
- cir::CoroSizeOp op, OpAdaptor adaptor,
- mlir::ConversionPatternRewriter &rewriter) const {
- rewriter.replaceOpWithNewOp<mlir::LLVM::CoroSizeOp>(
- op, getTypeConverter()->convertType(op.getType()));
- return mlir::success();
-}
-
mlir::LogicalResult CIRToLLVMCpuIdOpLowering::matchAndRewrite(
cir::CpuIdOp op, OpAdaptor adaptor,
mlir::ConversionPatternRewriter &rewriter) const {
More information about the cfe-commits
mailing list