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

--- Comment #16 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The trunk branch has been updated by Thomas Schwinge <tschwi...@gcc.gnu.org>:

https://gcc.gnu.org/g:bac2d8a246892334e24dfa7d62be0cd0648c5606

commit r15-7736-gbac2d8a246892334e24dfa7d62be0cd0648c5606
Author: Thomas Schwinge <tschwi...@baylibre.com>
Date:   Tue Feb 25 22:31:25 2025 +0100

    nvptx: Build libgfortran with '-mfake-ptx-alloca' [PR107635]

    As of recent commit 8bf0ee8d62b8a08e808344d31354ab713157e15d
    "Fortran: Add transfer_between_remotes [PR107635]", we've got 'alloca'
usage
    in 'libgfortran/caf/single.c:_gfortran_caf_transfer_between_remotes', and
    the libgfortran target library fails to build for legacy configurations
where
    PTX 'alloca' is not available:

        ../../../../source-gcc/libgfortran/caf/single.c: In function
â_gfortran_caf_transfer_between_remotesâ:
        ../../../../source-gcc/libgfortran/caf/single.c:675:23: sorry,
unimplemented: dynamic stack allocation not supported
          675 |       transfer_desc = __builtin_alloca (desc_size);
              |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
        ../../../../source-gcc/libgfortran/caf/single.c:680:20: sorry,
unimplemented: dynamic stack allocation not supported
          680 |     transfer_ptr = __builtin_alloca (*opt_dst_charlen *
src_size);
              |                   
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        make[6]: *** [Makefile:4675: caf/single.lo] Error 1

    With '-mfake-ptx-alloca', libgfortran again succeeds to build, and compared
    to before, we've got only a small number of regressions due to nvptx 'ld'
    complaining about 'unresolved symbol
__GCC_nvptx__PTX_alloca_not_supported':

        [-PASS:-]{+FAIL:+} gfortran.dg/coarray/codimension_2.f90 -fcoarray=lib 
-O2  -lcaf_single (test for excess errors)

        [-PASS:-]{+FAIL:+} gfortran.dg/coarray/event_4.f08 -fcoarray=lib  -O2 
-lcaf_single (test for excess errors)
        [-PASS:-]{+UNRESOLVED:+} gfortran.dg/coarray/event_4.f08 -fcoarray=lib 
-O2  -lcaf_single [-execution test-]{+compilation failed to produce
executable+}

        [-PASS:-]{+FAIL:+} gfortran.dg/coarray/fail_image_2.f08 -fcoarray=lib 
-O2  -lcaf_single (test for excess errors)
        [-PASS:-]{+UNRESOLVED:+} gfortran.dg/coarray/fail_image_2.f08
-fcoarray=lib  -O2  -lcaf_single [-execution test-]{+compilation failed to
produce executable+}

        [-PASS:-]{+FAIL:+} gfortran.dg/coarray/proc_pointer_assign_1.f90
-fcoarray=lib  -O2  -lcaf_single (test for excess errors)
        [-PASS:-]{+UNRESOLVED:+} gfortran.dg/coarray/proc_pointer_assign_1.f90
-fcoarray=lib  -O2  -lcaf_single [-execution test-]{+compilation failed to
produce executable+}

        [-PASS:-]{+FAIL:+} gfortran.dg/coarray_43.f90   -O  (test for excess
errors)

    That's acceptable for such legacy PTX configurations.

            PR target/107635
            libgfortran/
            * config/t-nvptx: New.
            * configure.host [nvptx] (tmake_file): Add it.

Reply via email to