[clang] [CIR] [Upstream local initialization for ArrayType (PR #132974)
Andy Kaylor via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 25 17:59:12 PDT 2025
================
@@ -540,6 +542,68 @@ mlir::LogicalResult CIRToLLVMCastOpLowering::matchAndRewrite(
return mlir::success();
}
+mlir::LogicalResult CIRToLLVMPtrStrideOpLowering::matchAndRewrite(
+ cir::PtrStrideOp ptrStrideOp, OpAdaptor adaptor,
+ mlir::ConversionPatternRewriter &rewriter) const {
+
+ const mlir::DataLayout llvmLayout(
+ ptrStrideOp->getParentOfType<mlir::ModuleOp>());
+ const mlir::TypeConverter *tc = getTypeConverter();
+ const mlir::Type resultTy = tc->convertType(ptrStrideOp.getType());
+
+ mlir::Type elementTy =
+ convertTypeForMemory(*tc, dataLayout, ptrStrideOp.getElementTy());
+ mlir::MLIRContext *ctx = elementTy.getContext();
+
+ // void and function types doesn't really have a layout to use in GEPs,
+ // make it i8 instead.
+ if (mlir::isa<mlir::LLVM::LLVMVoidType>(elementTy) ||
+ mlir::isa<mlir::LLVM::LLVMFunctionType>(elementTy))
+ elementTy = mlir::IntegerType::get(elementTy.getContext(), 8,
+ mlir::IntegerType::Signless);
+ // Zero-extend, sign-extend or trunc the pointer value.
+ mlir::Value index = adaptor.getStride();
+ const unsigned width =
+ mlir::cast<mlir::IntegerType>(index.getType()).getWidth();
+ const std::optional<std::uint64_t> layoutWidth =
+ llvmLayout.getTypeIndexBitwidth(adaptor.getBase().getType());
+
+ const auto indexOp = index.getDefiningOp();
----------------
andykaylor wrote:
No auto here
https://github.com/llvm/llvm-project/pull/132974
More information about the cfe-commits
mailing list