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

--- Comment #2 from GCC Commits <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Kewen Lin <li...@gcc.gnu.org>:

https://gcc.gnu.org/g:33dca0a4c1c421625cedb2d6105ef1c05f6b774e

commit r15-2084-g33dca0a4c1c421625cedb2d6105ef1c05f6b774e
Author: Kewen Lin <li...@linux.ibm.com>
Date:   Wed Jul 17 00:14:43 2024 -0500

    rs6000: Make all 128 bit scalar FP modes have 128 bit precision [PR112993]

    On rs6000, there are three 128 bit scalar floating point
    modes TFmode, IFmode and KFmode.  With some historical
    reasons, we defines them with different mode precisions,
    that is KFmode 126, TFmode 127 and IFmode 128.  But in
    fact all of them should have the same mode precision 128,
    this special setting has caused some issues like some
    unexpected failures mentioned in [1] and also made us have
    to introduce some workarounds, such as: the workaround in
    build_common_tree_nodes for KFmode 126, the workaround in
    range_compatible_p for same mode but different precision
    issue.

    This patch is to make these three 128 bit scalar floating
    point modes TFmode, IFmode and KFmode have 128 bit mode
    precision, and keep the order same as previous in order
    to make machine independent parts of the compiler not try
    to widen IFmode to TFmode.  Besides, build_common_tree_nodes
    adopts the newly added hook mode_for_floating_type so we
    don't need to worry about unexpected mode for long double
    type node.

    In function convert_mode_scalar, with the proposed change,
    it adopts sext_optab for converting ieee128 format mode to
    ibm128 format mode while trunc_optab for converting ibm128
    format mode to ieee128 format mode.  Thus this patch removes
    useless extend and trunc optab supports, supplements new
    define_expands expandkftf2 and trunctfkf2 to align with
    convert_mode_scalar implementation.  It also unnames two
    define_insn_and_split to avoid conflicts and make them more
    clear.  Considering the current implementation that there is
    no chance to have KF <-> IF conversion (since either of them
    would be TF already), it adds two dummy define_expands to
    assert this.

    [1] https://inbox.sourceware.org/gcc-patches/
        718677e7-614d-7977-312d-05a75e1fd...@linux.ibm.com/

            PR target/112993

    gcc/ChangeLog:

            * config/rs6000/rs6000-modes.def (IFmode, KFmode, TFmode): Define
            with FLOAT_MODE instead of FRACTIONAL_FLOAT_MODE, don't use special
            precisions any more.
            (rs6000-modes.h): Remove include.
            * config/rs6000/rs6000-modes.h: Remove.
            * config/rs6000/rs6000.h (rs6000-modes.h): Remove include.
            * config/rs6000/t-rs6000: Remove rs6000-modes.h include.
            * config/rs6000/rs6000.cc (rs6000_option_override_internal):
Replace
            all uses of FLOAT_PRECISION_TFmode with 128.
            (rs6000_c_mode_for_floating_type): Likewise.
            * config/rs6000/rs6000.md (define_expand extendiftf2): Remove.
            (define_expand extendifkf2): Remove.
            (define_expand extendtfkf2): Remove.
            (define_expand trunckftf2): Remove.
            (define_expand trunctfif2): Remove.
            (define_expand extendtfif2): Add new assertion.
            (define_expand expandkftf2): New.
            (define_expand trunciftf2): Add new assertion.
            (define_expand trunctfkf2): New.
            (define_expand truncifkf2): Change with gcc_unreachable.
            (define_expand expandkfif2): New.
            (define_insn_and_split extendkftf2): Rename to  ...
            (define_insn_and_split *extendkftf2): ... this.
            (define_insn_and_split trunctfkf2): Rename to ...
            (define_insn_and_split *extendtfkf2): ... this.

Reply via email to