public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "cvs-commit at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug fortran/96983] [11/12 regression] ICE compiling gfortran.dg/pr96711.f90 starting with r11-3042
Date: Thu, 22 Apr 2021 03:03:25 +0000	[thread overview]
Message-ID: <bug-96983-4-Njr83IHGwW@http.gcc.gnu.org/bugzilla/> (raw)
In-Reply-To: <bug-96983-4@http.gcc.gnu.org/bugzilla/>

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

--- Comment #32 from CVS Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Michael Meissner <meissner@gcc.gnu.org>:

https://gcc.gnu.org/g:3cf04d1afa8a4955a0a9a395dd21ce1b6484aa78

commit r12-54-g3cf04d1afa8a4955a0a9a395dd21ce1b6484aa78
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Wed Apr 21 23:02:07 2021 -0400

    Fix Fortran rounding issues, PR fortran/96983.

    I was looking at Fortran PR 96983, which fails on the PowerPC when trying
to
    run the test PR96711.F90.  The compiler ICEs because the PowerPC does not
have
    a floating point type with a type precision of 128.  The reason is that the
    PowerPC has 3 different 128 bit floating point types (__float128/_Float128,
    __ibm128, and long double).  Currently long double uses the IBM extended
double
    type, but we would like to switch to using IEEE 128-bit long doubles in the
    future.

    In order to prevent the compiler from converting explicit __ibm128 types to
    long double when long double uses the IEEE 128-bit representation, we have
set
    up the precision for __ibm128 to be 128, long double to be 127, and
    __float128/_Float128 to be 126.

    Originally, I was trying to see if for Fortran, I could change the
precision of
    long double to be 128 (Fortran doesn't access __ibm128), but it quickly
became
    hard to get the changes to work.

    I looked at the Fortran code in build_round_expr, and I came to the
conclusion
    that there is no reason to promote the floating point type.  If you just do
a
    normal round of the value using the current floating point format and then
    convert it to the integer type.  We don't have an appropriate built-in
function
    that provides the equivalent of llround for 128-bit integer types.

    This patch fixes the compiler crash.

    However, while with this patch, the PowerPC compiler will not crash when
    building the test case, it will not run on the current default
installation.
    The failure is because the test is explicitly expecting 128-bit floating
point
    to handle 10384593717069655257060992658440192_16 (i.e. 2**113).

    By default, the PowerPC uses IBM extended double used for 128-bit floating
    point.  The IBM extended double format is a pair of doubles that provides
more
    mantissa bits but does not grow the expoenent range.  The value in the test
is
    fine for IEEE 128-bit floating point, but it is too large for the PowerPC
    extended double setup.

    I have built the following tests with this patch:

       * I have built a bootstrap compiler on a little endian power9 Linux
system
         with the default long double format (IBM extended double).  The
         pr96711.f90 test builds, but it does not run due to the range of the
         real*16 exponent.  There were no other regressions in the
C/C++/Fortran
         tests.

       * I have built a bootstrap compiler on a little endian power9 Linux
system
         with the default long double format set to IEEE 128-bit. I used the
         Advance Toolchain 14.0-2 to provide the IEEE 128-bits.  The compiler
was
         configured to build power9 code by default, so the test generated
native
         power9 IEEE 128-bit instructions.  The pr96711.f90 test builds and
runs
         correctly in this setup.

       * I have built a bootstrap compiler on a big endian power8 Linux system
with
         the default long double format (IBM extended double).  Like the first
         case, the pr96711.f90 test does not crash the compiler, but the test
fails
         due to the range of the real*16 exponent.    There were no other
         regressions in the C/C++/Fortran tests.

       * I built a bootstrap compiler on my x86_64 laptop.  There were no
         regressions in the tests.

    gcc/fortran/
    2021-04-21  Michael Meissner  <meissner@linux.ibm.com>

            PR fortran/96983
            * trans-intrinsic.c (build_round_expr): If int type is larger than
            long long, do the round and convert to the integer type.  Do not
            try to find a floating point type the exact size of the integer
            type.

  parent reply	other threads:[~2021-04-22  3:03 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-08 13:21 [Bug fortran/96983] New: [11 " seurer at gcc dot gnu.org
2020-09-08 14:18 ` [Bug fortran/96983] " anlauf at gcc dot gnu.org
2020-09-08 14:21 ` rguenth at gcc dot gnu.org
2020-09-08 15:50 ` anlauf at gcc dot gnu.org
2020-09-08 19:08 ` seurer at gcc dot gnu.org
2020-09-08 19:54 ` seurer at gcc dot gnu.org
2020-09-08 20:52 ` bergner at gcc dot gnu.org
2020-09-09  9:48 ` ro at gcc dot gnu.org
2020-09-09 14:51 ` anlauf at gcc dot gnu.org
2020-09-09 14:54 ` anlauf at gcc dot gnu.org
2020-09-09 15:01 ` ro at CeBiTec dot Uni-Bielefeld.DE
2020-09-09 17:58 ` anlauf at gcc dot gnu.org
2020-09-09 19:03 ` bergner at gcc dot gnu.org
2020-09-10 12:50 ` ro at CeBiTec dot Uni-Bielefeld.DE
2020-09-10 17:29 ` anlauf at gcc dot gnu.org
2020-09-10 22:11 ` ro at CeBiTec dot Uni-Bielefeld.DE
2020-09-10 22:59 ` bergner at gcc dot gnu.org
2020-09-10 23:12 ` bergner at gcc dot gnu.org
2020-09-10 23:28 ` bergner at gcc dot gnu.org
2020-09-10 23:31 ` bergner at gcc dot gnu.org
2020-09-11 18:56 ` anlauf at gcc dot gnu.org
2020-09-11 19:47 ` segher at gcc dot gnu.org
2020-09-13 21:37 ` ro at CeBiTec dot Uni-Bielefeld.DE
2020-09-14 17:06 ` joseph at codesourcery dot com
2020-09-14 19:04 ` anlauf at gcc dot gnu.org
2020-09-14 20:04 ` anlauf at gcc dot gnu.org
2020-09-14 20:42 ` joseph at codesourcery dot com
2020-09-15  0:08 ` segher at gcc dot gnu.org
2020-10-03 15:15 ` dominiq at lps dot ens.fr
2020-10-03 18:57 ` ro at CeBiTec dot Uni-Bielefeld.DE
2020-10-16 12:07 ` rguenth at gcc dot gnu.org
2020-11-30 21:58 ` seurer at gcc dot gnu.org
2021-03-08 16:17 ` ebotcazou at gcc dot gnu.org
2021-03-10 11:32 ` cvs-commit at gcc dot gnu.org
2021-04-22  3:03 ` cvs-commit at gcc dot gnu.org [this message]
2021-04-27 11:39 ` [Bug fortran/96983] [11/12 " jakub at gcc dot gnu.org
2021-05-19 12:37 ` burnus at gcc dot gnu.org
2021-05-19 16:43 ` ro at CeBiTec dot Uni-Bielefeld.DE
2021-05-20  7:52 ` cvs-commit at gcc dot gnu.org
2021-05-20  8:06 ` cvs-commit at gcc dot gnu.org
2021-05-20  8:11 ` burnus at gcc dot gnu.org
2021-07-28  7:05 ` rguenth at gcc dot gnu.org
2022-03-17  2:02 ` cvs-commit at gcc dot gnu.org
2022-03-17 21:00 ` meissner at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-96983-4-Njr83IHGwW@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).