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 } } */
