https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90608

--- Comment #38 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Mikael Morin <mik...@gcc.gnu.org>:

https://gcc.gnu.org/g:237380cdec2757bd42a0ec4d426b181f77d31d18

commit r15-5502-g237380cdec2757bd42a0ec4d426b181f77d31d18
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Wed Nov 20 13:59:51 2024 +0100

    fortran: Evaluate once BACK argument of MINLOC/MAXLOC with DIM [PR90608]

    Evaluate the BACK argument of MINLOC/MAXLOC once before the
    scalarization loops in the case where the DIM argument is present.

    This is a follow-up to r15-1994-ga55d24b3cf7f4d07492bb8e6fcee557175b47ea3
    which added knowledge of BACK to the scalarizer, to
    r15-2701-ga10436a8404ad2f0cc5aa4d6a0cc850abe5ef49e which removed it to
    handle it out of scalarization instead, and to more immediate previous
    patches that added inlining support for MINLOC/MAXLOC with DIM.  The
    inlining support for MINLOC/MAXLOC with DIM introduced nested loops, which
    made the evaluation of BACK (removed from the scalarizer knowledge by the
    forementionned commit) wrapped in a loop, so possibly executed more than
    once.  This change adds BACK to the scalarization chain if MINLOC/MAXLOC
    will use nested loops, so that it is evaluated by the scalarizer only once
    before the outermost loop in that case.

            PR fortran/90608

    gcc/fortran/ChangeLog:

            * trans-intrinsic.cc
            (walk_inline_intrinsic_minmaxloc): Add a scalar element for BACK as
            first item of the chain if BACK is present and there will be nested
            loops.
            (gfc_conv_intrinsic_minmaxloc): Evaluate BACK using an inherited
            scalarization chain if there is a nested loop.

    gcc/testsuite/ChangeLog:

            * gfortran.dg/maxloc_8.f90: New test.
            * gfortran.dg/minloc_9.f90: New test.

Reply via email to