@@ -3560,6 +3560,25 @@ class CIRUndefOpLowering
3560
3560
}
3561
3561
};
3562
3562
3563
+ class CIREhTypeIdOpLowering
3564
+ : public mlir::OpConversionPattern<mlir::cir::EhTypeIdOp> {
3565
+ public:
3566
+ using OpConversionPattern<mlir::cir::EhTypeIdOp>::OpConversionPattern;
3567
+
3568
+ mlir::LogicalResult
3569
+ matchAndRewrite (mlir::cir::EhTypeIdOp op, OpAdaptor adaptor,
3570
+ mlir::ConversionPatternRewriter &rewriter) const override {
3571
+ mlir::Value addrOp = rewriter.create <mlir::LLVM::AddressOfOp>(
3572
+ op.getLoc (), mlir::LLVM::LLVMPointerType::get (rewriter.getContext ()),
3573
+ op.getTypeSymAttr ());
3574
+ mlir::LLVM::CallIntrinsicOp newOp = createCallLLVMIntrinsicOp (
3575
+ rewriter, op.getLoc (), " llvm.eh.typeid.for.p0" , rewriter.getI32Type (),
3576
+ mlir::ValueRange{addrOp});
3577
+ rewriter.replaceOp (op, newOp);
3578
+ return mlir::success ();
3579
+ }
3580
+ };
3581
+
3563
3582
void populateCIRToLLVMConversionPatterns (mlir::RewritePatternSet &patterns,
3564
3583
mlir::TypeConverter &converter) {
3565
3584
patterns.add <CIRReturnLowering>(patterns.getContext ());
@@ -3595,8 +3614,8 @@ void populateCIRToLLVMConversionPatterns(mlir::RewritePatternSet &patterns,
3595
3614
CIRRintOpLowering, CIRRoundOpLowering, CIRSinOpLowering,
3596
3615
CIRSqrtOpLowering, CIRTruncOpLowering, CIRCopysignOpLowering,
3597
3616
CIRFModOpLowering, CIRFMaxOpLowering, CIRFMinOpLowering, CIRPowOpLowering,
3598
- CIRClearCacheOpLowering, CIRUndefOpLowering>(converter,
3599
- patterns.getContext ());
3617
+ CIRClearCacheOpLowering, CIRUndefOpLowering, CIREhTypeIdOpLowering>(
3618
+ converter, patterns.getContext ());
3600
3619
}
3601
3620
3602
3621
namespace {
0 commit comments