[flang-commits] [flang] [flang] Fix optimization of array assignments after #146408 (PR #147371)

Eugene Epshteyn via flang-commits flang-commits at lists.llvm.org
Wed Jul 9 05:10:54 PDT 2025


eugeneepshteyn wrote:

@luporl , sorry to bother you, but it seems this fix caused regression in various Fujitsu tests at `-O1` or higher. For example, compiling https://github.com/fujitsu/compiler-test-suite/blob/main/Fortran/1032/1032_0022.f90 results in the following:
```
$ flang -c 1032_0022.f90 -O1
flang: llvm/include/llvm/Support/Casting.h:566: decltype(auto) llvm::cast(const From&) [with To = fir::ReferenceType; From = mlir::Type]: Assertion `isa<To>(Val) && "cast<Ty>() argument of incompatible type!"' failed.
...
#10 0x0000000005a38f49 (anonymous namespace)::BroadcastAssignBufferization::matchAndRewrite(hlfir::AssignOp, mlir::PatternRewrite
r&) const OptimizedBufferization.cpp:0:0
#11 0x00000000059dc3f3 mlir::detail::OpOrInterfaceRewritePatternBase<hlfir::AssignOp>::matchAndRewrite(mlir::Operation*, mlir::Pa
tternRewriter&) const ConvertToFIR.cpp:0:0          
#12 0x0000000008d2629c mlir::PatternApplicator::matchAndRewrite(mlir::Operation*, mlir::PatternRewriter&, llvm::function_ref<bool
 (mlir::Pattern const&)>, llvm::function_ref<void (mlir::Pattern const&)>, llvm::function_ref<llvm::LogicalResult (mlir::Pattern 
const&)>) (/proj/nv/llvm/Linux_x86_64/llvm-5497/bin/flang+0x8d2629c)
#13 0x0000000008cf153c (anonymous namespace)::GreedyPatternRewriteDriver::processWorklist() GreedyPatternRewriteDriver.cpp:0:0
#14 0x0000000008cf445c mlir::applyPatternsGreedily(mlir::Region&, mlir::FrozenRewritePatternSet const&, mlir::GreedyRewriteConfig
, bool*) (/proj/nv/llvm/Linux_x86_64/llvm-5497/bin/flang+0x8cf445c)
#15 0x0000000005a36317 (anonymous namespace)::OptimizedBufferizationPass::runOnOperation() OptimizedBufferization.cpp:0:0
#16 0x000000000a43d431 mlir::detail::OpToOpPassAdaptor::run(mlir::Pass*, mlir::Operation*, mlir::AnalysisManager, bool, unsigned 
int) (/proj/nv/llvm/Linux_x86_64/llvm-5497/bin/flang+0xa43d431)
#17 0x000000000a43d83a mlir::detail::OpToOpPassAdaptor::runPipeline(mlir::OpPassManager&, mlir::Operation*, mlir::AnalysisManager
, bool, unsigned int, mlir::PassInstrumentor*, mlir::PassInstrumentation::PipelineParentInfo const*) (/proj/nv/llvm/Linux_x86_64/
llvm-5497/bin/flang+0xa43d83a)
#18 0x000000000a43dbbe mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::
runOnOperationAsyncImpl(bool)::OpPMInfo&)::operator()(mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&) 
const Pass.cpp:0:0
#19 0x000000000a43dd8f std::_Function_handler<void (), llvm::LogicalResult mlir::failableParallelForEach<__gnu_cxx::__normal_iter
ator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runO
nOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, 
void mlir::parallelForEach<__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*
, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAd
aptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir:
:detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo&)>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::det
ail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyn
cImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__n
ormal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAda
ptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpP
MInfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperatio
nAsyncImpl(bool)::OpPMInfo&)&&)::'lambda'(__gnu_cxx::__normal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(b
ool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detai
l::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>&&)>(mlir::MLIRContext*, __gnu_cxx::__normal_iterator<mlir::detai
l::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncI
mpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo>>>, __gnu_cxx::__nor
mal_iterator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMInfo*, std::vector<mlir::detail::OpToOpPassAdapt
or::runOnOperationAsyncImpl(bool)::OpPMInfo, std::allocator<mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::OpPMI
nfo>>>, mlir::detail::OpToOpPassAdaptor::runOnOperationAsyncImpl(bool)::'lambda'(mlir::detail::OpToOpPassAdaptor::runOnOperationA
syncImpl(bool)::OpPMInfo&)&&)::'lambda'()>::_M_invoke(std::_Any_data const&) Pass.cpp:0:0
...
```

https://github.com/llvm/llvm-project/pull/147371


More information about the flang-commits mailing list