Hi Mikael, thanks for this impressive series of patches.
Am 18.09.22 um 22:15 schrieb Mikael Morin via Fortran:
Changes from v1: - patch 9/10 (clobber subreferences) has been dropped. - patch 10/10 (now 9/9): The test has been adjusted because some checks were failing without the dropped patch. Basically there are less clobbers generated. - patch 5: In the test, an explicit kind has been added to integers, so that the dump match is not dependent on the -fdefault-integer-8 option. - patches 3, 4, 5, 8, and 10/10 (now 9/9): The tests have been renamed so that they are numbered in increasing order. The first patch is a refactoring moving the clobber generation in gfc_conv_procedure_call where it feels more appropriate. The second patch is a fix for the ICE originally motivating my work on this topic. The third patch is a fix for some wrong code issue discovered with an earlier version of this series.
This LGTM. It also fixes a regression introduced with r9-3030 :-) If you think that this set (1-3) is backportable, feel free to do so.
The following patches are gradual condition loosenings to enable clobber generation in more and more cases.
Patches 4-8 all look fine. Since they address missed optimizations, they are probably something for mainline. I was wondering if you could add a test for the change in patch 7 addressing the clobber generation for an associate-name, e.g. by adding to testcase intent_optimize_7.f90 near the end: associate (av => ct) av = 111222333 call foo(av) end associate if (ct /= 42) stop 3 plus the adjustments in the patterns. Regarding patch 9, I do not see anything wrong with it, but then independent eyes might see more. I think it is ok for mainline as is.
Each patch has been tested through an incremental bootstrap and a partial testsuite run on fortran *intent* tests, and the whole lot has been run through the full fortran regression testsuite. OK for master?
Yes. Thanks, Harald
Harald Anlauf (1): fortran: Support clobbering with implicit interfaces [PR105012] Mikael Morin (8): fortran: Move the clobber generation code fortran: Fix invalid function decl clobber ICE [PR105012] fortran: Move clobbers after evaluation of all arguments [PR106817] fortran: Support clobbering of reference variables [PR41453] fortran: Support clobbering of SAVE variables [PR87395] fortran: Support clobbering of ASSOCIATE variables [PR87397] fortran: Support clobbering of allocatables and pointers [PR41453] fortran: Support clobbering of derived types [PR41453] gcc/fortran/trans-expr.cc | 81 ++++++++++++------- gcc/fortran/trans.h | 3 +- .../gfortran.dg/intent_optimize_4.f90 | 43 ++++++++++ .../gfortran.dg/intent_optimize_5.f90 | 24 ++++++ .../gfortran.dg/intent_optimize_6.f90 | 34 ++++++++ .../gfortran.dg/intent_optimize_7.f90 | 42 ++++++++++ .../gfortran.dg/intent_optimize_8.f90 | 66 +++++++++++++++ gcc/testsuite/gfortran.dg/intent_out_15.f90 | 27 +++++++ 8 files changed, 290 insertions(+), 30 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_4.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_5.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_6.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_7.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_optimize_8.f90 create mode 100644 gcc/testsuite/gfortran.dg/intent_out_15.f90