16
16
#include " mlir/Conversion/ControlFlowToLLVM/ControlFlowToLLVM.h"
17
17
#include " mlir/Conversion/FuncToLLVM/ConvertFuncToLLVM.h"
18
18
#include " mlir/Conversion/FuncToLLVM/ConvertFuncToLLVMPass.h"
19
- #include " mlir/Conversion/LLVMCommon/ConversionTarget.h"
20
- #include " mlir/Conversion/LLVMCommon/TypeConverter.h"
21
19
#include " mlir/Conversion/MemRefToLLVM/MemRefToLLVM.h"
22
20
#include " mlir/Conversion/SCFToControlFlow/SCFToControlFlow.h"
23
21
#include " mlir/Dialect/Affine/IR/AffineOps.h"
28
26
#include " mlir/Dialect/Math/IR/Math.h"
29
27
#include " mlir/Dialect/MemRef/IR/MemRef.h"
30
28
#include " mlir/Dialect/SCF/IR/SCF.h"
31
- #include " mlir/Dialect/SCF/Transforms/Passes.h"
32
29
#include " mlir/Dialect/Vector/IR/VectorOps.h"
33
30
#include " mlir/IR/BuiltinDialect.h"
34
31
#include " mlir/IR/BuiltinTypes.h"
52
49
#include " clang/CIR/LoweringHelpers.h"
53
50
#include " clang/CIR/Passes.h"
54
51
#include " llvm/ADT/STLExtras.h"
55
- #include " llvm/ADT/Sequence.h"
56
52
#include " llvm/ADT/SmallVector.h"
57
53
#include " llvm/ADT/TypeSwitch.h"
58
54
#include " llvm/Support/TimeProfiler.h"
@@ -83,7 +79,7 @@ struct ConvertCIRToMLIRPass
83
79
mlir::affine::AffineDialect, mlir::memref::MemRefDialect,
84
80
mlir::arith::ArithDialect, mlir::cf::ControlFlowDialect,
85
81
mlir::scf::SCFDialect, mlir::math::MathDialect,
86
- mlir::vector::VectorDialect>();
82
+ mlir::vector::VectorDialect, mlir::LLVM::LLVMDialect >();
87
83
}
88
84
void runOnOperation () final ;
89
85
@@ -1388,6 +1384,20 @@ class CIRPtrStrideOpLowering
1388
1384
}
1389
1385
};
1390
1386
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
+
1391
1401
void populateCIRToMLIRConversionPatterns (mlir::RewritePatternSet &patterns,
1392
1402
mlir::TypeConverter &converter) {
1393
1403
patterns.add <CIRReturnLowering, CIRBrOpLowering>(patterns.getContext ());
@@ -1408,7 +1418,8 @@ void populateCIRToMLIRConversionPatterns(mlir::RewritePatternSet &patterns,
1408
1418
CIRBitClrsbOpLowering, CIRBitFfsOpLowering, CIRBitParityOpLowering,
1409
1419
CIRIfOpLowering, CIRVectorCreateLowering, CIRVectorInsertLowering,
1410
1420
CIRVectorExtractLowering, CIRVectorCmpOpLowering, CIRACosOpLowering,
1411
- CIRASinOpLowering>(converter, patterns.getContext ());
1421
+ CIRASinOpLowering, CIRUnreachableOpLowering>(converter,
1422
+ patterns.getContext ());
1412
1423
}
1413
1424
1414
1425
static mlir::TypeConverter prepareTypeConverter () {
@@ -1490,11 +1501,11 @@ void ConvertCIRToMLIRPass::runOnOperation() {
1490
1501
1491
1502
mlir::ConversionTarget target (getContext ());
1492
1503
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 >();
1498
1509
target.addIllegalDialect <cir::CIRDialect>();
1499
1510
1500
1511
if (failed (applyPartialConversion (module, target, std::move (patterns))))
0 commit comments