[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