1616#include " mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h"
1717#include " mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h"
1818#include " mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h"
19- #include " mlir/Conversion/LLVMCommon/ConversionTarget.h"
20- #include " mlir/Conversion/LLVMCommon/TypeConverter.h"
2119#include " mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h"
2220#include " mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h"
2321#include " mlir/Dialect/Affine/IR/AffineOps.h"
2826#include " mlir/Dialect/Math/IR/Math.h"
2927#include " mlir/Dialect/MemRef/IR/MemRef.h"
3028#include " mlir/Dialect/SCF/IR/SCF.h"
31- #include " mlir/Dialect/SCF/Transforms/Passes.h"
3229#include " mlir/Dialect/Vector/IR/VectorOps.h"
3330#include " mlir/IR/BuiltinDialect.h"
3431#include " mlir/IR/BuiltinTypes.h"
5249#include " clang/CIR/LoweringHelpers.h"
5350#include " clang/CIR/Passes.h"
5451#include " llvm/ADT/STLExtras.h"
55- #include " llvm/ADT/Sequence.h"
5652#include " llvm/ADT/SmallVector.h"
5753#include " llvm/ADT/TypeSwitch.h"
5854#include " llvm/Support/TimeProfiler.h"
@@ -83,7 +79,7 @@ struct ConvertCIRToMLIRPass
8379 mlir::affine::AffineDialect, mlir::memref::MemRefDialect,
8480 mlir::arith::ArithDialect, mlir::cf::ControlFlowDialect,
8581 mlir::scf::SCFDialect, mlir::math::MathDialect,
86- mlir::vector::VectorDialect>();
82+ mlir::vector::VectorDialect, mlir::LLVM::LLVMDialect >();
8783 }
8884 void runOnOperation () final ;
8985
@@ -1388,6 +1384,20 @@ class CIRPtrStrideOpLowering
13881384 }
13891385};
13901386
1387+ class CIRUnreachableOpLowering
1388+ : public mlir::OpConversionPattern<cir::UnreachableOp> {
1389+ public:
1390+ using OpConversionPattern<cir::UnreachableOp>::OpConversionPattern;
1391+
1392+ mlir::LogicalResult
1393+ matchAndRewrite (cir::UnreachableOp op, OpAdaptor adaptor,
1394+ mlir::ConversionPatternRewriter &rewriter) const override {
1395+ // match and rewrite.
1396+ rewriter.replaceOpWithNewOp <mlir::LLVM::UnreachableOp>(op);
1397+ return mlir::success ();
1398+ }
1399+ };
1400+
13911401void populateCIRToMLIRConversionPatterns (mlir::RewritePatternSet &patterns,
13921402 mlir::TypeConverter &converter) {
13931403 patterns.add <CIRReturnLowering, CIRBrOpLowering>(patterns.getContext ());
@@ -1408,7 +1418,8 @@ void populateCIRToMLIRConversionPatterns(mlir::RewritePatternSet &patterns,
14081418 CIRBitClrsbOpLowering, CIRBitFfsOpLowering, CIRBitParityOpLowering,
14091419 CIRIfOpLowering, CIRVectorCreateLowering, CIRVectorInsertLowering,
14101420 CIRVectorExtractLowering, CIRVectorCmpOpLowering, CIRACosOpLowering,
1411- CIRASinOpLowering>(converter, patterns.getContext ());
1421+ CIRASinOpLowering, CIRUnreachableOpLowering>(converter,
1422+ patterns.getContext ());
14121423}
14131424
14141425static mlir::TypeConverter prepareTypeConverter () {
@@ -1490,11 +1501,11 @@ void ConvertCIRToMLIRPass::runOnOperation() {
14901501
14911502 mlir::ConversionTarget target (getContext ());
14921503 target.addLegalOp <mlir::ModuleOp>();
1493- target
1494- . addLegalDialect < mlir::affine::AffineDialect , mlir::arith::ArithDialect ,
1495- mlir::memref::MemRefDialect , mlir::func::FuncDialect ,
1496- mlir::scf::SCFDialect , mlir::cf::ControlFlowDialect ,
1497- mlir::math::MathDialect, mlir::vector::VectorDialect >();
1504+ target. addLegalDialect <mlir::affine::AffineDialect, mlir::arith::ArithDialect,
1505+ mlir::memref::MemRefDialect , mlir::func::FuncDialect ,
1506+ mlir::scf::SCFDialect , mlir::cf::ControlFlowDialect ,
1507+ mlir::math::MathDialect , mlir::vector::VectorDialect ,
1508+ mlir::LLVM::LLVMDialect >();
14981509 target.addIllegalDialect <cir::CIRDialect>();
14991510
15001511 if (failed (applyPartialConversion (module , target, std::move (patterns))))
0 commit comments