https://gcc.gnu.org/g:213136a56382d41afbdea35ec59a089552610db4

commit 213136a56382d41afbdea35ec59a089552610db4
Author: Peter Bergner <berg...@linux.ibm.com>
Date:   Fri Apr 25 13:19:12 2025 -0500

    MMA+: Fix TARGET_DENSE_MATH usage

Diff:
---
 gcc/config/rs6000/mma.md        | 24 ++++++++++++------------
 gcc/config/rs6000/predicates.md |  2 +-
 gcc/config/rs6000/rs6000.cc     | 24 ++++++++++++------------
 gcc/config/rs6000/rs6000.h      |  4 +---
 4 files changed, 26 insertions(+), 28 deletions(-)

diff --git a/gcc/config/rs6000/mma.md b/gcc/config/rs6000/mma.md
index bc6631436274..8c47132e4901 100644
--- a/gcc/config/rs6000/mma.md
+++ b/gcc/config/rs6000/mma.md
@@ -352,7 +352,7 @@
 (define_insn_and_split "*movxo_nodm"
   [(set (match_operand:XO 0 "nonimmediate_operand" "=d,ZwO,d")
        (match_operand:XO 1 "input_operand" "ZwO,d,d"))]
-  "TARGET_MMA_NO_DENSE_MATH
+  "TARGET_MMA && !TARGET_DENSE_MATH
    && (gpc_reg_operand (operands[0], XOmode)
        || gpc_reg_operand (operands[1], XOmode))"
   "@
@@ -372,7 +372,7 @@
 (define_insn_and_split "*movxo_dm"
   [(set (match_operand:XO 0 "nonimmediate_operand" "=wa,ZwO,wa,wD,wD,wa")
        (match_operand:XO 1 "input_operand"        "ZwO,wa, wa,wa,wD,wD"))]
-  "TARGET_MMA_DENSE_MATH
+  "TARGET_DENSE_MATH
    && (gpc_reg_operand (operands[0], XOmode)
        || gpc_reg_operand (operands[1], XOmode))"
   "@
@@ -502,7 +502,7 @@
   [(set (match_operand:XO 0 "accumulator_operand" "=&wD")
        (unspec:XO [(match_operand:XO 1 "fpr_reg_operand" "0")]
                    MMA_ACC))]
-  "TARGET_MMA_NO_DENSE_MATH"
+  "TARGET_MMA && !TARGET_DENSE_MATH"
   "<acc> %A0"
   [(set_attr "type" "mma")])
 
@@ -527,7 +527,7 @@
   [(set (match_operand:XO 0 "fpr_reg_operand" "=d")
        (unspec_volatile:XO [(const_int 0)]
                            UNSPECV_MMA_XXSETACCZ))]
-  "TARGET_MMA_NO_DENSE_MATH"
+  "TARGET_MMA && !TARGET_DENSE_MATH"
   "xxsetaccz %A0"
   [(set_attr "type" "mma")])
 
@@ -535,7 +535,7 @@
   [(set (match_operand:XO 0 "accumulator_operand" "=wD")
        (unspec [(const_int 0)]
                UNSPEC_MMA_DMSETDMRZ))]
-  "TARGET_MMA_DENSE_MATH"
+  "TARGET_DENSE_MATH"
   "dmsetdmrz %A0"
   [(set_attr "type" "mma")])
 
@@ -760,7 +760,7 @@
 (define_expand "movtdo"
   [(set (match_operand:TDO 0 "nonimmediate_operand")
        (match_operand:TDO 1 "input_operand"))]
-  "TARGET_MMA_DENSE_MATH"
+  "TARGET_DENSE_MATH"
 {
   rs6000_emit_move (operands[0], operands[1], TDOmode);
   DONE;
@@ -769,7 +769,7 @@
 (define_insn_and_split "*movtdo"
   [(set (match_operand:TDO 0 "nonimmediate_operand" "=wa,m,wa,wD,wD,wa")
        (match_operand:TDO 1 "input_operand" "m,wa,wa,wa,wD,wD"))]
-  "TARGET_MMA_DENSE_MATH
+  "TARGET_DENSE_MATH
    && (gpc_reg_operand (operands[0], TDOmode)
        || gpc_reg_operand (operands[1], TDOmode))"
   "@
@@ -826,7 +826,7 @@
   [(set (match_operand:TDO 0 "dmr_operand" "=wD")
        (unspec:TDO [(match_operand:XO 1 "vsx_register_operand" "wa")]
                    UNSPEC_DM_INSERT512_UPPER))]
-  "TARGET_MMA_DENSE_MATH"
+  "TARGET_DENSE_MATH"
   "dmxxinstdmr512 %0,%1,%Y1,0"
   [(set_attr "type" "mma")])
 
@@ -835,7 +835,7 @@
        (unspec:TDO [(match_operand:TDO 1 "dmr_operand" "0")
                     (match_operand:XO 2 "vsx_register_operand" "wa")]
                    UNSPEC_DM_INSERT512_LOWER))]
-  "TARGET_MMA_DENSE_MATH"
+  "TARGET_DENSE_MATH"
   "dmxxinstdmr512 %0,%2,%Y2,1"
   [(set_attr "type" "mma")])
 
@@ -846,7 +846,7 @@
        (unspec:XO [(match_operand:TDO 1 "dmr_operand" "wD")
                    (match_operand 2 "const_0_to_1_operand" "n")]
                   UNSPEC_DM_EXTRACT512))]
-  "TARGET_MMA_DENSE_MATH"
+  "TARGET_DENSE_MATH"
   "dmxxextfdmr512 %0,%Y0,%1,%2"
   [(set_attr "type" "mma")])
 
@@ -856,7 +856,7 @@
        (unspec:TDO [(match_operand:TDO 1 "memory_operand" "m")]
                    UNSPEC_DMR_RELOAD_FROM_MEMORY))
    (clobber (match_operand:XO 2 "vsx_register_operand" "=wa"))]
-  "TARGET_MMA_DENSE_MATH"
+  "TARGET_DENSE_MATH"
   "#"
   "&& reload_completed"
   [(const_int 0)]
@@ -884,7 +884,7 @@
        (unspec:TDO [(match_operand:TDO 1 "dmr_operand" "wD")]
                    UNSPEC_DMR_RELOAD_TO_MEMORY))
    (clobber (match_operand:XO 2 "vsx_register_operand" "=wa"))]
-  "TARGET_MMA_DENSE_MATH"
+  "TARGET_DENSE_MATH"
   "#"
   "&& reload_completed"
   [(const_int 0)]
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index c95b4336f062..7086a518ab4d 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -213,7 +213,7 @@
     return 1;
 
   int r = REGNO (op);
-  return (TARGET_MMA_DENSE_MATH
+  return (TARGET_DENSE_MATH
          ? DMR_REGNO_P (r)
          : FP_REGNO_P (r) && (r & 3) == 0);
 })
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 7ac45d287d0b..73eda16af415 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -13618,7 +13618,7 @@ rs6000_preferred_reload_class (rtx x, enum reg_class 
rclass)
        return VSX_REGS;
 
       if (mode == XOmode)
-       return TARGET_MMA_DENSE_MATH ? VSX_REGS : FLOAT_REGS;
+       return TARGET_DENSE_MATH ? VSX_REGS : FLOAT_REGS;
 
       if (mode == TDOmode)
        return VSX_REGS;
@@ -13748,7 +13748,7 @@ rs6000_secondary_reload_class (enum reg_class rclass, 
machine_mode mode,
 
   /* DMR registers don't have loads or stores.  We have to go through the VSX
      registers to load XOmode (vector quad).  */
-  if (TARGET_MMA_DENSE_MATH && rclass == DM_REGS)
+  if (TARGET_DENSE_MATH && rclass == DM_REGS)
     return VSX_REGS;
 
   /* If we have VSX register moves, prefer moving scalar values between
@@ -14287,7 +14287,7 @@ print_operand (FILE *file, rtx x, int code)
         overlapping with the FPR registers.  */
       if (!REG_P (x))
        output_operand_lossage ("invalid %%A value");
-      else if (TARGET_MMA_DENSE_MATH)
+      else if (TARGET_DENSE_MATH)
        {
          if (DMR_REGNO_P (REGNO (x)))
            fprintf (file, "%d", REGNO (x) - FIRST_DMR_REGNO);
@@ -22933,7 +22933,7 @@ rs6000_dmr_register_move_cost (machine_mode mode, 
reg_class_t rclass)
   HARD_REG_SET vsx_set = (reg_class_contents[rclass]
                          & reg_class_contents[VSX_REGS]);
 
-  if (TARGET_MMA_DENSE_MATH && !hard_reg_set_empty_p (vsx_set))
+  if (TARGET_DENSE_MATH && !hard_reg_set_empty_p (vsx_set))
     {
       /* __vector_quad (i.e. XOmode) is tranfered in 1 instruction.  */
       if (mode == XOmode)
@@ -24292,7 +24292,7 @@ rs6000_compute_pressure_classes (enum reg_class 
*pressure_classes)
       if (TARGET_HARD_FLOAT)
        pressure_classes[n++] = FLOAT_REGS;
     }
-  if (TARGET_MMA_DENSE_MATH)
+  if (TARGET_DENSE_MATH)
     pressure_classes[n++] = DM_REGS;
   pressure_classes[n++] = CR_REGS;
   pressure_classes[n++] = SPECIAL_REGS;
@@ -27857,7 +27857,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 
          /* If we are reading an accumulator register, we have to deprime it
             before we can access it unless we have dense math registers.  */
-         if (TARGET_MMA_NO_DENSE_MATH
+         if (TARGET_MMA && !TARGET_DENSE_MATH
              && GET_MODE (src) == XOmode && FP_REGNO_P (REGNO (src)))
            emit_insn (gen_mma_xxmfacc (src, src));
 
@@ -27891,7 +27891,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 
          /* If we are writing an accumulator register, we have to prime it
             after we've written it unless we have dense math registers.  */
-         if (TARGET_MMA_NO_DENSE_MATH
+         if (TARGET_MMA && !TARGET_DENSE_MATH
              && GET_MODE (dst) == XOmode && FP_REGNO_P (REGNO (dst)))
            emit_insn (gen_mma_xxmtacc (dst, dst));
 
@@ -27905,7 +27905,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
                      || XINT (src, 1) == UNSPECV_MMA_ASSEMBLE);
          gcc_assert (REG_P (dst));
          if (GET_MODE (src) == XOmode)
-           gcc_assert ((TARGET_MMA_DENSE_MATH
+           gcc_assert ((TARGET_DENSE_MATH
                         ? VSX_REGNO_P (REGNO (dst))
                         : FP_REGNO_P (REGNO (dst))));
          if (GET_MODE (src) == OOmode)
@@ -27975,7 +27975,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
     {
       /* If we are reading an accumulator register, we have to deprime it
         before we can access it unless we have dense math registers.  */
-      if (TARGET_MMA_NO_DENSE_MATH
+      if (TARGET_MMA && !TARGET_DENSE_MATH
          && GET_MODE (src) == XOmode && FP_REGNO_P (REGNO (src)))
        emit_insn (gen_mma_xxmfacc (src, src));
 
@@ -28003,7 +28003,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 
       /* If we are writing an accumulator register, we have to prime it after
         we've written it unless we have dense math registers.  */
-      if (TARGET_MMA_NO_DENSE_MATH
+      if (TARGET_MMA && !TARGET_DENSE_MATH
          && GET_MODE (dst) == XOmode && FP_REGNO_P (REGNO (dst)))
        emit_insn (gen_mma_xxmtacc (dst, dst));
     }
@@ -28140,7 +28140,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 
       /* If we are reading an accumulator register, we have to deprime it
         before we can access it unless we have dense math registers.  */
-      if (TARGET_MMA_NO_DENSE_MATH && REG_P (src)
+      if (TARGET_MMA && !TARGET_DENSE_MATH && REG_P (src)
          && GET_MODE (src) == XOmode && FP_REGNO_P (REGNO (src)))
        emit_insn (gen_mma_xxmfacc (src, src));
 
@@ -28172,7 +28172,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 
       /* If we are writing an accumulator register, we have to prime it after
         we've written it unless we have dense math registers.  */
-      if (TARGET_MMA_NO_DENSE_MATH && REG_P (dst)
+      if (TARGET_MMA && !TARGET_DENSE_MATH && REG_P (dst)
          && GET_MODE (dst) == XOmode && FP_REGNO_P (REGNO (dst)))
        emit_insn (gen_mma_xxmtacc (dst, dst));
 
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 3b386ad0ef33..9fb008a9b9fa 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -575,9 +575,7 @@ extern int rs6000_vector_align[];
 
 /* Whether we have dense math support.  At present, we don't have a dense math
    ISA bit, just use the future bit set by -mcpu=future.  */
-#define TARGET_DENSE_MATH              TARGET_FUTURE
-#define TARGET_MMA_DENSE_MATH          (TARGET_MMA && TARGET_DENSE_MATH)
-#define TARGET_MMA_NO_DENSE_MATH       (TARGET_MMA && !TARGET_DENSE_MATH)
+#define TARGET_DENSE_MATH              (TARGET_FUTURE && TARGET_MMA)
 
 /* Inlining allows targets to define the meanings of bits in target_info
    field of ipa_fn_summary by itself, the used bits for rs6000 are listed

Reply via email to