Skip to content
Snippets Groups Projects
  • Thomas Schwinge's avatar
    bac2d8a2
    nvptx: Build libgfortran with '-mfake-ptx-alloca' [PR107635] · bac2d8a2
    Thomas Schwinge authored
    As of recent commit 8bf0ee8d
    "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.
    bac2d8a2
    History
    nvptx: Build libgfortran with '-mfake-ptx-alloca' [PR107635]
    Thomas Schwinge authored
    As of recent commit 8bf0ee8d
    "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.