================
@@ -5417,43 +5417,61 @@ mlir::LogicalResult
CIRToLLVMIndirectBrOpLowering::matchAndRewrite(
mlir::LogicalResult CIRToLLVMTokenNoneOpLowering::matchAndRewrite(
cir::TokenNoneOp op, OpAdaptor adaptor,
mlir::ConversionPatternRewriter &rewriter) const {
- return mlir::failure();
+ rewriter.replaceOpWithNewOp<mlir::LLVM::NoneTokenOp>(
+ op, mlir::TokenType::get(rewriter.getContext()));
+ return mlir::success();
}
mlir::LogicalResult CIRToLLVMCoroFreeOpLowering::matchAndRewrite(
cir::CoroFreeOp op, OpAdaptor adaptor,
mlir::ConversionPatternRewriter &rewriter) const {
- return mlir::failure();
+ 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 {
- return mlir::failure();
+ 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 {
- return mlir::failure();
+ 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 {
- return mlir::failure();
+ 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 {
- return mlir::failure();
+ 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 {
- return mlir::failure();
+ rewriter.replaceOpWithNewOp<mlir::LLVM::CoroSizeOp>(op,
----------------
bcardosolopes wrote:
i64 matches the op as declared, so nothing is wrong here, but it's now the
second place the width is pinned and the TODO a few lines above the size check
in the test is the first. `getTypeConverter()->convertType(op.getType())` would
keep it to one spot when someone gets to it.
The gap is live, OG takes the width from `getSizeType()` (CGCoroutine.cpp:1138):
```
$ clang -cc1 -triple i386-unknown-linux-gnu -fcoroutines -fclangir -emit-llvm
-disable-llvm-passes coro.cpp -o - | grep coro.size
%6 = call i64 @llvm.coro.size.i64()
$ clang -cc1 -triple i386-unknown-linux-gnu -fcoroutines -emit-llvm
-disable-llvm-passes coro.cpp -o - | grep coro.size
%2 = call i32 @llvm.coro.size.i32()
```
https://github.com/llvm/llvm-project/pull/215709
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits