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