@@ -1613,16 +1613,7 @@ class CIRGetGlobalOpLowering
1613
1613
1614
1614
auto type = getTypeConverter ()->convertType (op.getType ());
1615
1615
auto symbol = op.getName ();
1616
- mlir::Operation *newop =
1617
- rewriter.create <mlir::LLVM::AddressOfOp>(op.getLoc (), type, symbol);
1618
-
1619
- if (op.getTls ()) {
1620
- // Handle access to TLS via intrinsic.
1621
- newop = rewriter.create <mlir::LLVM::ThreadlocalAddressOp>(
1622
- op.getLoc (), type, newop->getResult (0 ));
1623
- }
1624
-
1625
- rewriter.replaceOp (op, newop);
1616
+ rewriter.replaceOpWithNewOp <mlir::LLVM::AddressOfOp>(op, type, symbol);
1626
1617
return mlir::success ();
1627
1618
}
1628
1619
};
@@ -2287,6 +2278,36 @@ class CIRBitClrsbOpLowering
2287
2278
}
2288
2279
};
2289
2280
2281
+ class CIRObjSizeOpLowering
2282
+ : public mlir::OpConversionPattern<mlir::cir::ObjSizeOp> {
2283
+ public:
2284
+ using OpConversionPattern<mlir::cir::ObjSizeOp>::OpConversionPattern;
2285
+
2286
+ mlir::LogicalResult
2287
+ matchAndRewrite (mlir::cir::ObjSizeOp op, OpAdaptor adaptor,
2288
+ mlir::ConversionPatternRewriter &rewriter) const override {
2289
+ auto llvmResTy = getTypeConverter ()->convertType (op.getType ());
2290
+ auto loc = op->getLoc ();
2291
+
2292
+ auto llvmIntrinNameAttr =
2293
+ mlir::StringAttr::get (rewriter.getContext (), " llvm.objectsize" );
2294
+ mlir::cir::SizeInfoType kindInfo = op.getKind ();
2295
+ auto falseValue = rewriter.create <mlir::LLVM::ConstantOp>(
2296
+ loc, rewriter.getI1Type (), false );
2297
+ auto trueValue = rewriter.create <mlir::LLVM::ConstantOp>(
2298
+ loc, rewriter.getI1Type (), true );
2299
+
2300
+ rewriter.replaceOpWithNewOp <mlir::LLVM::CallIntrinsicOp>(
2301
+ op, llvmResTy, llvmIntrinNameAttr,
2302
+ mlir::ValueRange{adaptor.getPtr (),
2303
+ kindInfo == mlir::cir::SizeInfoType::max ? falseValue
2304
+ : trueValue,
2305
+ trueValue, op.getDynamic () ? trueValue : falseValue});
2306
+
2307
+ return mlir::LogicalResult::success ();
2308
+ }
2309
+ };
2310
+
2290
2311
class CIRBitClzOpLowering
2291
2312
: public mlir::OpConversionPattern<mlir::cir::BitClzOp> {
2292
2313
public:
@@ -3033,8 +3054,8 @@ void populateCIRToLLVMConversionPatterns(mlir::RewritePatternSet &patterns,
3033
3054
CIRVectorShuffleVecLowering, CIRStackSaveLowering,
3034
3055
CIRStackRestoreLowering, CIRUnreachableLowering, CIRTrapLowering,
3035
3056
CIRInlineAsmOpLowering, CIRSetBitfieldLowering, CIRGetBitfieldLowering,
3036
- CIRPrefetchLowering, CIRIsConstantOpLowering>(converter,
3037
- patterns.getContext ());
3057
+ CIRPrefetchLowering, CIRObjSizeOpLowering, CIRIsConstantOpLowering>(
3058
+ converter, patterns.getContext ());
3038
3059
}
3039
3060
3040
3061
namespace {
0 commit comments