This removes the single remaining use of WIDEST_HARDWARE_FP_SIZE in GCC, a 
macro that had only been used by the Ada compiler and whose use has been 
anectodal for a long time, and all the associated bits.

Bootstrapped/regtested on x86-64/Linux, applied on the mainline.


2026-07-06  Eric Botcazou  <[email protected]>

        * config/aarch64/aarch64.h (WIDEST_HARDWARE_FP_SIZE): Delete.
        * config/alpha/alpha.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * config/i386/i386.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * config/ia64/vms.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * config/pa/pa.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * config/rs6000/rs6000.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * config/s390/s390.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * config/sparc/sparc.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * config/visium/visium.h (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * doc/tm.texi.in (WIDEST_HARDWARE_FP_SIZE): Likewise.
        * doc/tm.texi: Regenerate.
        * system.h (WIDEST_HARDWARE_FP_SIZE): Poison.


2026-07-06  Eric Botcazou  <[email protected]>

        * gcc-interface/decl.cc (gnat_to_gnu_entity): Use the precision of
        longest_float_type_node to compute the maximum size of FP types.

-- 
Eric Botcazou
diff --git a/gcc/ada/gcc-interface/decl.cc b/gcc/ada/gcc-interface/decl.cc
index e569eb1bddf..be2df77fcff 100644
--- a/gcc/ada/gcc-interface/decl.cc
+++ b/gcc/ada/gcc-interface/decl.cc
@@ -543,12 +543,16 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, bool definition)
 	  esize = UI_To_Int (Esize (gnat_entity));
 
 	  if (IN (kind, Float_Kind))
-#ifdef WIDEST_HARDWARE_FP_SIZE
-	    max_esize = fp_prec_to_size (WIDEST_HARDWARE_FP_SIZE);
-#else
-	    max_esize
-	      = fp_prec_to_size (TYPE_PRECISION (long_double_type_node));
-#endif
+	    {
+	      /* This block is executed the first time to translate the GNAT
+		 node corresponding to Gigi's longest_float_type_node, so the
+		 tree is not yet saved at this time.  */
+	      if (longest_float_type_node)
+		max_esize
+		  = fp_prec_to_size (TYPE_PRECISION (longest_float_type_node));
+	      else
+		max_esize = esize;
+	    }
 	  else if (IN (kind, Access_Kind))
 	    max_esize = POINTER_SIZE * 2;
 	  else
diff --git a/gcc/config/aarch64/aarch64.h b/gcc/config/aarch64/aarch64.h
index 9031d67b50d..26db4958a80 100644
--- a/gcc/config/aarch64/aarch64.h
+++ b/gcc/config/aarch64/aarch64.h
@@ -96,8 +96,6 @@
 
 #define LONG_LONG_TYPE_SIZE	64
 
-#define WIDEST_HARDWARE_FP_SIZE	64
-
 /* This value is the amount of bytes a caller is allowed to drop the stack
    before probing has to be done for stack clash protection.  */
 #define STACK_CLASH_CALLER_GUARD 1024
diff --git a/gcc/config/alpha/alpha.h b/gcc/config/alpha/alpha.h
index 47422032b7b..1a1abfe99b4 100644
--- a/gcc/config/alpha/alpha.h
+++ b/gcc/config/alpha/alpha.h
@@ -195,9 +195,6 @@ extern enum alpha_fp_trap_mode alpha_fptm;
 /* Define the size of `long long'.  The default is the twice the word size.  */
 #define LONG_LONG_TYPE_SIZE 64
 
-/* Work around target_flags dependency in ada/targtyps.cc.  */
-#define WIDEST_HARDWARE_FP_SIZE 64
-
 #define	WCHAR_TYPE "unsigned int"
 #define	WCHAR_TYPE_SIZE 32
 
diff --git a/gcc/config/i386/i386.h b/gcc/config/i386/i386.h
index 1b8785d7872..f2e8fd2447f 100644
--- a/gcc/config/i386/i386.h
+++ b/gcc/config/i386/i386.h
@@ -743,8 +743,6 @@ extern const char *host_detect_local_cpu (int argc, const char **argv);
 #define POINTER_SIZE (TARGET_X32 ? 32 : BITS_PER_WORD)
 #define LONG_LONG_TYPE_SIZE 64
 
-#define WIDEST_HARDWARE_FP_SIZE 80
-
 #if defined (TARGET_BI_ARCH) || TARGET_64BIT_DEFAULT
 #define MAX_BITS_PER_WORD 64
 #else
diff --git a/gcc/config/ia64/vms.h b/gcc/config/ia64/vms.h
index 3ab01037643..ae07ffd292a 100644
--- a/gcc/config/ia64/vms.h
+++ b/gcc/config/ia64/vms.h
@@ -33,10 +33,6 @@ along with GCC; see the file COPYING3.  If not see
 #undef MAX_OFILE_ALIGNMENT
 #define MAX_OFILE_ALIGNMENT 524288  /* 8 x 2^16 by DEC Ada Test CD40VRA */
 
-/* Widest floating-point type efficiently supported by hardware and OS.  */
-#undef WIDEST_HARDWARE_FP_SIZE
-#define WIDEST_HARDWARE_FP_SIZE 64
-
 /* The structure return address arrives as an "argument" on VMS.  */
 #undef PCC_STATIC_STRUCT_RETURN
 
diff --git a/gcc/config/pa/pa.h b/gcc/config/pa/pa.h
index f62361f0d69..f2fda4140ee 100644
--- a/gcc/config/pa/pa.h
+++ b/gcc/config/pa/pa.h
@@ -269,11 +269,6 @@ typedef struct GTY(()) machine_function
 #define MIN_UNITS_PER_WORD      4
 #endif
 
-/* The widest floating point format supported by the hardware.  Note that
-   setting this influences some Ada floating point type sizes, currently
-   required for GNAT to operate properly.  */
-#define WIDEST_HARDWARE_FP_SIZE 64
-
 /* Allocation boundary (in *bits*) for storing arguments in argument list.  */
 #define PARM_BOUNDARY BITS_PER_WORD
 
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 401f50ead4f..8235e095bcc 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -691,9 +691,6 @@ extern unsigned char rs6000_recip_bits[];
    words.  */
 #define LONG_LONG_TYPE_SIZE 64
 
-/* Work around rs6000_long_double_type_size dependency in ada/targtyps.cc.  */
-#define WIDEST_HARDWARE_FP_SIZE 64
-
 /* Width in bits of a pointer.
    See also the macro `Pmode' defined below.  */
 extern unsigned rs6000_pointer_size;
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index 6df691c4692..4764a87c7a6 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -386,9 +386,6 @@ extern const char *s390_host_detect_local_cpu (int argc, const char **argv);
 #define LONG_TYPE_SIZE (TARGET_64BIT ? 64 : 32)
 #define LONG_LONG_TYPE_SIZE 64
 
-/* Work around target_flags dependency in ada/targtyps.cc.  */
-#define WIDEST_HARDWARE_FP_SIZE 64
-
 /* We use "unsigned char" as default.  */
 #define DEFAULT_SIGNED_CHAR 0
 
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index 16e31901ca6..43174c5d475 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -495,10 +495,7 @@ along with GCC; see the file COPYING3.  If not see
 /* SPARC_LONG_DOUBLE_TYPE_SIZE is defined per OS even though the
    SPARC ABI says that it is 128-bit wide.  LONG_DOUBLE_TYPE_SIZE
    get poisoned, so add SPARC_ prefix.  */
-/* #define SPARC_LONG_DOUBLE_TYPE_SIZE	128 */
-
-/* The widest floating-point format really supported by the hardware.  */
-#define WIDEST_HARDWARE_FP_SIZE 64
+#define SPARC_LONG_DOUBLE_TYPE_SIZE	128
 
 /* Width in bits of a pointer.  This is the size of ptr_mode.  */
 #define POINTER_SIZE (TARGET_PTR64 ? 64 : 32)
diff --git a/gcc/config/visium/visium.h b/gcc/config/visium/visium.h
index 245f71e8396..f63d5ad594f 100644
--- a/gcc/config/visium/visium.h
+++ b/gcc/config/visium/visium.h
@@ -330,17 +330,6 @@
    it is rounded up to one unit.) */
 #define CHAR_TYPE_SIZE  8
 
-/* `WIDEST_HARDWARE_FP_SIZE'
-
-   A C expression for the size in bits of the widest floating-point
-   format supported by the hardware.  If you define this macro, you
-   must specify a value less than or equal to mode precision of the
-   mode used for C type long double (from hook
-   targetm.c.mode_for_floating_type with tree_index
-   TI_LONG_DOUBLE_TYPE).  If you do not define this macro, mode
-   precision of the mode used for C type long double is the
-   default.  */
-
 /* `DEFAULT_SIGNED_CHAR'
 
    An expression whose value is 1 or 0, according to whether the type
diff --git a/gcc/doc/tm.texi b/gcc/doc/tm.texi
index 6178db74d2f..a5785b93720 100644
--- a/gcc/doc/tm.texi
+++ b/gcc/doc/tm.texi
@@ -1711,16 +1711,6 @@ uses this macro should also arrange to use @file{t-gnu-prefix} in
 the libgcc @file{config.host}.
 @end defmac
 
-@defmac WIDEST_HARDWARE_FP_SIZE
-A C expression for the size in bits of the widest floating-point format
-supported by the hardware.  If you define this macro, you must specify a
-value less than or equal to mode precision of the mode used for C type
-@code{long double} (from hook @code{targetm.c.mode_for_floating_type}
-with argument @code{TI_LONG_DOUBLE_TYPE}).  If you do not define this
-macro, mode precision of the mode used for C type @code{long double} is
-the default.
-@end defmac
-
 @defmac DEFAULT_SIGNED_CHAR
 An expression whose value is 1 or 0, according to whether the type
 @code{char} should be signed or unsigned by default.  The user can
diff --git a/gcc/doc/tm.texi.in b/gcc/doc/tm.texi.in
index 0a97b0fa2e4..3d295eb5b49 100644
--- a/gcc/doc/tm.texi.in
+++ b/gcc/doc/tm.texi.in
@@ -1446,16 +1446,6 @@ uses this macro should also arrange to use @file{t-gnu-prefix} in
 the libgcc @file{config.host}.
 @end defmac
 
-@defmac WIDEST_HARDWARE_FP_SIZE
-A C expression for the size in bits of the widest floating-point format
-supported by the hardware.  If you define this macro, you must specify a
-value less than or equal to mode precision of the mode used for C type
-@code{long double} (from hook @code{targetm.c.mode_for_floating_type}
-with argument @code{TI_LONG_DOUBLE_TYPE}).  If you do not define this
-macro, mode precision of the mode used for C type @code{long double} is
-the default.
-@end defmac
-
 @defmac DEFAULT_SIGNED_CHAR
 An expression whose value is 1 or 0, according to whether the type
 @code{char} should be signed or unsigned by default.  The user can
diff --git a/gcc/system.h b/gcc/system.h
index c00995ccb17..36f73a70f70 100644
--- a/gcc/system.h
+++ b/gcc/system.h
@@ -1066,7 +1066,7 @@ extern void fancy_abort (const char *, int, const char *)
 	STANDARD_INCLUDE_DIR STANDARD_INCLUDE_COMPONENT			   \
 	LINK_ELIMINATE_DUPLICATE_LDIRECTORIES MIPS_DEBUGGING_INFO	   \
 	IDENT_ASM_OP ALL_COP_ADDITIONAL_REGISTER_NAMES			   \
-	RANGE_TEST_NON_SHORT_CIRCUIT					   \
+	RANGE_TEST_NON_SHORT_CIRCUIT EXTENDED_SDB_BASIC_TYPES		   \
 	REAL_VALUE_TRUNCATE REVERSE_CONDEXEC_PREDICATES_P		   \
 	TARGET_ALIGN_ANON_BITFIELDS TARGET_NARROW_VOLATILE_BITFIELDS	   \
 	IDENT_ASM_OP UNALIGNED_SHORT_ASM_OP UNALIGNED_INT_ASM_OP	   \
@@ -1086,7 +1086,8 @@ extern void fancy_abort (const char *, int, const char *)
 	EH_FRAME_IN_DATA_SECTION TARGET_FLT_EVAL_METHOD_NON_DEFAULT	   \
 	JCR_SECTION_NAME TARGET_USE_JCR_SECTION SDB_DEBUGGING_INFO	   \
 	SDB_DEBUG NO_IMPLICIT_EXTERN_C NOTICE_UPDATE_CC			   \
-	CC_STATUS_MDEP_INIT CC_STATUS_MDEP CC_STATUS SLOW_SHORT_ACCESS
+	CC_STATUS_MDEP_INIT CC_STATUS_MDEP CC_STATUS SLOW_SHORT_ACCESS	   \
+	WIDEST_HARDWARE_FP_SIZE
 
 /* Hooks that are no longer used.  */
  #pragma GCC poison LANG_HOOKS_FUNCTION_MARK LANG_HOOKS_FUNCTION_FREE	\
@@ -1103,7 +1104,7 @@ extern void fancy_abort (const char *, int, const char *)
 	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_EVEN \
 	TARGET_VECTORIZE_BUILTIN_MUL_WIDEN_ODD \
 	TARGET_MD_ASM_CLOBBERS TARGET_RELAXED_ORDERING \
-	EXTENDED_SDB_BASIC_TYPES TARGET_INVALID_PARAMETER_TYPE \
+	TARGET_INVALID_PARAMETER_TYPE \
 	TARGET_INVALID_RETURN_TYPE
 
 /* Arrays that were deleted in favor of a functional interface.  */

Reply via email to