Since we're in stage3, I'm raising the issue of the MPFR version we require for GCC, just as in last year's stage3 for gcc-4.3: http://gcc.gnu.org/ml/gcc/2007-12/msg00298.html
I'd like to increase the "minimum" MPFR version to 2.3.0, (which has been released since Aug 2007). The "recommended" version of MPFR can be bumped to the latest which is 2.3.2. Doing this will allow me to remove several MPFR cpp conditionals in the middle-end as well as in the fortran frontend. It also helps for future work I plan to do with folding c99 complex number math functions, as that work will require mpfr-2.3.0. Patch bootstrapped on x86_64-unknown-linux-gnu using mpfr-2.3.2, no regresions. I also configured with mpfr-2.2.0 to ensure that GCC still fails the relevant checks with older versions of mpfr. If approved, I'll again wait a week before installing so people can upgrade their regtesters if necessary. Okay for mainline? Thanks, --Kaveh 2008-10-04 Kaveh R. Ghazi <[EMAIL PROTECTED]> * configure.ac (MPFR check): Bump minimum version to 2.3.0 and recommended version to 2.3.2. * builtins.c: Remove MPFR_VERSION_NUM(2,3,0) conditionals. * doc/install.texi: Bump recommended MPFR to 2.3.2. * configure: Regenerate. fortran: * simplify.c: Remove MPFR_VERSION_NUM(2,3,0) conditionals. diff -rup orig/egcc-SVN20081001/configure.ac egcc-SVN20081001/configure.ac --- orig/egcc-SVN20081001/configure.ac 2008-09-06 02:00:10.000000000 +0200 +++ egcc-SVN20081001/configure.ac 2008-10-04 20:19:15.000000000 +0200 @@ -1267,11 +1267,11 @@ if test -d ${srcdir}/gcc && test "x$have if test x"$have_gmp" = xyes; then saved_LIBS="$LIBS" LIBS="$LIBS $gmplibs" - dnl MPFR 2.2.1 is acceptable, but MPFR 2.3.0 is better. + dnl MPFR 2.3.0 is acceptable, but MPFR 2.3.2 is better. AC_MSG_CHECKING([for correct version of mpfr.h]) AC_TRY_LINK([#include <gmp.h> #include <mpfr.h>],[ - #if MPFR_VERSION < MPFR_VERSION_NUM(2,2,1) + #if MPFR_VERSION < MPFR_VERSION_NUM(2,3,0) choke me #endif mpfr_t n; @@ -1284,7 +1284,7 @@ if test -d ${srcdir}/gcc && test "x$have mpfr_subnormalize (x, t, GMP_RNDN); ], [AC_TRY_LINK([#include <gmp.h> #include <mpfr.h>],[ - #if MPFR_VERSION < MPFR_VERSION_NUM(2,3,0) + #if MPFR_VERSION < MPFR_VERSION_NUM(2,3,2) choke me #endif mpfr_t n; mpfr_init(n); @@ -1295,7 +1295,7 @@ if test -d ${srcdir}/gcc && test "x$have CFLAGS="$saved_CFLAGS" if test x$have_gmp != xyes; then - AC_MSG_ERROR([Building GCC requires GMP 4.1+ and MPFR 2.3.0+. + AC_MSG_ERROR([Building GCC requires GMP 4.1+ and MPFR 2.3.2+. Try the --with-gmp and/or --with-mpfr options to specify their locations. Copies of these libraries' source code can be found at their respective hosting sites as well as at ftp://gcc.gnu.org/pub/gcc/infrastructure/. diff -rup orig/egcc-SVN20081001/gcc/builtins.c egcc-SVN20081001/gcc/builtins.c --- orig/egcc-SVN20081001/gcc/builtins.c 2008-08-30 02:00:13.000000000 +0200 +++ egcc-SVN20081001/gcc/builtins.c 2008-10-04 20:22:06.000000000 +0200 @@ -231,13 +231,11 @@ static tree do_mpfr_arg2 (tree, tree, tr static tree do_mpfr_arg3 (tree, tree, tree, tree, int (*)(mpfr_ptr, mpfr_srcptr, mpfr_srcptr, mpfr_srcptr, mp_rnd_t)); static tree do_mpfr_sincos (tree, tree, tree); -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) static tree do_mpfr_bessel_n (tree, tree, tree, int (*)(mpfr_ptr, long, mpfr_srcptr, mp_rnd_t), const REAL_VALUE_TYPE *, bool); static tree do_mpfr_remquo (tree, tree, tree); static tree do_mpfr_lgamma_r (tree, tree, tree); -#endif /* Return true if NODE should be considered for inline expansion regardless of the optimization level. This means whenever a function is invoked with @@ -10112,7 +10110,6 @@ fold_builtin_1 (tree fndecl, tree arg0, &dconstm1, NULL, false); break; -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) CASE_FLT_FN (BUILT_IN_J0): if (validate_arg (arg0, REAL_TYPE)) return do_mpfr_arg1 (arg0, type, mpfr_j0, @@ -10136,7 +10133,6 @@ fold_builtin_1 (tree fndecl, tree arg0, return do_mpfr_arg1 (arg0, type, mpfr_y1, &dconst0, NULL, false); break; -#endif CASE_FLT_FN (BUILT_IN_NAN): case BUILT_IN_NAND32: @@ -10252,7 +10248,6 @@ fold_builtin_2 (tree fndecl, tree arg0, switch (fcode) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) CASE_FLT_FN (BUILT_IN_JN): if (validate_arg (arg0, INTEGER_TYPE) && validate_arg (arg1, REAL_TYPE)) @@ -10279,7 +10274,6 @@ fold_builtin_2 (tree fndecl, tree arg0, && validate_arg(arg1, POINTER_TYPE)) return do_mpfr_lgamma_r (arg0, arg1, type); break; -#endif CASE_FLT_FN (BUILT_IN_ATAN2): if (validate_arg (arg0, REAL_TYPE) @@ -10436,14 +10430,12 @@ fold_builtin_3 (tree fndecl, tree arg0, return do_mpfr_arg3 (arg0, arg1, arg2, type, mpfr_fma); break; -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) CASE_FLT_FN (BUILT_IN_REMQUO): if (validate_arg (arg0, REAL_TYPE) && validate_arg(arg1, REAL_TYPE) && validate_arg(arg2, POINTER_TYPE)) return do_mpfr_remquo (arg0, arg1, arg2); break; -#endif case BUILT_IN_MEMSET: return fold_builtin_memset (arg0, arg1, arg2, type, ignore); @@ -13054,7 +13046,6 @@ do_mpfr_sincos (tree arg, tree arg_sinp, return result; } -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) /* If argument ARG1 is an INTEGER_CST and ARG2 is a REAL_CST, call the two-argument mpfr order N Bessel function FUNC on them and return the resulting value as a tree with type TYPE. The mpfr precision @@ -13239,7 +13230,6 @@ do_mpfr_lgamma_r (tree arg, tree arg_sg, return result; } -#endif /* FIXME tuples. The functions below provide an alternate interface for folding diff -rup orig/egcc-SVN20081001/gcc/doc/install.texi egcc-SVN20081001/gcc/doc/install.texi --- orig/egcc-SVN20081001/gcc/doc/install.texi 2008-09-14 02:00:04.000000000 +0200 +++ egcc-SVN20081001/gcc/doc/install.texi 2008-10-04 20:20:03.000000000 +0200 @@ -309,7 +309,7 @@ library search path, you will have to co @option{--with-gmp} configure option. See also @option{--with-gmp-lib} and @option{--with-gmp-include}. [EMAIL PROTECTED] MPFR Library version 2.3.0 (or later) [EMAIL PROTECTED] MPFR Library version 2.3.2 (or later) Necessary to build [EMAIL PROTECTED] It can be downloaded from @uref{http://www.mpfr.org/}. The version of MPFR that is bundled with diff -rup orig/egcc-SVN20081001/gcc/fortran/simplify.c egcc-SVN20081001/gcc/fortran/simplify.c --- orig/egcc-SVN20081001/gcc/fortran/simplify.c 2008-09-12 02:00:04.000000000 +0200 +++ egcc-SVN20081001/gcc/fortran/simplify.c 2008-10-04 20:22:58.000000000 +0200 @@ -668,7 +668,6 @@ gfc_simplify_atan2 (gfc_expr *y, gfc_exp gfc_expr * gfc_simplify_bessel_j0 (gfc_expr *x ATTRIBUTE_UNUSED) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) gfc_expr *result; if (x->expr_type != EXPR_CONSTANT) @@ -678,16 +677,12 @@ gfc_simplify_bessel_j0 (gfc_expr *x ATTR mpfr_j0 (result->value.real, x->value.real, GFC_RND_MODE); return range_check (result, "BESSEL_J0"); -#else - return NULL; -#endif } gfc_expr * gfc_simplify_bessel_j1 (gfc_expr *x ATTRIBUTE_UNUSED) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) gfc_expr *result; if (x->expr_type != EXPR_CONSTANT) @@ -697,9 +692,6 @@ gfc_simplify_bessel_j1 (gfc_expr *x ATTR mpfr_j1 (result->value.real, x->value.real, GFC_RND_MODE); return range_check (result, "BESSEL_J1"); -#else - return NULL; -#endif } @@ -707,7 +699,6 @@ gfc_expr * gfc_simplify_bessel_jn (gfc_expr *order ATTRIBUTE_UNUSED, gfc_expr *x ATTRIBUTE_UNUSED) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) gfc_expr *result; long n; @@ -719,16 +710,12 @@ gfc_simplify_bessel_jn (gfc_expr *order mpfr_jn (result->value.real, n, x->value.real, GFC_RND_MODE); return range_check (result, "BESSEL_JN"); -#else - return NULL; -#endif } gfc_expr * gfc_simplify_bessel_y0 (gfc_expr *x ATTRIBUTE_UNUSED) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) gfc_expr *result; if (x->expr_type != EXPR_CONSTANT) @@ -738,16 +725,12 @@ gfc_simplify_bessel_y0 (gfc_expr *x ATTR mpfr_y0 (result->value.real, x->value.real, GFC_RND_MODE); return range_check (result, "BESSEL_Y0"); -#else - return NULL; -#endif } gfc_expr * gfc_simplify_bessel_y1 (gfc_expr *x ATTRIBUTE_UNUSED) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) gfc_expr *result; if (x->expr_type != EXPR_CONSTANT) @@ -757,9 +740,6 @@ gfc_simplify_bessel_y1 (gfc_expr *x ATTR mpfr_y1 (result->value.real, x->value.real, GFC_RND_MODE); return range_check (result, "BESSEL_Y1"); -#else - return NULL; -#endif } @@ -767,7 +747,6 @@ gfc_expr * gfc_simplify_bessel_yn (gfc_expr *order ATTRIBUTE_UNUSED, gfc_expr *x ATTRIBUTE_UNUSED) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) gfc_expr *result; long n; @@ -779,9 +758,6 @@ gfc_simplify_bessel_yn (gfc_expr *order mpfr_yn (result->value.real, n, x->value.real, GFC_RND_MODE); return range_check (result, "BESSEL_YN"); -#else - return NULL; -#endif } @@ -2459,7 +2435,6 @@ gfc_simplify_len_trim (gfc_expr *e, gfc_ gfc_expr * gfc_simplify_lgamma (gfc_expr *x ATTRIBUTE_UNUSED) { -#if MPFR_VERSION >= MPFR_VERSION_NUM(2,3,0) gfc_expr *result; int sg; @@ -2471,9 +2446,6 @@ gfc_simplify_lgamma (gfc_expr *x ATTRIBU mpfr_lgamma (result->value.real, &sg, x->value.real, GFC_RND_MODE); return range_check (result, "LGAMMA"); -#else - return NULL; -#endif }