mbox series

[00/52] Replace {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE with new hook

Message ID cover.1717134752.git.linkw@linux.ibm.com
Headers show
Series Replace {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE with new hook | expand

Message

Kewen.Lin June 3, 2024, 3 a.m. UTC
Hi,

Currently how we determine which mode will be used for a
floating point type is that for a given type precision
(size) call mode_for_size to get the first mode which has
this size in the specified class.  On Powerpc, we have
three modes (TF/KF/IF) having the same mode precision 128
(see[1]), so the processing forces us to have to place TF
at the first place, it would require us to make more
adjustment in some generic code to avoid some unexpected
mode conversions and it would be even worse if we get rid
of TF eventually one day.  And as Joseph pointed out in [2],
"floating types should have their mode, not a poorly
defined precision value", as Joseph and Richi suggested,
this patch is to introduce one hook mode_for_floating_type
which returns the corresponding mode for type float, double
or long double.  The default implementation returns SFmode
for float and DFmode for double or long double.  For ports
which need special treatment, there are some other patches
for their own port specific implementation (referring to
how {,LONG_}DOUBLE_TYPE_SIZE get used there).  For all
generic uses of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE, depending
on the context, some of them are replaced with TYPE_PRECISION
of the according type node, some other are replaced with
GET_MODE_PRECISION on the mode from mode_for_floating_type.
This patch also poisons {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE,
so most defines of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE in port
specific are removed, but there are still some which are
required to be re-defined in subtargets, or used in other
macro defines, so it would be good to keep them as before
but rename them with port specific prefix.

[1] https://gcc.gnu.org/pipermail/gcc-patches/2024-May/651017.html
[2] https://gcc.gnu.org/pipermail/gcc-patches/2024-May/651209.html

- Subpatch 1-8 are prepared for this new hook change by
  replacing uses of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE with
  TYPE_PRECISION of {float,{,long_}double}_type_node.
- Subpatch 9 is the main one to introduce the new hook
  mode_for_floating_type with default implementation.
- Subpatch 10 is to replace some uses in jit with this
  new hook.
- From subpatch 11 to 52, they are target specific.
- Subpatch 11-34 is to remove useless macros
  {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE in target code.
- Subpatch 35-45 is to add target own specific hook
  implementation, also remove useless macros if there are.
- Subpatch 46-51 is to add target own specific hook
  implementation, remove useless macros and rename them
  with target prefix if they are still needed.
- Subpatch 52 is to remove useless LONG_DOUBLE_TYPE_SIZE
  and rename {FLOAT,DOUBLE}_TYPE_SIZE for bfin.

As previous testing on RFC/PATCH, this is bootstrapped
& regtested on powerpc64{,le}-linux-gnu with all langs
on, cross cc1 built well for affected ports at least
one available triple.

Kewen Lin (52):
  ada: Replace use of LONG_DOUBLE_TYPE_SIZE
  d: Replace use of LONG_DOUBLE_TYPE_SIZE
  fortran: Replace uses of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE
  go: Replace uses of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE
  rust: Replace uses of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE
  m2: Replace uses of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE
  darwin: Replace use of LONG_DOUBLE_TYPE_SIZE
  vms: Replace use of LONG_DOUBLE_TYPE_SIZE
  Replace {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE with new hook mode_for_floating_type
  jit: Replace uses of {FLOAT,{,LONG_}DOUBLE}_TYPE_SIZE
  arc: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  bpf: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  epiphany: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  fr30: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  frv: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  ft32: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  gcn: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  iq2000: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  lm32: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  m32c: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  m32r: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  microblaze: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  mmix: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  moxie: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  msp430: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  nds32: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  nios2: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  nvptx: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  or1k: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  pdp11: Remove macro LONG_DOUBLE_TYPE_SIZE
  pru: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  stormy16: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  visium: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  xtensa: Remove macros {FLOAT,DOUBLE,LONG_DOUBLE}_TYPE_SIZE
  rs6000: New hook implementation rs6000_c_mode_for_floating_type
  aarch64: New hook implementation aarch64_c_mode_for_floating_type
  alpha: New hook implementation alpha_c_mode_for_floating_type
  avr: New hook implementation avr_c_mode_for_floating_type
  i386: New hook implementation ix86_c_mode_for_floating_type
  ia64: New hook implementation ia64_c_mode_for_floating_type
  riscv: New hook implementation riscv_c_mode_for_floating_type
  rl78: New hook implementation rl78_c_mode_for_floating_type
  rx: New hook implementation rx_c_mode_for_floating_type
  s390: New hook implementation s390_c_mode_for_floating_type
  sh: New hook implementation sh_c_mode_for_floating_type
  h8300: New hook implementation h8300_c_mode_for_floating_type
  loongarch: New hook implementation loongarch_c_mode_for_floating_type
  m68k: New hook implementation m68k_c_mode_for_floating_type
  mips: New hook implementation mips_c_mode_for_floating_type
  pa: New hook implementation pa_c_mode_for_floating_type
  sparc: New hook implementation sparc_c_mode_for_floating_type
  bfin: Rename macros {FLOAT,DOUBLE}_TYPE_SIZE

 gcc/ada/gcc-interface/decl.cc      |  3 ++-
 gcc/config/aarch64/aarch64.cc      | 15 ++++++++++++++
 gcc/config/aarch64/aarch64.h       |  6 ------
 gcc/config/alpha/alpha.cc          | 17 ++++++++++++++-
 gcc/config/alpha/alpha.h           |  8 --------
 gcc/config/arc/arc.h               |  3 ---
 gcc/config/avr/avr.cc              | 17 +++++++++++++++
 gcc/config/avr/avr.h               |  3 ---
 gcc/config/bfin/bfin.h             | 11 +++++-----
 gcc/config/bpf/bpf.h               |  3 ---
 gcc/config/darwin.cc               |  2 +-
 gcc/config/epiphany/epiphany.h     |  3 ---
 gcc/config/fr30/fr30.h             |  3 ---
 gcc/config/frv/frv.h               |  3 ---
 gcc/config/ft32/ft32.h             |  4 ----
 gcc/config/gcn/gcn.h               |  3 ---
 gcc/config/h8300/h8300.cc          | 15 ++++++++++++++
 gcc/config/h8300/h8300.h           |  4 +---
 gcc/config/h8300/linux.h           |  4 ++--
 gcc/config/i386/i386.cc            | 15 ++++++++++++++
 gcc/config/i386/i386.h             |  4 ----
 gcc/config/ia64/ia64.cc            | 18 ++++++++++++++++
 gcc/config/ia64/ia64.h             | 12 -----------
 gcc/config/iq2000/iq2000.h         |  3 ---
 gcc/config/lm32/lm32.h             |  4 ----
 gcc/config/loongarch/loongarch.cc  | 15 ++++++++++++++
 gcc/config/loongarch/loongarch.h   | 13 ++++++------
 gcc/config/m32c/m32c.h             |  4 ----
 gcc/config/m32r/m32r.h             |  3 ---
 gcc/config/m68k/m68k.cc            | 16 +++++++++++++++
 gcc/config/m68k/m68k.h             |  4 ++--
 gcc/config/m68k/netbsd-elf.h       |  4 ++--
 gcc/config/microblaze/microblaze.h |  3 ---
 gcc/config/mips/mips.cc            | 14 +++++++++++++
 gcc/config/mips/mips.h             | 13 ++++++------
 gcc/config/mips/n32-elf.h          |  4 ++--
 gcc/config/mmix/mmix.h             |  4 ----
 gcc/config/moxie/moxie.h           |  4 ----
 gcc/config/msp430/msp430.h         |  4 ----
 gcc/config/nds32/nds32.h           |  4 ----
 gcc/config/nios2/nios2.h           |  3 ---
 gcc/config/nvptx/nvptx.h           |  3 ---
 gcc/config/or1k/or1k.h             |  3 ---
 gcc/config/pa/pa-64.h              | 12 +++++------
 gcc/config/pa/pa-hpux.h            |  3 ++-
 gcc/config/pa/pa.cc                | 21 ++++++++++++++++---
 gcc/config/pa/pa.h                 |  6 ++++++
 gcc/config/pdp11/pdp11.h           | 11 ----------
 gcc/config/pru/pru.h               |  3 ---
 gcc/config/riscv/riscv.cc          | 15 ++++++++++++++
 gcc/config/riscv/riscv.h           |  4 ----
 gcc/config/rl78/rl78.cc            | 15 ++++++++++++++
 gcc/config/rl78/rl78.h             |  4 ----
 gcc/config/rs6000/rs6000.cc        | 16 +++++++++++++++
 gcc/config/rs6000/rs6000.h         | 14 -------------
 gcc/config/rx/rx.cc                | 15 ++++++++++++++
 gcc/config/rx/rx.h                 |  4 ----
 gcc/config/s390/s390.cc            | 15 ++++++++++++++
 gcc/config/s390/s390.h             |  3 ---
 gcc/config/sh/sh.cc                | 18 ++++++++++++++++
 gcc/config/sh/sh.h                 | 10 ---------
 gcc/config/sparc/freebsd.h         |  4 ++--
 gcc/config/sparc/linux.h           |  2 +-
 gcc/config/sparc/linux64.h         |  4 ++--
 gcc/config/sparc/netbsd-elf.h      | 12 +++++------
 gcc/config/sparc/openbsd64.h       |  4 ++--
 gcc/config/sparc/sol2.h            |  2 +-
 gcc/config/sparc/sp-elf.h          |  4 ++--
 gcc/config/sparc/sp64-elf.h        |  4 ++--
 gcc/config/sparc/sparc.cc          | 31 ++++++++++++++++++----------
 gcc/config/sparc/sparc.h           |  9 ++++----
 gcc/config/stormy16/stormy16.h     |  6 ------
 gcc/config/visium/visium.h         | 29 ++++++--------------------
 gcc/config/vms/vms.cc              |  5 +++--
 gcc/config/xtensa/xtensa.h         |  3 ---
 gcc/coretypes.h                    |  1 +
 gcc/d/d-target.cc                  |  3 ++-
 gcc/defaults.h                     | 12 -----------
 gcc/doc/rtl.texi                   |  2 +-
 gcc/doc/tm.texi                    | 33 ++++++++++++------------------
 gcc/doc/tm.texi.in                 | 27 +++++++-----------------
 gcc/emit-rtl.cc                    |  3 ++-
 gcc/fortran/trans-intrinsic.cc     |  3 ++-
 gcc/fortran/trans-types.cc         | 10 +++++----
 gcc/go/go-gcc.cc                   | 12 +++++------
 gcc/jit/jit-recording.cc           | 12 +++++++----
 gcc/m2/gm2-gcc/m2type.cc           |  6 +++---
 gcc/real.h                         |  7 ++++---
 gcc/rust/rust-gcc.cc               |  6 +++---
 gcc/system.h                       |  3 ++-
 gcc/target.def                     |  9 ++++++++
 gcc/targhooks.cc                   | 18 +++++++++++++---
 gcc/targhooks.h                    |  1 +
 gcc/tree-core.h                    | 13 ++++++------
 gcc/tree.cc                        | 18 +++++++++++++---
 95 files changed, 455 insertions(+), 353 deletions(-)