https://gcc.gnu.org/g:85f13d9dc5acd815f5643fc7c170886d670b3361

commit 85f13d9dc5acd815f5643fc7c170886d670b3361
Author: Surya Kumari Jangala <[email protected]>
Date:   Tue Jun 30 05:18:52 2026 -0500

    [rs6000] Add -mdense-math option
    
    This patch adds support for -mdense-math compiler option. This patch
    also provides TARGET_DMF macro.

Diff:
---
 gcc/config/rs6000/rs6000-cpus.def          |  4 +++-
 gcc/config/rs6000/rs6000.cc                | 14 ++++++++++++++
 gcc/config/rs6000/rs6000.opt               |  4 ++++
 gcc/testsuite/gcc.target/powerpc/dmf-opt.c | 14 ++++++++++++++
 4 files changed, 35 insertions(+), 1 deletion(-)

diff --git a/gcc/config/rs6000/rs6000-cpus.def 
b/gcc/config/rs6000/rs6000-cpus.def
index a110860acce6..365e0c6899c1 100644
--- a/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc/config/rs6000/rs6000-cpus.def
@@ -85,7 +85,8 @@
 
 /* -mcpu=future flags.  */
 #define FUTURE_MASKS_SERVER    (POWER11_MASKS_SERVER                   \
-                                | OPTION_MASK_FUTURE)
+                                | OPTION_MASK_FUTURE                   \
+                                | OPTION_MASK_DMF)
 
 /* Flags that need to be turned off if -mno-vsx.  */
 #define OTHER_VSX_VECTOR_MASKS (OPTION_MASK_EFFICIENT_UNALIGNED_VSX    \
@@ -126,6 +127,7 @@
                                 | OPTION_MASK_POWER10                  \
                                 | OPTION_MASK_POWER11                  \
                                 | OPTION_MASK_FUTURE                   \
+                                | OPTION_MASK_DMF                      \
                                 | OPTION_MASK_P10_FUSION               \
                                 | OPTION_MASK_HTM                      \
                                 | OPTION_MASK_ISEL                     \
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 86d06cfdaa67..05a152ac86ed 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -4381,6 +4381,19 @@ rs6000_option_override_internal (bool global_init_p)
       rs6000_isa_flags &= ~OPTION_MASK_MMA;
     }
 
+  /* Enable -mdense_math by default on future systems.  */
+  if (TARGET_FUTURE && (rs6000_isa_flags_explicit & OPTION_MASK_DMF) == 0)
+    rs6000_isa_flags |= OPTION_MASK_DMF;
+
+  /* Turn off DMF options on non-future systems.  */
+  else if (!TARGET_FUTURE && TARGET_DMF)
+    {
+      if ((rs6000_isa_flags_explicit & OPTION_MASK_DMF) != 0)
+       error ("%qs requires %qs", "-mdense_math", "-mcpu=future");
+
+      rs6000_isa_flags &= ~OPTION_MASK_DMF;
+    }
+
   /* Enable power10 fusion if we are tuning for power10, even if we aren't
      generating power10 instructions.  */
   if (!(rs6000_isa_flags_explicit & OPTION_MASK_P10_FUSION))
@@ -24469,6 +24482,7 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
   { "power10",                 OPTION_MASK_POWER10,            false, true  },
   { "power11",                 OPTION_MASK_POWER11,            false, false },
   { "future",                  OPTION_MASK_FUTURE,             false, false },
+  { "dense-math",              OPTION_MASK_DMF,                false, true  },
   { "hard-dfp",                        OPTION_MASK_DFP,                false, 
true  },
   { "htm",                     OPTION_MASK_HTM,                false, true  },
   { "isel",                    OPTION_MASK_ISEL,               false, true  },
diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
index 2b6ec5222fc1..d9e9de92b21a 100644
--- a/gcc/config/rs6000/rs6000.opt
+++ b/gcc/config/rs6000/rs6000.opt
@@ -599,6 +599,10 @@ Target Undocumented Mask(POWER11) Var(rs6000_isa_flags) 
WarnRemoved
 mfuture
 Target Undocumented Mask(FUTURE) Var(rs6000_isa_flags) Warn(Do not use 
%<-mfuture>, use %<-mcpu=future>)
 
+mdense-math
+Target Mask(DMF) Var(rs6000_isa_flags)
+Generate (do not generate) DMF (Dense Math Facility) instructions.
+
 mprefixed
 Target Mask(PREFIXED) Var(rs6000_isa_flags)
 Generate (do not generate) prefixed memory instructions.
diff --git a/gcc/testsuite/gcc.target/powerpc/dmf-opt.c 
b/gcc/testsuite/gcc.target/powerpc/dmf-opt.c
new file mode 100644
index 000000000000..2f49ee6c2d73
--- /dev/null
+++ b/gcc/testsuite/gcc.target/powerpc/dmf-opt.c
@@ -0,0 +1,14 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target powerpc_future_compile_ok } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-mdejagnu-cpu=future -mdense-math -O2" } */
+
+void
+test1 (__vector_quad *dst)
+{
+  __vector_quad acc;
+  __builtin_mma_xxsetaccz (&acc);
+  *dst = acc;
+}
+
+/* { dg-final { scan-assembler-times {\mxxsetaccz\M} 1 } } */

Reply via email to