[flang-commits] [flang] [flang] add an optimization to remove fir.convert usage in FIRToMemRef (PR #187721)
Susan Tan ス-ザン タン via flang-commits
flang-commits at lists.llvm.org
Fri Mar 20 09:36:51 PDT 2026
================
@@ -1010,6 +1010,21 @@ void FIRToMemRef::rewriteStoreOp(fir::StoreOp store, PatternRewriter &rewriter,
Value value = store.getValue();
rewriter.setInsertionPointAfter(store);
+ // Small local optimization that avoids the round-trip:
+ // %25 = memref.load ... : memref<i32>
+ // %26 = fir.convert %25 : (i32) -> !fir.logical<4> // from load rewrite
+ // %27 = fir.convert %26 : (!fir.logical<4>) -> i32 // from store rewrite
+ // memref.store %27, ... : memref<i32>
+ // which would normalize the loaded value to 1 and break TRANSFER-like flows,
+ // e.g. transfer(transfer(i, .true.), 0).
+ if (auto to = value.getDefiningOp<fir::ConvertOp>()) {
+ Value raw = to.getValue();
+ if (auto memrefTy = dyn_cast<MemRefType>(converted.getType()))
----------------
SusanTan wrote:
Yes, @jeanPerier also raised the same point that it's wrong to generate it in the first case. Currently FIRToMemRef really adds a fir.convert to corresponding memref/standard type before the store/load and a fir.convert from corresponding memref/standard type after the store/load. We used to optimize the convert by aggressively optimizing all the redundant converts out, but that caused problem because of some issues supporting ACC regions. I'd be happy to explore some other alternatives.
https://github.com/llvm/llvm-project/pull/187721
More information about the flang-commits
mailing list