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