@@ -1299,8 +1299,18 @@ mlir::LogicalResult CIRToLLVMCastOpLowering::matchAndRewrite(
1299
1299
}
1300
1300
case cir::CastKind::bitcast: {
1301
1301
auto dstTy = castOp.getType ();
1302
- auto llvmSrcVal = adaptor.getOperands ().front ();
1303
1302
auto llvmDstTy = getTypeConverter ()->convertType (dstTy);
1303
+
1304
+ if (mlir::isa<cir::DataMemberType>(castOp.getSrc ().getType ())) {
1305
+ mlir::Value loweredResult = lowerMod->getCXXABI ().lowerDataMemberBitcast (
1306
+ castOp, llvmDstTy, src, rewriter);
1307
+ rewriter.replaceOp (castOp, loweredResult);
1308
+ return mlir::success ();
1309
+ }
1310
+ if (mlir::isa<cir::MethodType>(castOp.getSrc ().getType ()))
1311
+ llvm_unreachable (" NYI" );
1312
+
1313
+ auto llvmSrcVal = adaptor.getOperands ().front ();
1304
1314
rewriter.replaceOpWithNewOp <mlir::LLVM::BitcastOp>(castOp, llvmDstTy,
1305
1315
llvmSrcVal);
1306
1316
return mlir::success ();
@@ -1324,6 +1334,16 @@ mlir::LogicalResult CIRToLLVMCastOpLowering::matchAndRewrite(
1324
1334
llvmSrcVal);
1325
1335
break ;
1326
1336
}
1337
+ case cir::CastKind::member_ptr_to_bool: {
1338
+ mlir::Value loweredResult;
1339
+ if (mlir::isa<cir::MethodType>(castOp.getSrc ().getType ()))
1340
+ llvm_unreachable (" NYI" );
1341
+ else
1342
+ loweredResult = lowerMod->getCXXABI ().lowerDataMemberToBoolCast (
1343
+ castOp, src, rewriter);
1344
+ rewriter.replaceOp (castOp, loweredResult);
1345
+ break ;
1346
+ }
1327
1347
default : {
1328
1348
return castOp.emitError (" Unhandled cast kind: " )
1329
1349
<< castOp.getKindAttrName ();
@@ -2902,6 +2922,14 @@ mlir::LogicalResult CIRToLLVMCmpOpLowering::matchAndRewrite(
2902
2922
mlir::ConversionPatternRewriter &rewriter) const {
2903
2923
auto type = cmpOp.getLhs ().getType ();
2904
2924
2925
+ if (mlir::isa<cir::DataMemberType>(type)) {
2926
+ assert (lowerMod && " lowering module is not available" );
2927
+ mlir::Value loweredResult = lowerMod->getCXXABI ().lowerDataMemberCmp (
2928
+ cmpOp, adaptor.getLhs (), adaptor.getRhs (), rewriter);
2929
+ rewriter.replaceOp (cmpOp, loweredResult);
2930
+ return mlir::success ();
2931
+ }
2932
+
2905
2933
// Lower to LLVM comparison op.
2906
2934
// if (auto intTy = mlir::dyn_cast<cir::IntType>(type)) {
2907
2935
if (mlir::isa<cir::IntType, mlir::IntegerType>(type)) {
@@ -4087,6 +4115,7 @@ void populateCIRToLLVMConversionPatterns(
4087
4115
argsVarMap, patterns.getContext ());
4088
4116
patterns.add <
4089
4117
// clang-format off
4118
+ CIRToLLVMCastOpLowering,
4090
4119
CIRToLLVMLoadOpLowering,
4091
4120
CIRToLLVMStoreOpLowering,
4092
4121
CIRToLLVMGlobalOpLowering,
@@ -4096,14 +4125,14 @@ void populateCIRToLLVMConversionPatterns(
4096
4125
patterns.add <
4097
4126
// clang-format off
4098
4127
CIRToLLVMBaseDataMemberOpLowering,
4128
+ CIRToLLVMCmpOpLowering,
4099
4129
CIRToLLVMDerivedDataMemberOpLowering,
4100
4130
CIRToLLVMGetRuntimeMemberOpLowering
4101
4131
// clang-format on
4102
4132
>(converter, patterns.getContext (), lowerModule);
4103
4133
patterns.add <
4104
4134
// clang-format off
4105
4135
CIRToLLVMPtrStrideOpLowering,
4106
- CIRToLLVMCastOpLowering,
4107
4136
CIRToLLVMInlineAsmOpLowering
4108
4137
// clang-format on
4109
4138
>(converter, patterns.getContext (), dataLayout);
@@ -4132,7 +4161,6 @@ void populateCIRToLLVMConversionPatterns(
4132
4161
CIRToLLVMCallOpLowering,
4133
4162
CIRToLLVMCatchParamOpLowering,
4134
4163
CIRToLLVMClearCacheOpLowering,
4135
- CIRToLLVMCmpOpLowering,
4136
4164
CIRToLLVMCmpThreeWayOpLowering,
4137
4165
CIRToLLVMComplexCreateOpLowering,
4138
4166
CIRToLLVMComplexImagOpLowering,
0 commit comments