@@ -1837,7 +1837,8 @@ void ConvertCIRToLLVMPass::runOnOperation() {
18371837 CIRToLLVMVecShuffleDynamicOpLowering,
18381838 CIRToLLVMVecTernaryOpLowering,
18391839 CIRToLLVMComplexCreateOpLowering,
1840- CIRToLLVMComplexRealPtrOpLowering
1840+ CIRToLLVMComplexRealPtrOpLowering,
1841+ CIRToLLVMComplexImagPtrOpLowering
18411842 // clang-format on
18421843 >(converter, patterns.getContext ());
18431844
@@ -2158,6 +2159,23 @@ mlir::LogicalResult CIRToLLVMComplexRealPtrOpLowering::matchAndRewrite(
21582159 return mlir::success ();
21592160}
21602161
2162+ mlir::LogicalResult CIRToLLVMComplexImagPtrOpLowering::matchAndRewrite (
2163+ cir::ComplexImagPtrOp op, OpAdaptor adaptor,
2164+ mlir::ConversionPatternRewriter &rewriter) const {
2165+ cir::PointerType operandTy = op.getOperand ().getType ();
2166+ mlir::Type resultLLVMTy = getTypeConverter ()->convertType (op.getType ());
2167+ mlir::Type elementLLVMTy =
2168+ getTypeConverter ()->convertType (operandTy.getPointee ());
2169+
2170+ mlir::LLVM::GEPArg gepIndices[2 ] = {{0 }, {1 }};
2171+ mlir::LLVM::GEPNoWrapFlags inboundsNuw =
2172+ mlir::LLVM::GEPNoWrapFlags::inbounds | mlir::LLVM::GEPNoWrapFlags::nuw;
2173+ rewriter.replaceOpWithNewOp <mlir::LLVM::GEPOp>(
2174+ op, resultLLVMTy, elementLLVMTy, adaptor.getOperand (), gepIndices,
2175+ inboundsNuw);
2176+ return mlir::success ();
2177+ }
2178+
21612179std::unique_ptr<mlir::Pass> createConvertCIRToLLVMPass () {
21622180 return std::make_unique<ConvertCIRToLLVMPass>();
21632181}
0 commit comments