https://gcc.gnu.org/g:efa1fb693996e446653aab32344923dfb9aa756f

commit efa1fb693996e446653aab32344923dfb9aa756f
Author: Michael Meissner <[email protected]>
Date:   Tue Sep 15 19:53:45 2026 -0400

    Do BF to SF converts on p9; Remove int conversions; Add BF debug switches.
    
    2026-09-15  Michael Meissner  <[email protected]>
    
    gcc/
    
            * config/rs6000/rs6000-c.cc (rs6000_target_modify_macros): Don't 
define
            __BF16__.  If -mfloat16-gpr-convert, define __FLOAT16_GPR_CONVERT__.
            * config/rs6000/rs6000-call.cc (POWERPC_MASKS): Add
            OPTION_MASK_FLOAT16_GPR_CONVERT.
            * config/rs6000/rs6000.cc (rs6000_init_libfuncs): Change
            TARGET_FLOAT16_CONVERT_IN_GPRS to TARGET_FLOAT16_GPR_CONVERT.
            (rs6000_opt_masks): Add -mfloat16-gpr-convert.
            (rs6000_opt_vars): Drop TARGET_FLOAT16_CONVERT_IN_GPRS.
            * config/rs6000/rs6000.opt (-mfloat16-gpr-convert): Rename from
            -mfloat16-convert-in-gprs.
    
    gcc/testsuite/
    
            * gcc.target/powerpc/float16-2.c: Drop power8 support.

Diff:
---
 gcc/config/rs6000/rs6000-c.cc                |  6 ++++--
 gcc/config/rs6000/rs6000-call.cc             |  2 +-
 gcc/config/rs6000/rs6000-cpus.def            |  1 +
 gcc/config/rs6000/rs6000.cc                  |  6 ++----
 gcc/config/rs6000/rs6000.opt                 |  4 ++--
 gcc/testsuite/gcc.target/powerpc/float16-2.c | 23 +++++++++++------------
 6 files changed, 21 insertions(+), 21 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
index 9142fb632fe9..2c0f6a58773d 100644
--- a/gcc/config/rs6000/rs6000-c.cc
+++ b/gcc/config/rs6000/rs6000-c.cc
@@ -587,19 +587,21 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT 
flags)
   if ((flags & OPTION_MASK_FLOAT16) != 0)
     {
       rs6000_define_or_undefine_macro (define_p, "__FLOAT16__");
-      rs6000_define_or_undefine_macro (define_p, "__BF16__");
+      rs6000_define_or_undefine_macro (define_p, "__BFLOAT16__");
 
       /* Older versions of the PowerPC __bf16 patches used __bfloat16 as the
         keyword instead of __bf16.  Support using __bfloat16 as an alternative
         to __bf16.  */
       rs6000_define_or_undefine_macro (define_p, "__bfloat16=__bf16");
-      rs6000_define_or_undefine_macro (define_p, "__BFLOAT16__");
 
       if ((flags & OPTION_MASK_P9_VECTOR) != 0)
        rs6000_define_or_undefine_macro (define_p, "__FLOAT16_HW__");
 
       if ((flags & OPTION_MASK_POWER10) != 0)
        rs6000_define_or_undefine_macro (define_p, "__BFLOAT16_HW__");
+
+      if ((flags & OPTION_MASK_FLOAT16_GPR_CONVERT) != 0)
+       rs6000_define_or_undefine_macro (define_p, "__FLOAT16_GPR_CONVERT__");
     }
   /* Tell the user if we are targeting CELL.  */
   if (rs6000_cpu == PROCESSOR_CELL)
diff --git a/gcc/config/rs6000/rs6000-call.cc b/gcc/config/rs6000/rs6000-call.cc
index c613304036ff..94f6f398d60c 100644
--- a/gcc/config/rs6000/rs6000-call.cc
+++ b/gcc/config/rs6000/rs6000-call.cc
@@ -638,7 +638,7 @@ init_cumulative_args (CUMULATIVE_ARGS *cum, tree fntype,
   if (incoming || cum->prototype)
     cum->nargs_prototype = n_named_args;
 
-  if (TARGET_FLOAT16 && TARGET_FLOAT16_CONVERT_IN_GPRS && libname
+  if (TARGET_FLOAT16 && TARGET_FLOAT16_GPR_CONVERT && libname
       && SYMBOL_REF_P (libname))
     {
       const char *name = XSTR (libname, 0);
diff --git a/gcc/config/rs6000/rs6000-cpus.def 
b/gcc/config/rs6000/rs6000-cpus.def
index f06019c2d499..636feffa2df5 100644
--- a/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc/config/rs6000/rs6000-cpus.def
@@ -142,6 +142,7 @@
                                 | OPTION_MASK_FLOAT128_HW              \
                                 | OPTION_MASK_FLOAT128_KEYWORD         \
                                 | OPTION_MASK_FLOAT16                  \
+                                | OPTION_MASK_FLOAT16_GPR_CONVERT      \
                                 | OPTION_MASK_FPRND                    \
                                 | OPTION_MASK_POWER10                  \
                                 | OPTION_MASK_POWER11                  \
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 917cb401f718..efdb2b42d3ae 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -11947,7 +11947,7 @@ rs6000_init_libfuncs (void)
     }
 
   /* 16-bit float support functions.  */
-  if (TARGET_FLOAT16 && TARGET_FLOAT16_CONVERT_IN_GPRS)
+  if (TARGET_FLOAT16 && TARGET_FLOAT16_GPR_CONVERT)
     init_float16 ();
 }
 
@@ -25036,6 +25036,7 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
   { "hard-dfp",                        OPTION_MASK_DFP,                false, 
true  },
   { "htm",                     OPTION_MASK_HTM,                false, true  },
   { "float16",                 OPTION_MASK_FLOAT16,            false, true  },
+  { "float16-gpr-convert",     OPTION_MASK_FLOAT16_GPR_CONVERT, false, true },
   { "isel",                    OPTION_MASK_ISEL,               false, true  },
   { "mfcrf",                   OPTION_MASK_MFCRF,              false, true  },
   { "mfpgpr",                  0,                              false, true  },
@@ -25134,9 +25135,6 @@ static struct rs6000_opt_var const rs6000_opt_vars[] =
   { "speculate-indirect-jumps",
     offsetof (struct gcc_options, x_rs6000_speculate_indirect_jumps),
     offsetof (struct cl_target_option, x_rs6000_speculate_indirect_jumps), },
-  { "float16-convert-in-gprs",
-    offsetof (struct gcc_options, x_TARGET_FLOAT16_CONVERT_IN_GPRS),
-    offsetof (struct cl_target_option, x_TARGET_FLOAT16_CONVERT_IN_GPRS), },
 };
 
 /* Inner function to handle attribute((target("..."))) and #pragma GCC target
diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
index f28dd3e6f1f1..88d32f72b5a9 100644
--- a/gcc/config/rs6000/rs6000.opt
+++ b/gcc/config/rs6000/rs6000.opt
@@ -654,8 +654,8 @@ mbfloat16-p10-convert
 Target Undocumented Var(TARGET_BFLOAT16_P10_CONVERT) Init(1) Save
 Generate (do not generate) xvcvbf16spn to do __bf16 to float/double 
conversions.
 
-mfloat16-convert-in-gprs
-Target Undocumented Var(TARGET_FLOAT16_CONVERT_IN_GPRS) Init(0) Save
+mfloat16-gpr-convert
+Target Undocumented Mask(FLOAT16_GPR_CONVERT) Var(rs6000_isa_flags)
 Pass/return (do not pass/return) 16-it float conversions in GPR registers.
 
 ; Documented parameters
diff --git a/gcc/testsuite/gcc.target/powerpc/float16-2.c 
b/gcc/testsuite/gcc.target/powerpc/float16-2.c
index 9e773821f627..b2a334158c44 100644
--- a/gcc/testsuite/gcc.target/powerpc/float16-2.c
+++ b/gcc/testsuite/gcc.target/powerpc/float16-2.c
@@ -13,20 +13,19 @@
    a scalar _Float16 and a scalar double. */
 
 extern void do_power9 (void) __attribute__ ((noinline,target("cpu=power9")));
-extern void do_power8 (void) __attribute__ ((noinline,target("cpu=power8")));
 
 volatile _Float16 two = 2.0;
 volatile _Float16 three = 3.0;
-volatile _Float16 p8_add, p8_sub, p8_mul, p8_div;
+volatile _Float16 p9_add, p9_sub, p9_mul, p9_div;
 volatile _Float16 p10_add, p10_sub, p10_mul, p10_div;
 
 void
-do_power8 (void)
+do_power9 (void)
 {
-  p8_add = three + two;
-  p8_sub = three - two;
-  p8_mul = three * two;
-  p8_div = three / two;
+  p9_add = three + two;
+  p9_sub = three - two;
+  p9_mul = three * two;
+  p9_div = three / two;
 }
 
 void
@@ -41,18 +40,18 @@ do_power10 (void)
 int
 main (int argc, char *argv[])
 {
-  do_power8 ();
+  do_power9 ();
 
-  if (((double)p8_add) != 5.0)
+  if (((double)p9_add) != 5.0)
     abort ();
 
-  if (((double)p8_sub) != 1.0)
+  if (((double)p9_sub) != 1.0)
     abort ();
 
-  if (((double)p8_mul) != 6.0)
+  if (((double)p9_mul) != 6.0)
     abort ();
 
-  if (((double)p8_div) != 1.5)
+  if (((double)p9_div) != 1.5)
     abort ();
 
   do_power10 ();

Reply via email to