[flang-commits] [flang] [flang][fir] add codegen for fir.load of assumed-rank fir.box (PR #93569)
via flang-commits
flang-commits at lists.llvm.org
Wed May 29 01:47:55 PDT 2024
================
@@ -240,6 +240,32 @@ mlir::Value ConvertFIRToLLVMPattern::genBoxAttributeCheck(
maskRes, c0);
}
+mlir::Value ConvertFIRToLLVMPattern::computeBoxSize(
+ mlir::Location loc, TypePair boxTy, mlir::Value box,
+ mlir::ConversionPatternRewriter &rewriter) const {
+ auto firBoxType = mlir::dyn_cast<fir::BaseBoxType>(boxTy.fir);
+ assert(firBoxType && "must be a BaseBoxType");
+ const mlir::DataLayout &dl = lowerTy().getDataLayout();
+ if (!firBoxType.isAssumedRank())
+ return genConstantOffset(loc, rewriter, dl.getTypeSize(boxTy.llvm));
+ fir::BaseBoxType firScalarBoxType = firBoxType.getBoxTypeWithNewShape(0);
+ mlir::Type llvmScalarBoxType =
+ lowerTy().convertBoxTypeAsStruct(firScalarBoxType);
+ mlir::Value scalarBoxSize =
+ genConstantOffset(loc, rewriter, dl.getTypeSize(llvmScalarBoxType));
+ mlir::Value rawRank = getRankFromBox(loc, boxTy, box, rewriter);
+ mlir::Value rank =
+ integerCast(loc, rewriter, scalarBoxSize.getType(), rawRank);
+ mlir::Type llvmDimsType = getBoxEleTy(boxTy.llvm, {kDimsPosInBox, 1});
+ mlir::Value sizePerDim =
+ genConstantOffset(loc, rewriter, dl.getTypeSize(llvmDimsType));
+ mlir::Value dimsSize = rewriter.create<mlir::LLVM::MulOp>(
+ loc, sizePerDim.getType(), sizePerDim, rank);
+ mlir::Value size = rewriter.create<mlir::LLVM::AddOp>(
----------------
jeanPerier wrote:
Seems a reasonable check to me, I added an assert, thanks for the suggestion.
https://github.com/llvm/llvm-project/pull/93569
More information about the flang-commits
mailing list