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

--- Comment #27 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:c313924c3bcb4fa672c7c1880fe686bd5af2cc7a

commit r15-3758-gc313924c3bcb4fa672c7c1880fe686bd5af2cc7a
Author: Mikael Morin <mik...@gcc.gnu.org>
Date:   Sat Sep 21 18:32:25 2024 +0200

    fortran: Inline MINLOC/MAXLOC with no DIM and ARRAY of rank 1 [PR90608]

    Enable inline code generation for the MINLOC and MAXLOC intrinsic, if the
    DIM argument is not present and ARRAY has rank 1.  This case is similar to
    the case where the result is scalar (DIM present and rank 1 ARRAY), which
    already supports inline expansion of the intrinsic.  Both cases return
    the same value, with the difference that the result is an array of size 1
if
    DIM is absent, whereas it's a scalar if DIM  is present.  So all there is
    to do for the new case to work is hook the inline expansion with the
    scalarizer.

            PR fortran/90608

    gcc/fortran/ChangeLog:

            * trans-array.cc (gfc_conv_ss_startstride): Set the scalarization
            rank based on the MINLOC/MAXLOC rank if needed.  Call the inline
            code generation and setup the scalarizer array descriptor info
            in the MINLOC and MAXLOC cases.
            * trans-intrinsic.cc (gfc_conv_intrinsic_minmaxloc): Return the
            result array element if the scalarizer is setup and we are inside
            the loops.  Restrict library function call dispatch to the case
            where inline expansion is not supported.  Declare an array result
            if the expression isn't scalar.  Initialize the array result single
            element and return the result variable if the expression isn't
            scalar.
            (walk_inline_intrinsic_minmaxloc): New function.
            (walk_inline_intrinsic_function): Add MINLOC and MAXLOC cases,
            dispatching to walk_inline_intrinsic_minmaxloc.
            (gfc_add_intrinsic_ss_code): Add MINLOC and MAXLOC cases.
            (gfc_inline_intrinsic_function_p): Return true if ARRAY has rank 1,
            regardless of DIM.

Reply via email to