[flang-commits] [flang] [flang][FIRToMemRef] lower `fir.coordinate_of` on static-extent arrays to indexed memref (PR #195404)
via flang-commits
flang-commits at lists.llvm.org
Wed May 6 01:31:26 PDT 2026
================
@@ -937,6 +1018,31 @@ MemRefInfo FIRToMemRef::getMemRefInfo(Value firMemref,
}
if (auto coordinateOp = dyn_cast<fir::CoordinateOp>(memrefOp)) {
+ // Fast path: coordinate_of used as a plain array indexer on a static-extent
+ // scalar array (e.g. a struct component `A%v(i)`).
+ if (isArrayIndexingCoordinateOp(coordinateOp, typeConverter)) {
+ MemRefInfo memrefInfo = convertCoordinateArrayOp(memOp, coordinateOp,
+ rewriter, typeConverter);
+ if (succeeded(memrefInfo)) {
+ LLVM_DEBUG(llvm::dbgs()
+ << "FIRToMemRef: converted coordinate_of array indexer\n");
+ for (auto user : memrefOp->getUsers()) {
+ if (!isa<fir::LoadOp, fir::StoreOp>(user)) {
+ LLVM_DEBUG(
+ llvm::dbgs()
+ << "FIRToMemRef: coordinate_of used by non-load/store, "
+ "skipping erase\n";
+ firMemref.dump(); user->dump());
+ return memrefInfo;
+ }
+ }
+ eraseOps.insert(memrefOp);
+ return memrefInfo;
+ }
+ }
+
+ // Fallback: struct field access or dynamic array — produce a rank-0 scalar
+ // memref from the leaf reference (existing behaviour).
----------------
jeanPerier wrote:
nit: "existing behaviour" inside code comments gets outdated quickly.
https://github.com/llvm/llvm-project/pull/195404
More information about the flang-commits
mailing list