[flang] do not merge block after lowering
authorJean Perier <jperier@nvidia.com>
Wed, 28 Jun 2023 06:27:16 +0000 (08:27 +0200)
committerJean Perier <jperier@nvidia.com>
Wed, 28 Jun 2023 06:28:07 +0000 (08:28 +0200)
commit23fbe525ce0645341610b751184882fea264c99e
treebe0ee81c8c76e033cb8c81baa33861f6aabdd7a7
parent091bfa76db64fbe96d0e53d99b2068cc05f6aa16
[flang] do not merge block after lowering

Lowering relies on dead code generation / unreachable block deletion
to delete some code that is potentially invalid.

However, calling mlir::simplifyRegion also merges block, which may
promote SSA values to block arguments. Not all FIR types are intended
to be block arguments.
The added test shows an example where block merging led to
fir.shape<> being block arguments (and a failure later in codegen).

Reviewed By: tblah, clementval, vdonaldson

Differential Revision: https://reviews.llvm.org/D153858
flang/lib/Lower/Bridge.cpp
flang/test/Lower/HLFIR/no-block-merging.f90 [new file with mode: 0644]
flang/test/Lower/block.f90
flang/test/Lower/entry-statement.f90