[flang-commits] [flang] [flang][FIRToMemRef] lower `fir.coordinate_of` on static-extent arrays to indexed memref (PR #195404)
Scott Manley via flang-commits
flang-commits at lists.llvm.org
Tue May 5 07:56:40 PDT 2026
================
@@ -867,6 +879,75 @@ Value FIRToMemRef::canonicalizeIndex(Value index,
return index;
}
+bool FIRToMemRef::isArrayIndexingCoordinateOp(
+ fir::CoordinateOp coordinateOp,
+ FIRToMemRefTypeConverter &typeConverter) const {
+ // The base must be a reference/pointer/heap to a sequence/array type.
+ Type baseType = coordinateOp.getRef().getType();
+ Type unwrapped = fir::dyn_cast_ptrEleTy(baseType);
+ if (!unwrapped)
+ return false;
+
+ auto seqTy = dyn_cast<fir::SequenceType>(unwrapped);
+ if (!seqTy)
+ return false;
+
+ // Restrict to fully static extents — dynamic arrays would need a shape
+ // operand (which coordinate_of lacks) to build a valid memref descriptor.
+ if (fir::hasDynamicSize(seqTy))
+ return false;
+
+ // The element type must be a convertible scalar — no derived types.
+ if (!typeConverter.convertibleMemrefType(baseType))
+ return false;
+
+ return true;
+}
+
+MemRefInfo FIRToMemRef::convertCoordinateArrayOp(
+ Operation *memOp, fir::CoordinateOp coordinateOp, PatternRewriter &rewriter,
+ FIRToMemRefTypeConverter &typeConverter) {
+ Value firBase = coordinateOp.getRef();
+ Location loc = coordinateOp->getLoc();
+ IndexType indexTy = rewriter.getIndexType();
+
+ if (typeConverter.isEmptyArray(firBase.getType()))
+ return failure();
+
+ // Convert the base ref/heap/ptr to a memref. convertMemrefType reverses the
+ // FIR column-major shape to row-major, keeping it in sync with index reversal
+ // below.
+ rewriter.setInsertionPoint(coordinateOp);
+ FailureOr<Value> converted;
+ if (isa<BlockArgument>(firBase)) {
+ Type memrefTy = typeConverter.convertMemrefType(firBase.getType());
+ converted =
+ fir::ConvertOp::create(rewriter, loc, memrefTy, firBase).getResult();
----------------
rscottmanley wrote:
do we need to check for failure here or?
https://github.com/llvm/llvm-project/pull/195404
More information about the flang-commits
mailing list