libgfortran: Skip integer-kind=16 check for amdgcn
authorTobias Burnus <tobias@codesourcery.com>
Sun, 26 Jul 2020 05:20:24 +0000 (07:20 +0200)
committerTobias Burnus <tobias@codesourcery.com>
Sun, 26 Jul 2020 05:20:24 +0000 (07:20 +0200)
libgfortran/ChangeLog:

PR target/96306
* configure.ac: Add LIBGOMP_CHECKED_INT_KINDS and
LIBGOMP_CHECKED_REAL_KINDS and use it for to skip
integer kind=16 checks for amdgcn.
* Makefile.am (kinds.h, selected_int_kind.inc,
selected_real_kind.inc): Pass them on.
* mk-kinds-h.sh: Takes to-be-check kinds as argument.
* mk-sik-inc.sh: Likewise.
* mk-srk-inc.sh: Likewise.
* Makefile.in: Regenerate.
* configure: Regenerate.

libgfortran/Makefile.am
libgfortran/Makefile.in
libgfortran/configure
libgfortran/configure.ac
libgfortran/mk-kinds-h.sh
libgfortran/mk-sik-inc.sh
libgfortran/mk-srk-inc.sh

index 36b204e1aa31dcd8a47cb3a4b61f4ec48ce13d9f..61bf05dd40d2266483a06df761c63bdba829b3b8 100644 (file)
@@ -1054,7 +1054,7 @@ I_M4_DEPS8=$(I_M4_DEPS) m4/ifindloc1.m4
 I_M4_DEPS9=$(I_M4_DEPS) m4/ifindloc2.m4
 
 kinds.h: $(srcdir)/mk-kinds-h.sh
-       $(SHELL) $(srcdir)/mk-kinds-h.sh '$(FCCOMPILE)' > $@ || rm $@
+       $(SHELL) $(srcdir)/mk-kinds-h.sh '@LIBGOMP_CHECKED_INT_KINDS@' '@LIBGOMP_CHECKED_REAL_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
 
 kinds.inc: kinds.h
        grep '^#' < kinds.h > $@
@@ -1063,10 +1063,10 @@ c99_protos.inc: $(srcdir)/c99_protos.h
        grep '^#' < $(srcdir)/c99_protos.h > $@
 
 selected_int_kind.inc: $(srcdir)/mk-sik-inc.sh
-       $(SHELL) $(srcdir)/mk-sik-inc.sh '$(FCCOMPILE)' > $@ || rm $@
+       $(SHELL) $(srcdir)/mk-sik-inc.sh '@LIBGOMP_CHECKED_INT_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
 
 selected_real_kind.inc: $(srcdir)/mk-srk-inc.sh
-       $(SHELL) $(srcdir)/mk-srk-inc.sh '$(FCCOMPILE)' > $@ || rm $@
+       $(SHELL) $(srcdir)/mk-srk-inc.sh '@LIBGOMP_CHECKED_REAL_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
 
 fpu-target.h: $(srcdir)/$(FPU_HOST_HEADER)
        cp $(srcdir)/$(FPU_HOST_HEADER) $@
index fe063e7ff91ed061b8be1d6e0eb75aa7535770e5..3d043aaa92431862d5bec13dee7d7997fa1fb49e 100644 (file)
@@ -608,6 +608,8 @@ INSTALL_SCRIPT = @INSTALL_SCRIPT@
 INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
 LD = @LD@
 LDFLAGS = @LDFLAGS@
+LIBGOMP_CHECKED_INT_KINDS = @LIBGOMP_CHECKED_INT_KINDS@
+LIBGOMP_CHECKED_REAL_KINDS = @LIBGOMP_CHECKED_REAL_KINDS@
 LIBOBJS = @LIBOBJS@
 LIBQUADINCLUDE = @LIBQUADINCLUDE@
 LIBQUADLIB = @LIBQUADLIB@
@@ -7017,7 +7019,7 @@ ieee_arithmetic.mod: ieee_arithmetic.lo
 @onestep_TRUE@ $(LTCOMPILE) -c -o $@ $^ -combine
 
 kinds.h: $(srcdir)/mk-kinds-h.sh
-       $(SHELL) $(srcdir)/mk-kinds-h.sh '$(FCCOMPILE)' > $@ || rm $@
+       $(SHELL) $(srcdir)/mk-kinds-h.sh '@LIBGOMP_CHECKED_INT_KINDS@' '@LIBGOMP_CHECKED_REAL_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
 
 kinds.inc: kinds.h
        grep '^#' < kinds.h > $@
@@ -7026,10 +7028,10 @@ c99_protos.inc: $(srcdir)/c99_protos.h
        grep '^#' < $(srcdir)/c99_protos.h > $@
 
 selected_int_kind.inc: $(srcdir)/mk-sik-inc.sh
-       $(SHELL) $(srcdir)/mk-sik-inc.sh '$(FCCOMPILE)' > $@ || rm $@
+       $(SHELL) $(srcdir)/mk-sik-inc.sh '@LIBGOMP_CHECKED_INT_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
 
 selected_real_kind.inc: $(srcdir)/mk-srk-inc.sh
-       $(SHELL) $(srcdir)/mk-srk-inc.sh '$(FCCOMPILE)' > $@ || rm $@
+       $(SHELL) $(srcdir)/mk-srk-inc.sh '@LIBGOMP_CHECKED_REAL_KINDS@' '$(FCCOMPILE)' > $@ || rm $@
 
 fpu-target.h: $(srcdir)/$(FPU_HOST_HEADER)
        cp $(srcdir)/$(FPU_HOST_HEADER) $@
index 854656960c4c6fe2e44c29f16da54c00e240d7c9..99cca9660219375e58c9934b12dfee0236089b2a 100755 (executable)
@@ -679,6 +679,8 @@ LD
 FGREP
 SED
 SECTION_FLAGS
+LIBGOMP_CHECKED_REAL_KINDS
+LIBGOMP_CHECKED_INT_KINDS
 LIBGFOR_MINIMAL_FALSE
 LIBGFOR_MINIMAL_TRUE
 LIBGFOR_USE_SYMVER_SUN_FALSE
@@ -6208,6 +6210,19 @@ else
 fi
 
 
+# Some compiler target support may have limited support for integer
+# or floating point numbers – or may want to reduce the libgfortran size
+# although they do have the support.
+LIBGOMP_CHECKED_INT_KINDS="1 2 4 8 16"
+LIBGOMP_CHECKED_REAL_KINDS="4 8 10 16"
+
+if test "x${target_cpu}" = xamdgcn; then
+  # amdgcn only has limited support for __int128.
+  LIBGOMP_CHECKED_INT_KINDS="1 2 4 8"
+fi
+
+
+
 # Figure out whether the compiler supports "-ffunction-sections -fdata-sections",
 # similarly to how libstdc++ does it
 ac_test_CFLAGS="${CFLAGS+set}"
@@ -12724,7 +12739,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12727 "configure"
+#line 12742 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
@@ -12830,7 +12845,7 @@ else
   lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
   lt_status=$lt_dlunknown
   cat > conftest.$ac_ext <<_LT_EOF
-#line 12833 "configure"
+#line 12848 "configure"
 #include "confdefs.h"
 
 #if HAVE_DLFCN_H
index 4109d0fefae12884759eb91d55ae6180d5a0d821..8961e314d82b47dade89452a213481c8cc077e57 100644 (file)
@@ -216,6 +216,19 @@ AM_CONDITIONAL(LIBGFOR_USE_SYMVER_SUN, [test "x$gfortran_use_symver" = xsun])
 
 AM_CONDITIONAL(LIBGFOR_MINIMAL, [test "x${target_cpu}" = xnvptx])
 
+# Some compiler target support may have limited support for integer
+# or floating point numbers – or may want to reduce the libgfortran size
+# although they do have the support.
+LIBGOMP_CHECKED_INT_KINDS="1 2 4 8 16"
+LIBGOMP_CHECKED_REAL_KINDS="4 8 10 16"
+
+if test "x${target_cpu}" = xamdgcn; then
+  # amdgcn only has limited support for __int128.
+  LIBGOMP_CHECKED_INT_KINDS="1 2 4 8"
+fi
+AC_SUBST(LIBGOMP_CHECKED_INT_KINDS)
+AC_SUBST(LIBGOMP_CHECKED_REAL_KINDS)
+
 # Figure out whether the compiler supports "-ffunction-sections -fdata-sections",
 # similarly to how libstdc++ does it
 ac_test_CFLAGS="${CFLAGS+set}"
index 98a95ab54a7288b29f14690f99ce1fd9a1946304..249619061c6a585675ebeffd7b6334b1eb7c9202 100755 (executable)
@@ -2,12 +2,15 @@
 LC_ALL=C
 export LC_ALL
 
-compile="$1"
-
-# Possible types must be listed in ascending order
-possible_integer_kinds="1 2 4 8 16"
-possible_real_kinds="4 8 10 16"
+if test "$#" -ne 3; then
+  echo "Usage $0 int_kinds real_kinds compile"
+  exit 1
+fi
 
+# Possible kinds must be listed in ascending order
+possible_integer_kinds="$1"
+possible_real_kinds="$2"
+compile="$3"
 
 largest=""
 smallest=""
@@ -112,7 +115,7 @@ for k in $possible_real_kinds; do
 done
 
 
-# After this, we include a header that can override some of the 
+# After this, we include a header that can override some of the
 # autodetected settings.
 echo '#include "kinds-override.h"'
 
index 68c042f68bca03b3989cd6000df5e942cc75a0ab..e7f237ec52664e91307d160d52d17fa306d606ab 100755 (executable)
@@ -1,11 +1,18 @@
 #!/bin/sh
 
-compile="$1"
+if test "$#" -ne 2; then
+  echo "Usage $0 int_kinds compile"
+  exit 1
+fi
+
+# Possible kinds must be listed in ascending order
+possible_integer_kinds="$1"
+compile="$2"
+
 kinds=""
-possible_kinds="1 2 4 8 16"
 c=0
 
-for k in $possible_kinds; do
+for k in $possible_integer_kinds; do
   echo "  integer (kind=$k) :: x" > tmp$$.f90
   echo "  x = 1_$k" >> tmp$$.f90
   echo "  end" >> tmp$$.f90
index 402441ce6f2f54c67a98e309435d17a77b20d5f4..d9f2137f89d8d6b11139b272b00a2ac9a3af25a4 100755 (executable)
@@ -1,11 +1,18 @@
 #!/bin/sh
 
-compile="$1"
+if test "$#" -ne 2; then
+  echo "Usage $0 real_kinds compile"
+  exit 1
+fi
+
+# Possible kinds must be listed in ascending order
+possible_real_kinds="$1"
+compile="$2"
+
 kinds=""
-possible_kinds="4 8 10 16"
 c=0
 
-for k in $possible_kinds; do
+for k in $possible_real_kinds; do
   echo "  real (kind=$k) :: x" > tmp$$.f90
   echo "  x = 1.0_$k" >> tmp$$.f90
   echo "  end" >> tmp$$.f90