public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/meissner/heads/dmf004)] Revert patches.
@ 2022-11-17 21:53 Michael Meissner
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Meissner @ 2022-11-17 21:53 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:4e2f44a6ed276b0d05025905af98d08c66e0892c

commit 4e2f44a6ed276b0d05025905af98d08c66e0892c
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Fri Nov 11 22:14:52 2022 -0500

    Revert patches.
    
    2022-11-11   Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            Revert patch.
            * config/rs6000/vsx.md (define_expand lxvl): If -mcpu=future, generate
              the lxvl with the shift count automaticaly used in the insn.
              (lxvrl): New insn for -mcpu=future.
              (lxvrll): Likewise.
              (define_expand lxvl): If -mcpu=future, generate the stxvl with the
              shift count automaticaly used in the insn.
              (stxvrl): New insn for -mcpu=future.
              (stxvrll): Likewise.
    
    2022-11-11   Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            Revert patch.
            * config/rs6000/rs6000-builtin.cc (rs6000_invalid_builtin): Add support
            for flagging invalid use of future built-in functions.
            (rs6000_builtin_is_supported): Add support for future built-in
            functions.
            * config/rs6000/rs6000-builtins.def (__builtin_saturate_subtract32): New
            built-in function for -mcpu=future.
            (__builtin_saturate_subtract64): Likewise.
            * config/rs6000/rs6000-gen-builtins.cc (enum bif_stanza): Add stanzas
            for -mcpu=future built-ins.
            (stanza_map): Likewise.
            (enable_string): Likewise.
            (struct attrinfo): Likewise.
            (parse_bif_attrs): Likewise.
            (write_decls): Likewise.
            * config/rs6000/rs6000.md (sat_sub<mode>3): Add saturating subtract
            built-in insn declarations.
            (sat_sub<mode>3_dot): Likewise.
            (sat_sub<mode>3_dot2): Likewise.
    
    gcc/testsuite/
    
            Revert patch.
            * gcc.target/powerpc/subfus-1.c: New test.
            * gcc.target/powerpc/subfus-2.c: Likewise.
            * lib/target-supports.exp (check_effective_target_powerpc_subfus_ok):
            New effective target.

Diff:
---
 gcc/config/rs6000/rs6000-builtin.cc         |  17 ----
 gcc/config/rs6000/rs6000-builtins.def       |  11 ---
 gcc/config/rs6000/rs6000-gen-builtins.cc    |  35 ++------
 gcc/config/rs6000/rs6000.md                 |  60 --------------
 gcc/config/rs6000/vsx.md                    | 122 +++++-----------------------
 gcc/testsuite/gcc.target/powerpc/subfus-1.c |  32 --------
 gcc/testsuite/gcc.target/powerpc/subfus-2.c |  32 --------
 gcc/testsuite/lib/target-supports.exp       |  16 ----
 8 files changed, 26 insertions(+), 299 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index 1ac00e4b26c..f4eba184db8 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -139,17 +139,6 @@ rs6000_invalid_builtin (enum rs6000_gen_builtins fncode)
     case ENB_MMA:
       error ("%qs requires the %qs option", name, "-mmma");
       break;
-    case ENB_FUTURE:
-      error ("%qs requires the %qs option", name, "-mcpu=future");
-      break;
-    case ENB_FUTURE_64:
-      error ("%qs requires the %qs option and either the %qs or %qs option",
-	     name, "-mcpu=future", "-m64", "-mpowerpc64");
-      break;
-    case ENB_DM:
-      error ("%qs requires the %qs or %qs options", name, "-mcpu=future",
-	     "-mdense-math");
-      break;
     default:
     case ENB_ALWAYS:
       gcc_unreachable ();
@@ -205,12 +194,6 @@ rs6000_builtin_is_supported (enum rs6000_gen_builtins fncode)
       return TARGET_HTM;
     case ENB_MMA:
       return TARGET_MMA;
-    case ENB_FUTURE:
-      return TARGET_FUTURE;
-    case ENB_FUTURE_64:
-      return TARGET_FUTURE && TARGET_POWERPC64;
-    case ENB_DM:
-      return TARGET_DENSE_MATH;
     default:
       gcc_unreachable ();
     }
diff --git a/gcc/config/rs6000/rs6000-builtins.def b/gcc/config/rs6000/rs6000-builtins.def
index ee141c1d99e..f76f54793d7 100644
--- a/gcc/config/rs6000/rs6000-builtins.def
+++ b/gcc/config/rs6000/rs6000-builtins.def
@@ -139,8 +139,6 @@
 ;   endian   Needs special handling for endianness
 ;   ibmld    Restrict usage to the case when TFmode is IBM-128
 ;   ibm128   Restrict usage to the case where __ibm128 is supported or if ibmld
-;   future   Restrict usage to future instructions
-;   dm       Restrict usage to dense math
 ;
 ; Each attribute corresponds to extra processing required when
 ; the built-in is expanded.  All such special processing should
@@ -4110,12 +4108,3 @@
 
   void __builtin_vsx_stxvp (v256, unsigned long, const v256 *);
     STXVP nothing {mma,pair}
-
-[future]
-  const signed int __builtin_saturate_subtract32 (signed int, signed int);
-  SAT_SUBSI sat_subsi3 {}
-
-[future-64]
-  const signed long __builtin_saturate_subtract64 (signed long, signed long);
-  SAT_SUBDI sat_subdi3 {}
-
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.cc b/gcc/config/rs6000/rs6000-gen-builtins.cc
index f4020141243..0bd7a535e5f 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.cc
+++ b/gcc/config/rs6000/rs6000-gen-builtins.cc
@@ -233,9 +233,6 @@ enum bif_stanza
  BSTZ_P10,
  BSTZ_P10_64,
  BSTZ_MMA,
- BSTZ_FUTURE,
- BSTZ_FUTURE_64,
- BSTZ_DM,
  NUMBIFSTANZAS
 };
 
@@ -269,10 +266,7 @@ static stanza_entry stanza_map[NUMBIFSTANZAS] =
     { "htm",		BSTZ_HTM	},
     { "power10",	BSTZ_P10	},
     { "power10-64",	BSTZ_P10_64	},
-    { "mma",		BSTZ_MMA	},
-    { "future",		BSTZ_FUTURE	},
-    { "future-64",	BSTZ_FUTURE_64	},
-    { "dm",		BSTZ_DM		},
+    { "mma",		BSTZ_MMA	}
   };
 
 static const char *enable_string[NUMBIFSTANZAS] =
@@ -297,10 +291,7 @@ static const char *enable_string[NUMBIFSTANZAS] =
     "ENB_HTM",
     "ENB_P10",
     "ENB_P10_64",
-    "ENB_MMA",
-    "ENB_FUTURE",
-    "ENB_FUTURE_64",
-    "ENB_DM",
+    "ENB_MMA"
   };
 
 /* Function modifiers provide special handling for const, pure, and fpmath
@@ -404,8 +395,6 @@ struct attrinfo
   bool isendian;
   bool isibmld;
   bool isibm128;
-  bool isfuture;
-  bool isdm;
 };
 
 /* Fields associated with a function prototype (bif or overload).  */
@@ -1488,8 +1477,7 @@ parse_bif_attrs (attrinfo *attrptr)
 	"ldvec = %d, stvec = %d, reve = %d, pred = %d, htm = %d, "
 	"htmspr = %d, htmcr = %d, mma = %d, quad = %d, pair = %d, "
 	"mmaint = %d, no32bit = %d, 32bit = %d, cpu = %d, ldstmask = %d, "
-	"lxvrse = %d, lxvrze = %d, endian = %d, ibmdld = %d, ibm128 = %d,",
-	"future = %d, dm = %d.\n",
+	"lxvrse = %d, lxvrze = %d, endian = %d, ibmdld = %d, ibm128 = %d.\n",
 	attrptr->isinit, attrptr->isset, attrptr->isextract,
 	attrptr->isnosoft, attrptr->isldvec, attrptr->isstvec,
 	attrptr->isreve, attrptr->ispred, attrptr->ishtm, attrptr->ishtmspr,
@@ -1497,7 +1485,7 @@ parse_bif_attrs (attrinfo *attrptr)
 	attrptr->ismmaint, attrptr->isno32bit, attrptr->is32bit,
 	attrptr->iscpu, attrptr->isldstmask, attrptr->islxvrse,
 	attrptr->islxvrze, attrptr->isendian, attrptr->isibmld,
-	attrptr->isibm128, attrptr->isfuture, attrptr->isdm);
+	attrptr->isibm128);
 #endif
 
   return PC_OK;
@@ -2269,10 +2257,7 @@ write_decls (void)
   fprintf (header_file, "  ENB_HTM,\n");
   fprintf (header_file, "  ENB_P10,\n");
   fprintf (header_file, "  ENB_P10_64,\n");
-  fprintf (header_file, "  ENB_MMA,\n");
-  fprintf (header_file, "  ENB_FUTURE,\n");
-  fprintf (header_file, "  ENB_FUTURE_64,\n");
-  fprintf (header_file, "  ENB_DM\n");
+  fprintf (header_file, "  ENB_MMA\n");
   fprintf (header_file, "};\n\n");
 
   fprintf (header_file, "#define PPC_MAXRESTROPNDS 3\n");
@@ -2316,8 +2301,6 @@ write_decls (void)
   fprintf (header_file, "#define bif_endian_bit\t\t(0x00200000)\n");
   fprintf (header_file, "#define bif_ibmld_bit\t\t(0x00400000)\n");
   fprintf (header_file, "#define bif_ibm128_bit\t\t(0x00800000)\n");
-  fprintf (header_file, "#define bif_future_bit\t\t(0x01000000)\n");
-  fprintf (header_file, "#define bif_dm_bit\t\t(0x02000000)\n");
   fprintf (header_file, "\n");
   fprintf (header_file,
 	   "#define bif_is_init(x)\t\t((x).bifattrs & bif_init_bit)\n");
@@ -2367,10 +2350,6 @@ write_decls (void)
 	   "#define bif_is_ibmld(x)\t((x).bifattrs & bif_ibmld_bit)\n");
   fprintf (header_file,
 	   "#define bif_is_ibm128(x)\t((x).bifattrs & bif_ibm128_bit)\n");
-  fprintf (header_file,
-	   "#define bif_is_future(x)\t((x).bifattrs & bif_future_bit)\n");
-  fprintf (header_file,
-	   "#define bif_is_dm(x)\t((x).bifattrs & bif_dm_bit)\n");
   fprintf (header_file, "\n");
 
   fprintf (header_file,
@@ -2569,10 +2548,6 @@ write_bif_static_init (void)
 	fprintf (init_file, " | bif_ibmld_bit");
       if (bifp->attrs.isibm128)
 	fprintf (init_file, " | bif_ibm128_bit");
-      if (bifp->attrs.isfuture)
-	fprintf (init_file, " | bif_future_bit");
-      if (bifp->attrs.isdm)
-	fprintf (init_file, " | bif_dm_bit");
       fprintf (init_file, ",\n");
       fprintf (init_file, "      /* restr_opnd */\t{%d, %d, %d},\n",
 	       bifp->proto.restr_opnd[0], bifp->proto.restr_opnd[1],
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index e9dfb138603..4a5007dc539 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -15499,66 +15499,6 @@
 }
   [(set_attr "type" "load")])
 \f
-;; Signed saturation.
-
-;; The subfus instruction is defined as: SUBFUS RT,L,RA,RB.  The extended
-;; mnemonic that we use (subdus and subwus) has the arguments RA and RB
-;; reversed (so it becomes a subtract instead of subtract from).
-
-(define_insn "sat_sub<mode>3"
-  [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
-	(ss_minus:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
-		      (match_operand:GPR 2 "gpc_reg_operand" "r")))]
-  "TARGET_FUTURE"
-  "sub<wd>us %0,%1,%2"
-  [(set_attr "type" "add")])
-
-(define_insn_and_split "*sat_sub<mode>3_dot"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
-	(compare:CC (ss_minus:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r")
-				  (match_operand:GPR 2 "gpc_reg_operand" "r,r"))
-		    (const_int 0)))
-   (clobber (match_scratch:GPR 0 "=r,r"))]
-  "TARGET_FUTURE"
-  "@
-   sub<wd>us. %0,%1,%2
-   #"
-  "&& reload_completed && cc_reg_not_cr0_operand (operands[3], CCmode)"
-  [(set (match_dup 0)
-	(ss_minus:GPR (match_dup 1)
-		      (match_dup 2)))
-   (set (match_dup 3)
-	(compare:CC (match_dup 0)
-		    (const_int 0)))]
-  ""
-  [(set_attr "type" "add")
-   (set_attr "dot" "yes")
-   (set_attr "length" "4,8")])
-
-(define_insn_and_split "*sat_sub<mode>3_dot2"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
-	(compare:CC (ss_minus:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r")
-				  (match_operand:GPR 2 "gpc_reg_operand" "r,r"))
-		    (const_int 0)))
-   (set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
-	(ss_minus:GPR (match_dup 1)
-		      (match_dup 2)))]
-  "TARGET_FUTURE"
-  "@
-   sub<wd>us. %0,%1,%2
-   #"
-  "&& reload_completed && cc_reg_not_cr0_operand (operands[3], CCmode)"
-  [(set (match_dup 0)
-	(ss_minus:GPR (match_dup 1)
-		      (match_dup 2)))
-   (set (match_dup 3)
-	(compare:CC (match_dup 0)
-		    (const_int 0)))]
-  ""
-  [(set_attr "type" "add")
-   (set_attr "dot" "yes")
-   (set_attr "length" "4,8")])
-\f
 
 (include "sync.md")
 (include "vector.md")
diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
index e4e73db9bb8..fb5cf04147e 100644
--- a/gcc/config/rs6000/vsx.md
+++ b/gcc/config/rs6000/vsx.md
@@ -5582,32 +5582,20 @@
   DONE;
 })
 
-;; Load VSX Vector with Length.  If we have lxvrl, we don't have to do an
-;; explicit shift left into a pseudo.
+;; Load VSX Vector with Length
 (define_expand "lxvl"
-  [(use (match_operand:V16QI 0 "vsx_register_operand"))
-   (use (match_operand:DI 1 "gpc_reg_operand"))
-   (use (match_operand:DI 2 "gpc_reg_operand"))]
+  [(set (match_dup 3)
+        (ashift:DI (match_operand:DI 2 "register_operand")
+                   (const_int 56)))
+   (set (match_operand:V16QI 0 "vsx_register_operand")
+	(unspec:V16QI
+	 [(match_operand:DI 1 "gpc_reg_operand")
+          (mem:V16QI (match_dup 1))
+	  (match_dup 3)]
+	 UNSPEC_LXVL))]
   "TARGET_P9_VECTOR && TARGET_64BIT"
 {
-  rtx shift_len = gen_rtx_ASHIFT (DImode, operands[2], GEN_INT (56));
-  rtx len;
-
-  if (TARGET_FUTURE)
-    len = shift_len;
-  else
-    {
-      len = gen_reg_rtx (DImode);
-      emit_insn (gen_rtx_SET (len, shift_len));
-    }
-
-  rtx dest = operands[0];
-  rtx addr = operands[1];
-  rtx mem = gen_rtx_MEM (V16QImode, addr);
-  rtvec rv = gen_rtvec (3, addr, mem, len);
-  rtx lxvl = gen_rtx_UNSPEC (V16QImode, rv, UNSPEC_LXVL);
-  emit_insn (gen_rtx_SET (dest, lxvl));
-  DONE;
+  operands[3] = gen_reg_rtx (DImode);
 })
 
 (define_insn "*lxvl"
@@ -5631,34 +5619,6 @@
   "lxvll %x0,%1,%2"
   [(set_attr "type" "vecload")])
 
-;; For lxvrl and lxvrll, use the combiner to eliminate the shift.  The
-;; define_expand for lxvl will already incorporate the shift in generating the
-;; insn.  The lxvll buitl-in function required the user to have already done
-;; the shift.  Defining lxvrll this way, will optimize cases where the user has
-;; done the shift immediately before the built-in.
-(define_insn "*lxvrl"
-  [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
-	(unspec:V16QI
-	 [(match_operand:DI 1 "gpc_reg_operand" "b")
-	  (mem:V16QI (match_dup 1))
-	  (ashift:DI (match_operand:DI 2 "register_operand" "r")
-		     (const_int 56))]
-	 UNSPEC_LXVL))]
-  "TARGET_FUTURE && TARGET_64BIT"
-  "lxvrl %x0,%1,%2"
-  [(set_attr "type" "vecload")])
-
-(define_insn "*lxvrll"
-  [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
-	(unspec:V16QI [(match_operand:DI 1 "gpc_reg_operand" "b")
-                       (mem:V16QI (match_dup 1))
-		       (ashift:DI (match_operand:DI 2 "register_operand" "r")
-				  (const_int 56))]
-		      UNSPEC_LXVLL))]
-  "TARGET_FUTURE"
-  "lxvrll %x0,%1,%2"
-  [(set_attr "type" "vecload")])
-
 ;; Expand for builtin xl_len_r
 (define_expand "xl_len_r"
   [(match_operand:V16QI 0 "vsx_register_operand")
@@ -5690,29 +5650,18 @@
 
 ;; Store VSX Vector with Length
 (define_expand "stxvl"
-  [(use (match_operand:V16QI 0 "vsx_register_operand"))
-   (use (match_operand:DI 1 "gpc_reg_operand"))
-   (use (match_operand:DI 2 "gpc_reg_operand"))]
+  [(set (match_dup 3)
+	(ashift:DI (match_operand:DI 2 "register_operand")
+		   (const_int 56)))
+   (set (mem:V16QI (match_operand:DI 1 "gpc_reg_operand"))
+	(unspec:V16QI
+	 [(match_operand:V16QI 0 "vsx_register_operand")
+	  (mem:V16QI (match_dup 1))
+	  (match_dup 3)]
+	 UNSPEC_STXVL))]
   "TARGET_P9_VECTOR && TARGET_64BIT"
 {
-  rtx shift_len = gen_rtx_ASHIFT (DImode, operands[2], GEN_INT (56));
-  rtx len;
-
-  if (TARGET_FUTURE)
-    len = shift_len;
-  else
-    {
-      len = gen_reg_rtx (DImode);
-      emit_insn (gen_rtx_SET (len, shift_len));
-    }
-
-  rtx src = operands[0];
-  rtx addr = operands[1];
-  rtx mem = gen_rtx_MEM (V16QImode, addr);
-  rtvec rv = gen_rtvec (3, src, mem, len);
-  rtx stxvl = gen_rtx_UNSPEC (V16QImode, rv, UNSPEC_STXVL);
-  emit_insn (gen_rtx_SET (mem, stxvl));
-  DONE;
+  operands[3] = gen_reg_rtx (DImode);
 })
 
 ;; Define optab for vector access with length vectorization exploitation.
@@ -5756,35 +5705,6 @@
   "stxvl %x0,%1,%2"
   [(set_attr "type" "vecstore")])
 
-;; For stxvrl and stxvrll, use the combiner to eliminate the shift.  The
-;; define_expand for stxvl will already incorporate the shift in generating the
-;; insn.  The stxvll buitl-in function required the user to have already done
-;; the shift.  Defining stxvrll this way, will optimize cases where the user
-;; has done the shift immediately before the built-in.
-
-(define_insn "*stxvrl"
-  [(set (mem:V16QI (match_operand:DI 1 "gpc_reg_operand" "b"))
-	(unspec:V16QI
-	 [(match_operand:V16QI 0 "vsx_register_operand" "wa")
-	  (mem:V16QI (match_dup 1))
-	  (ashift:DI (match_operand:DI 2 "register_operand" "r")
-		     (const_int 56))]
-	 UNSPEC_STXVL))]
-  "TARGET_FUTURE && TARGET_64BIT"
-  "stxvrl %x0,%1,%2"
-  [(set_attr "type" "vecstore")])
-
-(define_insn "*stxvrll"
-  [(set (mem:V16QI (match_operand:DI 1 "gpc_reg_operand" "b"))
-	(unspec:V16QI [(match_operand:V16QI 0 "vsx_register_operand" "wa")
-		       (mem:V16QI (match_dup 1))
-		       (ashift:DI (match_operand:DI 2 "register_operand" "r")
-				  (const_int 56))]
-	              UNSPEC_STXVLL))]
-  "TARGET_FUTURE"
-  "stxvrll %x0,%1,%2"
-  [(set_attr "type" "vecstore")])
-
 ;; Expand for builtin xst_len_r
 (define_expand "xst_len_r"
   [(match_operand:V16QI 0 "vsx_register_operand" "=wa")
diff --git a/gcc/testsuite/gcc.target/powerpc/subfus-1.c b/gcc/testsuite/gcc.target/powerpc/subfus-1.c
deleted file mode 100644
index 68007e96cce..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/subfus-1.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_subfus_ok } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Test whether the saturating subtract built-in generates subwus for 32-bit
-   subtracts.  */
-
-int do_sat_int  (int  a, int  b)
-{
-  return __builtin_saturate_subtract32 (a, b);		/* subwus  */
-}
-
-int do_sat_int_dot  (int  a, int  b, int  *p)
-{
-  int  r = __builtin_saturate_subtract32 (a, b);	/* subwus.  */
-  if (r == 0)
-    *p = 0;
-
-  return r;
-}
-
-void do_sat_int_dot2  (int  a, int  b, int  *p, int *q)
-{
-  if (__builtin_saturate_subtract32 (a, b))		/* subwus.  */
-    *p = 0;
-
-  *q = a + b;
-  return;
-}
-
-/* { dg-final { scan-assembler     {\msubwus\M} } } */
-/* { dg-final { scan-assembler-not {\msubf\M}   } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/subfus-2.c b/gcc/testsuite/gcc.target/powerpc/subfus-2.c
deleted file mode 100644
index 56e6d237900..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/subfus-2.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* { dg-do compile { target lp64 } } */
-/* { dg-require-effective-target powerpc_subfus_ok } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Test whether the saturating subtract built-in generates subwus for 64-bit
-   subtracts.  */
-
-long do_sat_long  (long  a, long  b)
-{
-  return __builtin_saturate_subtract64 (a, b);		/* subwus  */
-}
-
-long do_sat_long_dot  (long  a, long  b, long  *p)
-{
-  long  r = __builtin_saturate_subtract64 (a, b);	/* subwus.  */
-  if (r == 0)
-    *p = 0;
-
-  return r;
-}
-
-void do_sat_long_dot2  (long  a, long  b, long  *p, long *q)
-{
-  if (__builtin_saturate_subtract64 (a, b))		/* subwus.  */
-    *p = 0;
-
-  *q = a + b;
-  return;
-}
-
-/* { dg-final { scan-assembler     {\msubdus\M} } } */
-/* { dg-final { scan-assembler-not {\msubf\M}   } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 8af840d1d3b..b70ebf963f9 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -6553,22 +6553,6 @@ proc check_effective_target_powerpc_dense_math_ok { } {
 	} "-mcpu=future"]
 }
 
-# Return 1 if this is a PowerPC target supporting -mcpu=future which enables
-# the saturating subtract instruction.
-proc check_effective_target_powerpc_subfus_ok { } {
-	return [check_no_compiler_messages_nocache powerpc_subfus_ok assembly {
-		int test (int a, int b)
-		{
-		#ifndef _ARCH_PWR_FUTURE
-		#error "target does not have saturating subtract support."
-		#else
-		/* Make sure we have saturating subtract support.  */
-		  return __builtin_saturate_subtract32 (a, b);
-		#endif
-		}
-	} "-mcpu=future"]
-}
-
 # Return 1 if this is a PowerPC target supporting -mfloat128 via either
 # software emulation on power7/power8 systems or hardware support on power9.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [gcc(refs/users/meissner/heads/dmf004)] Revert patches.
@ 2022-11-17 21:53 Michael Meissner
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Meissner @ 2022-11-17 21:53 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:781e3b56462576ae0e650f6736da308d1bbd2f2e

commit 781e3b56462576ae0e650f6736da308d1bbd2f2e
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Wed Nov 9 17:34:20 2022 -0500

    Revert patches.
    
    gcc/
    
            Revert patches.
            * config/rs6000/mma.md (UNSPEC_DM_INSERT512_UPPER): New unspec.
            (UNSPEC_DM_INSERT512_LOWER): Likewise.
            (UNSPEC_DM_EXTRACT512): Likewise.
            (UNSPEC_DMR_RELOAD_FROM_MEMORY): Likewise.
            (UNSPEC_DMR_RELOAD_TO_MEMORY): Likewise.
            (movtdo): New define_expand and define_insn_and_split to implement 1,024
            bit DMR registers.
            (movtdo_insert512_upper): New insn.
            (movtdo_insert512_lower): Likewise.
            (movtdo_extract512): Likewise.
            (reload_dmr_from_memory): Likewise.
            (reload_dmr_to_memory): Likewise.
            * config/rs6000/rs6000-builtin.cc (rs6000_type_string): Add DMR
            support.
            (rs6000_init_builtins): Add support for __dmr keyword.
            * config/rs6000/rs6000-call.cc (rs6000_return_in_memory): Add support
            for TDOmode.
            (rs6000_function_arg): Likewise.
            * config/rs6000/rs6000-modes.def (TDOmode): New mode.
            * config/rs6000/rs6000.cc (rs6000_hard_regno_nregs_internal): Add
            support for TDOmode.
            (rs6000_hard_regno_mode_ok_uncached): Likewise.
            (rs6000_hard_regno_mode_ok): Likewise.
            (rs6000_modes_tieable_p): Likewise.
            (rs6000_debug_reg_global): Likewise.
            (rs6000_setup_reg_addr_masks): Likewise.
            (rs6000_init_hard_regno_mode_ok): Add support for TDOmode.  Setup reload
            hooks for DMR mode.
            (reg_offset_addressing_ok_p): Add support for TDOmode.
            (rs6000_emit_move): Likewise.
            (rs6000_secondary_reload_simple_move): Likewise.
            (rs6000_secondary_reload_class): Likewise.
            (rs6000_mangle_type): Add mangling for __dmr type.
            (rs6000_dmr_register_move_cost): Add support for TDOmode.
            (rs6000_split_multireg_move): Likewise.
            (rs6000_invalid_conversion): Likewise.
            * config/rs6000/rs6000.h (VECTOR_ALIGNMENT_P): Add TDOmode.
            (enum rs6000_builtin_type_index): Add DMR type nodes.
            (dmr_type_node): Likewise.
            (ptr_dmr_type_node): Likewise.
    
    gcc/testsuite/
    
            Revert patches.
            * gcc.target/powerpc/dm-1024bit.c: New test.
    
    gcc/
    
            Revert patches.
            * config/rs6000/mma.md (vvi4i4i8_dm): New int attribute.
            (avvi4i4i8_dm): Likewise.
            (vvi4i4i2_dm): Likewise.
            (avvi4i4i2_dm): Likewise.
            (vvi4i4_dm): Likewise.
            (avvi4i4_dm): Likewise.
            (pvi4i2_dm): Likewise.
            (apvi4i2_dm): Likewise.
            (vvi4i4i4_dm): Likewise.
            (avvi4i4i4_dm): Likewise.
            (mma_<vv>): Add support for running on DMF systems, generating the dense
            math instruction and using the dense math accumulators.
            (mma_<avv>): Likewise.
            (mma_<pv>): Likewise.
            (mma_<apv>): Likewise.
            (mma_<vvi4i4i8>): Likewise.
            (mma_<avvi4i4i8>): Likewise.
            (mma_<vvi4i4i2>): Likewise.
            (mma_<avvi4i4i2>): Likewise.
            (mma_<vvi4i4>): Likewise.
            (mma_<avvi4i4): Likewise.
            (mma_<pvi4i2>): Likewise.
            (mma_<apvi4i2): Likewise.
            (mma_<vvi4i4i4>): Likewise.
            (mma_<avvi4i4i4>): Likewise.
    
    gcc/testsuite/
    
            Revert patches.
            * gcc.target/powerpc/dm-double-test.c: New test.
            * lib/target-supports.exp (check_effective_target_ppc_dmr_ok): New
            target test.

Diff:
---
 gcc/config/rs6000/mma.md                          | 250 ++--------------------
 gcc/config/rs6000/rs6000-builtin.cc               |  13 --
 gcc/config/rs6000/rs6000-call.cc                  |  13 +-
 gcc/config/rs6000/rs6000-modes.def                |   4 -
 gcc/config/rs6000/rs6000.cc                       | 125 +++--------
 gcc/config/rs6000/rs6000.h                        |   7 +-
 gcc/testsuite/gcc.target/powerpc/dm-1024bit.c     |  68 ------
 gcc/testsuite/gcc.target/powerpc/dm-double-test.c | 194 -----------------
 gcc/testsuite/lib/target-supports.exp             |  19 --
 9 files changed, 44 insertions(+), 649 deletions(-)

diff --git a/gcc/config/rs6000/mma.md b/gcc/config/rs6000/mma.md
index 2c08ad7619a..835f34e8e00 100644
--- a/gcc/config/rs6000/mma.md
+++ b/gcc/config/rs6000/mma.md
@@ -92,11 +92,6 @@
    UNSPEC_MMA_XXMFACC
    UNSPEC_MMA_XXMTACC
    UNSPEC_DM_ASSEMBLE_ACC
-   UNSPEC_DM_INSERT512_UPPER
-   UNSPEC_DM_INSERT512_LOWER
-   UNSPEC_DM_EXTRACT512
-   UNSPEC_DMR_RELOAD_FROM_MEMORY
-   UNSPEC_DMR_RELOAD_TO_MEMORY
   ])
 
 (define_c_enum "unspecv"
@@ -232,22 +227,13 @@
 
 (define_int_attr vvi4i4i8	[(UNSPEC_MMA_PMXVI4GER8		"pmxvi4ger8")])
 
-(define_int_attr vvi4i4i8_dm	[(UNSPEC_MMA_PMXVI4GER8		"pmdmxvi4ger8")])
-
 (define_int_attr avvi4i4i8	[(UNSPEC_MMA_PMXVI4GER8PP	"pmxvi4ger8pp")])
 
-(define_int_attr avvi4i4i8_dm	[(UNSPEC_MMA_PMXVI4GER8PP	"pmdmxvi4ger8pp")])
-
 (define_int_attr vvi4i4i2	[(UNSPEC_MMA_PMXVI16GER2	"pmxvi16ger2")
 				 (UNSPEC_MMA_PMXVI16GER2S	"pmxvi16ger2s")
 				 (UNSPEC_MMA_PMXVF16GER2	"pmxvf16ger2")
 				 (UNSPEC_MMA_PMXVBF16GER2	"pmxvbf16ger2")])
 
-(define_int_attr vvi4i4i2_dm	[(UNSPEC_MMA_PMXVI16GER2	"pmdmxvi16ger2")
-				 (UNSPEC_MMA_PMXVI16GER2S	"pmdmxvi16ger2s")
-				 (UNSPEC_MMA_PMXVF16GER2	"pmdmxvf16ger2")
-				 (UNSPEC_MMA_PMXVBF16GER2	"pmdmxvbf16ger2")])
-
 (define_int_attr avvi4i4i2	[(UNSPEC_MMA_PMXVI16GER2PP	"pmxvi16ger2pp")
 				 (UNSPEC_MMA_PMXVI16GER2SPP	"pmxvi16ger2spp")
 				 (UNSPEC_MMA_PMXVF16GER2PP	"pmxvf16ger2pp")
@@ -259,54 +245,25 @@
 				 (UNSPEC_MMA_PMXVBF16GER2NP	"pmxvbf16ger2np")
 				 (UNSPEC_MMA_PMXVBF16GER2NN	"pmxvbf16ger2nn")])
 
-(define_int_attr avvi4i4i2_dm	[(UNSPEC_MMA_PMXVI16GER2PP	"pmdmxvi16ger2pp")
-				 (UNSPEC_MMA_PMXVI16GER2SPP	"pmdmxvi16ger2spp")
-				 (UNSPEC_MMA_PMXVF16GER2PP	"pmdmxvf16ger2pp")
-				 (UNSPEC_MMA_PMXVF16GER2PN	"pmdmxvf16ger2pn")
-				 (UNSPEC_MMA_PMXVF16GER2NP	"pmdmxvf16ger2np")
-				 (UNSPEC_MMA_PMXVF16GER2NN	"pmdmxvf16ger2nn")
-				 (UNSPEC_MMA_PMXVBF16GER2PP	"pmdmxvbf16ger2pp")
-				 (UNSPEC_MMA_PMXVBF16GER2PN	"pmdmxvbf16ger2pn")
-				 (UNSPEC_MMA_PMXVBF16GER2NP	"pmdmxvbf16ger2np")
-				 (UNSPEC_MMA_PMXVBF16GER2NN	"pmdmxvbf16ger2nn")])
-
 (define_int_attr vvi4i4		[(UNSPEC_MMA_PMXVF32GER		"pmxvf32ger")])
 
-(define_int_attr vvi4i4_dm	[(UNSPEC_MMA_PMXVF32GER		"pmdmxvf32ger")])
-
 (define_int_attr avvi4i4	[(UNSPEC_MMA_PMXVF32GERPP	"pmxvf32gerpp")
 				 (UNSPEC_MMA_PMXVF32GERPN	"pmxvf32gerpn")
 				 (UNSPEC_MMA_PMXVF32GERNP	"pmxvf32gernp")
 				 (UNSPEC_MMA_PMXVF32GERNN	"pmxvf32gernn")])
 
-(define_int_attr avvi4i4_dm	[(UNSPEC_MMA_PMXVF32GERPP	"pmdmxvf32gerpp")
-				 (UNSPEC_MMA_PMXVF32GERPN	"pmdmxvf32gerpn")
-				 (UNSPEC_MMA_PMXVF32GERNP	"pmdmxvf32gernp")
-				 (UNSPEC_MMA_PMXVF32GERNN	"pmdmxvf32gernn")])
-
 (define_int_attr pvi4i2		[(UNSPEC_MMA_PMXVF64GER		"pmxvf64ger")])
 
-(define_int_attr pvi4i2_dm	[(UNSPEC_MMA_PMXVF64GER		"pmdmxvf64ger")])
-
 (define_int_attr apvi4i2	[(UNSPEC_MMA_PMXVF64GERPP	"pmxvf64gerpp")
 				 (UNSPEC_MMA_PMXVF64GERPN	"pmxvf64gerpn")
 				 (UNSPEC_MMA_PMXVF64GERNP	"pmxvf64gernp")
 				 (UNSPEC_MMA_PMXVF64GERNN	"pmxvf64gernn")])
 
-(define_int_attr apvi4i2_dm	[(UNSPEC_MMA_PMXVF64GERPP	"pmdmxvf64gerpp")
-				 (UNSPEC_MMA_PMXVF64GERPN	"pmdmxvf64gerpn")
-				 (UNSPEC_MMA_PMXVF64GERNP	"pmdmxvf64gernp")
-				 (UNSPEC_MMA_PMXVF64GERNN	"pmdmxvf64gernn")])
-
 (define_int_attr vvi4i4i4	[(UNSPEC_MMA_PMXVI8GER4		"pmxvi8ger4")])
 
-(define_int_attr vvi4i4i4_dm	[(UNSPEC_MMA_PMXVI8GER4		"pmdmxvi8ger4")])
-
 (define_int_attr avvi4i4i4	[(UNSPEC_MMA_PMXVI8GER4PP	"pmxvi8ger4pp")
 				 (UNSPEC_MMA_PMXVI8GER4SPP	"pmxvi8ger4spp")])
 
-(define_int_attr avvi4i4i4_dm	[(UNSPEC_MMA_PMXVI8GER4PP	"pmdmxvi8ger4pp")
-				 (UNSPEC_MMA_PMXVI8GER4SPP	"pmdmxvi8ger4spp")])
 
 ;; Vector pair support.  OOmode can only live in VSRs.
 (define_expand "movoo"
@@ -658,10 +615,7 @@
 		    (match_operand:V16QI 2 "vsx_register_operand" "wa,v,?wa")]
 		    MMA_VV))]
   "TARGET_MMA"
-  "@
-   dm<vv> %A0,%x1,%x2
-   <vv> %A0,%x1,%x2
-   <vv> %A0,%x1,%x2"
+  "<vv> %A0,%x1,%x2"
   [(set_attr "type" "mma")
    (set_attr "isa" "dm,not_dm,not_dm")])
 
@@ -682,10 +636,7 @@
 		    (match_operand:V16QI 2 "vsx_register_operand" "wa,v,?wa")]
 		    MMA_PV))]
   "TARGET_MMA"
-  "@
-   dm<pv> %A0,%x1,%x2
-   <pv> %A0,%x1,%x2
-   <pv> %A0,%x1,%x2"
+  "<pv> %A0,%x1,%x2"
   [(set_attr "type" "mma")
    (set_attr "isa" "dm,not_dm,not_dm")])
 
@@ -696,10 +647,7 @@
 		    (match_operand:V16QI 3 "vsx_register_operand" "wa,v,?wa")]
 		    MMA_APV))]
   "TARGET_MMA"
-  "@
-   dm<apv> %A0,%x2,%x3
-   <apv> %A0,%x2,%x3
-   <apv> %A0,%x2,%x3"
+  "<apv> %A0,%x2,%x3"
   [(set_attr "type" "mma")
    (set_attr "isa" "dm,not_dm,not_dm")])
 
@@ -712,10 +660,7 @@
 		    (match_operand:SI 5 "u8bit_cint_operand" "n,n,n")]
 		    MMA_VVI4I4I8))]
   "TARGET_MMA"
-  "@
-   dm<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i8> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"
+  "<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -744,10 +689,7 @@
 		    (match_operand:SI 5 "const_0_to_3_operand" "n,n,n")]
 		    MMA_VVI4I4I2))]
   "TARGET_MMA"
-  "@
-   <vvi4i4i2_dm> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i2> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i2> %A0,%x1,%x2,%3,%4,%5"
+  "<vvi4i4i2> %A0,%x1,%x2,%3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -762,10 +704,7 @@
 		    (match_operand:SI 6 "const_0_to_3_operand" "n,n,n")]
 		    MMA_AVVI4I4I2))]
   "TARGET_MMA"
-  "@
-   <avvi4i4i2_dm> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i2> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i2> %A0,%x2,%x3,%4,%5,%6"
+  "<avvi4i4i2> %A0,%x2,%x3,%4,%5,%6"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -778,10 +717,7 @@
 		    (match_operand:SI 4 "const_0_to_15_operand" "n,n,n")]
 		    MMA_VVI4I4))]
   "TARGET_MMA"
-  "@
-   <vvi4i4_dm> %A0,%x1,%x2,%3,%4
-   <vvi4i4> %A0,%x1,%x2,%3,%4
-   <vvi4i4> %A0,%x1,%x2,%3,%4"
+  "<vvi4i4> %A0,%x1,%x2,%3,%4"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -795,10 +731,7 @@
 		    (match_operand:SI 5 "const_0_to_15_operand" "n,n,n")]
 		    MMA_AVVI4I4))]
   "TARGET_MMA"
-  "@
-   <avvi4i4_dm> %A0,%x2,%x3,%4,%5
-   <avvi4i4> %A0,%x2,%x3,%4,%5
-   <avvi4i4> %A0,%x2,%x3,%4,%5"
+  "<avvi4i4> %A0,%x2,%x3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -811,10 +744,7 @@
 		    (match_operand:SI 4 "const_0_to_3_operand" "n,n,n")]
 		    MMA_PVI4I2))]
   "TARGET_MMA"
-  "@
-   <pvi4i2_dm> %A0,%x1,%x2,%3,%4
-   <pvi4i2> %A0,%x1,%x2,%3,%4
-   <pvi4i2> %A0,%x1,%x2,%3,%4"
+  "<pvi4i2> %A0,%x1,%x2,%3,%4"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -828,10 +758,7 @@
 		    (match_operand:SI 5 "const_0_to_3_operand" "n,n,n")]
 		    MMA_APVI4I2))]
   "TARGET_MMA"
-  "@
-   <apvi4i2_dm> %A0,%x2,%x3,%4,%5
-   <apvi4i2> %A0,%x2,%x3,%4,%5
-   <apvi4i2> %A0,%x2,%x3,%4,%5"
+  "<apvi4i2> %A0,%x2,%x3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -845,10 +772,7 @@
 		    (match_operand:SI 5 "const_0_to_15_operand" "n,n,n")]
 		    MMA_VVI4I4I4))]
   "TARGET_MMA"
-  "@
-   <vvi4i4i4_dm> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i4> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i4> %A0,%x1,%x2,%3,%4,%5"
+  "<vvi4i4i4> %A0,%x1,%x2,%3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -863,157 +787,7 @@
 		    (match_operand:SI 6 "const_0_to_15_operand" "n,n,n")]
 		    MMA_AVVI4I4I4))]
   "TARGET_MMA"
-  "@
-   <avvi4i4i4_dm> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i4> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i4> %A0,%x2,%x3,%4,%5,%6"
+  "<avvi4i4i4> %A0,%x2,%x3,%4,%5,%6"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
-
-\f
-;; TDOmode (i.e. __dmr).
-(define_expand "movtdo"
-  [(set (match_operand:TDO 0 "nonimmediate_operand")
-	(match_operand:TDO 1 "input_operand"))]
-  "TARGET_DENSE_MATH"
-{
-  rs6000_emit_move (operands[0], operands[1], TDOmode);
-  DONE;
-})
-
-(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_DENSE_MATH
-   && (gpc_reg_operand (operands[0], TDOmode)
-       || gpc_reg_operand (operands[1], TDOmode))"
-  "@
-   #
-   #
-   #
-   #
-   dmmr %0,%1
-   #"
-  "&& reload_completed
-   && (!dmr_operand (operands[0], TDOmode) || !dmr_operand (operands[1], TDOmode))"
-  [(const_int 0)]
-{
-  rtx op0 = operands[0];
-  rtx op1 = operands[1];
-
-  if (REG_P (op0) && REG_P (op1))
-    {
-      int regno0 = REGNO (op0);
-      int regno1 = REGNO (op1);
-
-      if (DMR_REGNO_P (regno0) && VSX_REGNO_P (regno1))
-	{
-	  rtx op1_upper = gen_rtx_REG (XOmode, regno1);
-	  rtx op1_lower = gen_rtx_REG (XOmode, regno1 + 4);
-	  emit_insn (gen_movtdo_insert512_upper (op0, op1_upper));
-	  emit_insn (gen_movtdo_insert512_lower (op0, op0, op1_lower));
-	  DONE;
-	}
-
-      else if (VSX_REGNO_P (regno0) && DMR_REGNO_P (regno1))
-	{
-	  rtx op0_upper = gen_rtx_REG (XOmode, regno0);
-	  rtx op0_lower = gen_rtx_REG (XOmode, regno0 + 4);
-	  emit_insn (gen_movtdo_extract512 (op0_upper, op1, const0_rtx));
-	  emit_insn (gen_movtdo_extract512 (op0_lower, op1, const1_rtx));
-	  DONE;
-	}
-    }
-
-  rs6000_split_multireg_move (operands[0], operands[1]);
-  DONE;
-}
-  [(set_attr "type" "vecload,vecstore,vecmove,vecmove,vecmove,vecmove")
-   (set_attr "length" "*,*,32,8,*,8")
-   (set_attr "max_prefixed_insns" "4,4,*,*,*,*")])
-
-;; Move from VSX registers to DMR registers via two insert 512 bit
-;; instructions.
-(define_insn "movtdo_insert512_upper"
-  [(set (match_operand:TDO 0 "dmr_operand" "=wD")
-	(unspec:TDO [(match_operand:XO 1 "vsx_register_operand" "wa")]
-		    UNSPEC_DM_INSERT512_UPPER))]
-  "TARGET_DENSE_MATH"
-  "dmxxinstdmr512 %0,%1,%Y1,0"
-  [(set_attr "type" "mma")])
-
-(define_insn "movtdo_insert512_lower"
-  [(set (match_operand:TDO 0 "dmr_operand" "=wD")
-	(unspec:TDO [(match_operand:TDO 1 "dmr_operand" "0")
-		     (match_operand:XO 2 "vsx_register_operand" "wa")]
-		    UNSPEC_DM_INSERT512_LOWER))]
-  "TARGET_DENSE_MATH"
-  "dmxxinstdmr512 %0,%2,%Y2,1"
-  [(set_attr "type" "mma")])
-
-;; Move from DMR registers to VSX registers via two extract 512 bit
-;; instructions.
-(define_insn "movtdo_extract512"
-  [(set (match_operand:XO 0 "vsx_register_operand" "=wa")
-	(unspec:XO [(match_operand:TDO 1 "dmr_operand" "wD")
-		    (match_operand 2 "const_0_to_1_operand" "n")]
-		   UNSPEC_DM_EXTRACT512))]
-  "TARGET_DENSE_MATH"
-  "dmxxextfdmr512 %0,%Y0,%1,%2"
-  [(set_attr "type" "mma")])
-
-;; Reload DMR registers from memory
-(define_insn_and_split "reload_dmr_from_memory"
-  [(set (match_operand:TDO 0 "dmr_operand" "=wD")
-	(unspec:TDO [(match_operand:TDO 1 "memory_operand" "m")]
-		    UNSPEC_DMR_RELOAD_FROM_MEMORY))
-   (clobber (match_operand:XO 2 "vsx_register_operand" "=wa"))]
-  "TARGET_DENSE_MATH"
-  "#"
-  "&& reload_completed"
-  [(const_int 0)]
-{
-  rtx dest = operands[0];
-  rtx src = operands[1];
-  rtx tmp = operands[2];
-  rtx mem_upper = adjust_address (src, XOmode, BYTES_BIG_ENDIAN ? 0 : 32);
-  rtx mem_lower = adjust_address (src, XOmode, BYTES_BIG_ENDIAN ? 32 : 0);
-
-  emit_move_insn (tmp, mem_upper);
-  emit_insn (gen_movtdo_insert512_upper (dest, tmp));
-
-  emit_move_insn (tmp, mem_lower);
-  emit_insn (gen_movtdo_insert512_lower (dest, dest, tmp));
-  DONE;
-}
-  [(set_attr "length" "16")
-   (set_attr "max_prefixed_insns" "2")
-   (set_attr "type" "vecload")])
-
-;; Reload dense math registers to memory
-(define_insn_and_split "reload_dmr_to_memory"
-  [(set (match_operand:TDO 0 "memory_operand" "=m")
-	(unspec:TDO [(match_operand:TDO 1 "dmr_operand" "wD")]
-		    UNSPEC_DMR_RELOAD_TO_MEMORY))
-   (clobber (match_operand:XO 2 "vsx_register_operand" "=wa"))]
-  "TARGET_DENSE_MATH"
-  "#"
-  "&& reload_completed"
-  [(const_int 0)]
-{
-  rtx dest = operands[0];
-  rtx src = operands[1];
-  rtx tmp = operands[2];
-  rtx mem_upper = adjust_address (dest, XOmode, BYTES_BIG_ENDIAN ? 0 : 32);
-  rtx mem_lower = adjust_address (dest, XOmode, BYTES_BIG_ENDIAN ? 32 : 0);
-
-  emit_insn (gen_movtdo_extract512 (tmp, src, const0_rtx));
-  emit_move_insn (mem_upper, tmp);
-
-  emit_insn (gen_movtdo_extract512 (tmp, src, const1_rtx));
-  emit_move_insn (mem_lower, tmp);
-  DONE;
-}
-  [(set_attr "length" "16")
-   (set_attr "max_prefixed_insns" "2")])
diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index f4eba184db8..e5298f45363 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -495,8 +495,6 @@ const char *rs6000_type_string (tree type_node)
     return "__vector_pair";
   else if (type_node == vector_quad_type_node)
     return "__vector_quad";
-  else if (type_node == dmr_type_node)
-    return "__dmr";
 
   return "unknown";
 }
@@ -786,17 +784,6 @@ rs6000_init_builtins (void)
   t = build_qualified_type (vector_quad_type_node, TYPE_QUAL_CONST);
   ptr_vector_quad_type_node = build_pointer_type (t);
 
-  dmr_type_node = make_node (OPAQUE_TYPE);
-  SET_TYPE_MODE (dmr_type_node, TDOmode);
-  TYPE_SIZE (dmr_type_node) = bitsize_int (GET_MODE_BITSIZE (TDOmode));
-  TYPE_PRECISION (dmr_type_node) = GET_MODE_BITSIZE (TDOmode);
-  TYPE_SIZE_UNIT (dmr_type_node) = size_int (GET_MODE_SIZE (TDOmode));
-  SET_TYPE_ALIGN (dmr_type_node, 512);
-  TYPE_USER_ALIGN (dmr_type_node) = 0;
-  lang_hooks.types.register_builtin_type (dmr_type_node, "__dmr");
-  t = build_qualified_type (dmr_type_node, TYPE_QUAL_CONST);
-  ptr_dmr_type_node = build_pointer_type (t);
-
   tdecl = add_builtin_type ("__bool char", bool_char_type_node);
   TYPE_NAME (bool_char_type_node) = tdecl;
 
diff --git a/gcc/config/rs6000/rs6000-call.cc b/gcc/config/rs6000/rs6000-call.cc
index 13eacd3a84d..6da4de67137 100644
--- a/gcc/config/rs6000/rs6000-call.cc
+++ b/gcc/config/rs6000/rs6000-call.cc
@@ -437,8 +437,7 @@ rs6000_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
   if (cfun
       && !cfun->machine->mma_return_type_error
       && TREE_TYPE (cfun->decl) == fntype
-      && (TYPE_MODE (type) == OOmode || TYPE_MODE (type) == XOmode
-	  || TYPE_MODE (type) == TDOmode))
+      && (TYPE_MODE (type) == OOmode || TYPE_MODE (type) == XOmode))
     {
       /* Record we have now handled function CFUN, so the next time we
 	 are called, we do not re-report the same error.  */
@@ -1642,16 +1641,6 @@ rs6000_function_arg (cumulative_args_t cum_v, const function_arg_info &arg)
       return NULL_RTX;
     }
 
-  if (mode == TDOmode)
-    {
-      if (TYPE_CANONICAL (type) != NULL_TREE)
-	type = TYPE_CANONICAL (type);
-      error ("invalid use of dense math operand of type %qs as a function "
-	     "parameter",
-	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
-      return NULL_RTX;
-    }
-
   /* Return a marker to indicate whether CR1 needs to set or clear the
      bit that V.4 uses to say fp args were passed in registers.
      Assume that we don't need the marker for software floating point,
diff --git a/gcc/config/rs6000/rs6000-modes.def b/gcc/config/rs6000/rs6000-modes.def
index a1384d5dd91..8ef910869c5 100644
--- a/gcc/config/rs6000/rs6000-modes.def
+++ b/gcc/config/rs6000/rs6000-modes.def
@@ -86,7 +86,3 @@ PARTIAL_INT_MODE (TI, 128, PTI);
 /* Modes used by __vector_pair and __vector_quad.  */
 OPAQUE_MODE (OO, 32);
 OPAQUE_MODE (XO, 64);
-
-/* Modes used by __dmr.  */
-OPAQUE_MODE (TDO, 128);
-
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index dba37df3c61..361fd87aa8c 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -1820,9 +1820,7 @@ rs6000_hard_regno_nregs_internal (int regno, machine_mode mode)
      128-bit floating point that can go in vector registers, which has VSX
      memory addressing.  */
   if (FP_REGNO_P (regno))
-    reg_size = (VECTOR_MEM_VSX_P (mode)
-		|| VECTOR_ALIGNMENT_P (mode)
-		|| mode == TDOmode
+    reg_size = (VECTOR_MEM_VSX_P (mode) || VECTOR_ALIGNMENT_P (mode)
 		? UNITS_PER_VSX_WORD
 		: UNITS_PER_FP_WORD);
 
@@ -1855,9 +1853,9 @@ rs6000_hard_regno_mode_ok_uncached (int regno, machine_mode mode)
 
   /* On power10, MMA accumulator modes need FPR registers divisible by 4.
 
-     If dense math is enabled, allow all VSX registers plus the dense math
-     registers.  We need to make sure we don't cross between the boundary of
-     FPRs and traditional Altiviec registers.  */
+     If dense math is enabled, allow all VSX registers plus the DMR registers.
+     We need to make sure we don't cross between the boundary of FPRs and
+     traditional Altiviec registers.  */
   if (mode == XOmode)
     {
       if (TARGET_MMA && !TARGET_DENSE_MATH)
@@ -1879,27 +1877,7 @@ rs6000_hard_regno_mode_ok_uncached (int regno, machine_mode mode)
 	return 0;
     }
 
-  /* Dense math register modes need DMR registers or VSX registers divisible by
-     2.  We need to make sure we don't cross between the boundary of FPRs and
-     traditional Altiviec registers.  */
-  if (mode == TDOmode)
-    {
-      if (!TARGET_DENSE_MATH)
-	return 0;
-
-      if (DMR_REGNO_P (regno))
-	return 1;
-
-      if (FP_REGNO_P (regno))
-	return ((regno & 1) == 0 && regno <= LAST_FPR_REGNO - 7);
-
-      if (ALTIVEC_REGNO_P (regno))
-	return ((regno & 1) == 0 && regno <= LAST_ALTIVEC_REGNO - 7);
-
-      return 0;
-    }
-
-  /* No other types other than XOmode or TDOmode can go in DMRs.  */
+  /* No other types other than XOmode can go in DMRs.  */
   if (DMR_REGNO_P (regno))
     return 0;
 
@@ -2007,11 +1985,9 @@ rs6000_hard_regno_mode_ok (unsigned int regno, machine_mode mode)
    GPR registers, and TImode can go in any GPR as well as VSX registers (PR
    57744).
 
-   Similarly, don't allow OOmode (vector pair), XOmode (vector quad), or
-   TDOmode (dmr register) to pair with anything else.  Vector pairs are
-   restricted to even/odd VSX registers.  Without dense math, vector quads are
-   limited to FPR registers divisible by 4.  With dense math, vector quads are
-   limited to even VSX registers or DMR registers.
+   Similarly, don't allow OOmode (vector pair, restricted to even VSX
+   registers) or XOmode (vector quad, restricted to FPR registers divisible
+   by 4) to tie with other modes.
 
    Altivec/VSX vector tests were moved ahead of scalar float mode, so that IEEE
    128-bit floating point on VSX systems ties with other vectors.  */
@@ -2020,8 +1996,7 @@ static bool
 rs6000_modes_tieable_p (machine_mode mode1, machine_mode mode2)
 {
   if (mode1 == PTImode || mode1 == OOmode || mode1 == XOmode
-      || mode1 == TDOmode || mode2 == PTImode || mode2 == OOmode
-      || mode2 == XOmode || mode2 == TDOmode)
+      || mode2 == PTImode || mode2 == OOmode || mode2 == XOmode)
     return mode1 == mode2;
 
   if (ALTIVEC_OR_VSX_VECTOR_MODE (mode1))
@@ -2312,7 +2287,6 @@ rs6000_debug_reg_global (void)
     V4DFmode,
     OOmode,
     XOmode,
-    TDOmode,
     CCmode,
     CCUNSmode,
     CCEQmode,
@@ -2678,7 +2652,7 @@ rs6000_setup_reg_addr_masks (void)
 	  /* Special case DMR registers.  */
 	  if (rc == RELOAD_REG_DMR)
 	    {
-	      if (TARGET_DENSE_MATH && (m2 == XOmode || m2 == TDOmode))
+	      if (TARGET_DENSE_MATH && m2 == XOmode)
 		{
 		  addr_mask = RELOAD_REG_VALID;
 		  reg_addr[m].addr_mask[rc] = addr_mask;
@@ -2788,7 +2762,7 @@ rs6000_setup_reg_addr_masks (void)
 	     since it will be broken into two vector moves.  Vector quads and
 	     1,024 bit DMR values can only do offset loads.  */
 	  else if ((addr_mask != 0) && TARGET_MMA
-		   && (m2 == OOmode || m2 == XOmode || m2 == TDOmode))
+		   && (m2 == OOmode || m2 == XOmode))
 	    {
 	      addr_mask |= RELOAD_REG_OFFSET;
 	      if (rc == RELOAD_REG_FPR || rc == RELOAD_REG_VMX)
@@ -3016,14 +2990,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
       rs6000_vector_align[XOmode] = 512;
     }
 
-  /* Add support for 1,024 bit DMR registers.  */
-  if (TARGET_DENSE_MATH)
-    {
-      rs6000_vector_unit[TDOmode] = VECTOR_NONE;
-      rs6000_vector_mem[TDOmode] = VECTOR_VSX;
-      rs6000_vector_align[TDOmode] = 512;
-    }
-
   /* Register class constraints for the constraints that depend on compile
      switches. When the VSX code was added, different constraints were added
      based on the type (DFmode, V2DFmode, V4SFmode).  For the vector types, all
@@ -3237,12 +3203,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
 	}
     }
 
-  if (TARGET_DENSE_MATH)
-    {
-      reg_addr[TDOmode].reload_load = CODE_FOR_reload_dmr_from_memory;
-      reg_addr[TDOmode].reload_store = CODE_FOR_reload_dmr_to_memory;
-    }
-
   /* Precalculate HARD_REGNO_NREGS.  */
   for (r = 0; HARD_REGISTER_NUM_P (r); ++r)
     for (m = 0; m < NUM_MACHINE_MODES; ++m)
@@ -8718,15 +8678,12 @@ reg_offset_addressing_ok_p (machine_mode mode)
 	return mode_supports_dq_form (mode);
       break;
 
-      /* The vector pair/quad types and the dense math types support offset
-	 addressing if the underlying vectors support offset addressing.  */
+      /* The vector pair/quad types support offset addressing if the
+	 underlying vectors support offset addressing.  */
     case E_OOmode:
     case E_XOmode:
       return TARGET_MMA;
 
-    case E_TDOmode:
-      return TARGET_DENSE_MATH;
-
     case E_SDmode:
       /* If we can do direct load/stores of SDmode, restrict it to reg+reg
 	 addressing for the LFIWZX and STFIWX instructions.  */
@@ -11005,12 +10962,6 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
 	       (mode == OOmode) ? "__vector_pair" : "__vector_quad");
       break;
 
-    case E_TDOmode:
-      if (CONST_INT_P (operands[1]))
-	error ("%qs is an opaque type, and you cannot set it to constants",
-	       "__dmr");
-      break;
-
     case E_SImode:
     case E_DImode:
       /* Use default pattern for address of ELF small data */
@@ -12465,7 +12416,7 @@ rs6000_secondary_reload_simple_move (enum rs6000_reg_type to_type,
 
   /* We can transfer between VSX registers and DMR registers without needing
      extra registers.  */
-  if (TARGET_DENSE_MATH && (mode == XOmode || mode == TDOmode)
+  if (TARGET_DENSE_MATH && mode == XOmode
       && ((to_type == DMR_REG_TYPE && from_type == VSX_REG_TYPE)
 	  || (to_type == VSX_REG_TYPE && from_type == DMR_REG_TYPE)))
     return true;
@@ -13266,9 +13217,6 @@ rs6000_preferred_reload_class (rtx x, enum reg_class rclass)
       if (mode == XOmode)
 	return TARGET_DENSE_MATH ? VSX_REGS : FLOAT_REGS;
 
-      if (mode == TDOmode)
-	return VSX_REGS;
-
       if (GET_MODE_CLASS (mode) == MODE_INT)
 	return GENERAL_REGS;
     }
@@ -13392,9 +13340,8 @@ rs6000_secondary_reload_class (enum reg_class rclass, machine_mode mode,
   else
     regno = -1;
 
-  /* Dense math registers don't have loads or stores.  We have to go through
-     the VSX registers to load XOmode (vector quad) and TDOmode (dmr 1024
-     bit).  */
+  /* DMR registers don't have loads or stores.  We have to go through the VSX
+     registers to load XOmode (vector quad).  */
   if (TARGET_DENSE_MATH && rclass == DM_REGS)
     return VSX_REGS;
 
@@ -20420,8 +20367,6 @@ rs6000_mangle_type (const_tree type)
     return "u13__vector_pair";
   if (type == vector_quad_type_node)
     return "u13__vector_quad";
-  if (type == dmr_type_node)
-    return "u5__dmr";
 
   /* For all other types, use the default mangling.  */
   return NULL;
@@ -22545,10 +22490,6 @@ rs6000_dmr_register_move_cost (machine_mode mode, reg_class_t rclass)
       if (mode == XOmode)
 	return reg_move_base;
 
-      /* __dmr (i.e. TDOmode) is transferred in 2 instructions.  */
-      else if (mode == TDOmode)
-	return reg_move_base * 2;
-
       else
 	return reg_move_base * 2 * hard_regno_nregs (FIRST_DMR_REGNO, mode);
     }
@@ -27248,10 +27189,9 @@ rs6000_split_multireg_move (rtx dst, rtx src)
   mode = GET_MODE (dst);
   nregs = hard_regno_nregs (reg, mode);
 
-  /* If we have a vector quad register for MMA or DMR register for dense math,
-     and this is a load or store, see if we can use vector paired
-     load/stores.  */
-  if ((mode == XOmode || mode == TDOmode) && TARGET_MMA
+  /* If we have a vector quad register for MMA, and this is a load or store,
+     see if we can use vector paired load/stores.  */
+  if (mode == XOmode && TARGET_MMA
       && (MEM_P (dst) || MEM_P (src)))
     {
       reg_mode = OOmode;
@@ -27259,7 +27199,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
     }
   /* If we have a vector pair/quad mode, split it into two/four separate
      vectors.  */
-  else if (mode == OOmode || mode == XOmode || mode == TDOmode)
+  else if (mode == OOmode || mode == XOmode)
     reg_mode = V1TImode;
   else if (FP_REGNO_P (reg))
     reg_mode = DECIMAL_FLOAT_MODE_P (mode) ? DDmode :
@@ -27305,13 +27245,13 @@ rs6000_split_multireg_move (rtx dst, rtx src)
       return;
     }
 
-  /* The __vector_pair, __vector_quad, and __dmr modes are multi-register
-     modes, so if we have to load or store the registers, we have to be careful
-     to properly swap them if we're in little endian mode below.  This means
-     the last register gets the first memory location.  We also need to be
-     careful of using the right register numbers if we are splitting XO to
-     OO.  */
-  if (mode == OOmode || mode == XOmode || mode == TDOmode)
+  /* The __vector_pair and __vector_quad modes are multi-register
+     modes, so if we have to load or store the registers, we have to be
+     careful to properly swap them if we're in little endian mode
+     below.  This means the last register gets the first memory
+     location.  We also need to be careful of using the right register
+     numbers if we are splitting XO to OO.  */
+  if (mode == OOmode || mode == XOmode)
     {
       nregs = hard_regno_nregs (reg, mode);
       int reg_mode_nregs = hard_regno_nregs (reg, reg_mode);
@@ -27448,7 +27388,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 	 overlap.  */
       int i;
       /* XO/OO are opaque so cannot use subregs. */
-      if (mode == OOmode || mode == XOmode || mode == TDOmode)
+      if (mode == OOmode || mode == XOmode )
 	{
 	  for (i = nregs - 1; i >= 0; i--)
 	    {
@@ -27622,7 +27562,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 	    continue;
 
 	  /* XO/OO are opaque so cannot use subregs. */
-	  if (mode == OOmode || mode == XOmode || mode == TDOmode)
+	  if (mode == OOmode || mode == XOmode )
 	    {
 	      rtx dst_i = gen_rtx_REG (reg_mode, REGNO (dst) + j);
 	      rtx src_i = gen_rtx_REG (reg_mode, REGNO (src) + j);
@@ -28603,8 +28543,7 @@ rs6000_invalid_conversion (const_tree fromtype, const_tree totype)
 
   if (frommode != tomode)
     {
-      /* Do not allow conversions to/from XOmode, OOmode, and TDOmode
-	 types.  */
+      /* Do not allow conversions to/from XOmode and OOmode types.  */
       if (frommode == XOmode)
 	return N_("invalid conversion from type %<__vector_quad%>");
       if (tomode == XOmode)
@@ -28613,10 +28552,6 @@ rs6000_invalid_conversion (const_tree fromtype, const_tree totype)
 	return N_("invalid conversion from type %<__vector_pair%>");
       if (tomode == OOmode)
 	return N_("invalid conversion to type %<__vector_pair%>");
-      if (frommode == TDOmode)
-	return N_("invalid conversion from type %<__dmr%>");
-      if (tomode == TDOmode)
-	return N_("invalid conversion to type %<__dmr%>");
     }
 
   /* Conversion allowed.  */
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index f2b63c3cd71..27f7067ef52 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -1006,8 +1006,7 @@ enum data_align { align_abi, align_opt, align_both };
 /* Modes that are not vectors, but require vector alignment.  Treat these like
    vectors in terms of loads and stores.  */
 #define VECTOR_ALIGNMENT_P(MODE)					\
-  (FLOAT128_VECTOR_P (MODE) || (MODE) == OOmode || (MODE) == XOmode	\
-   || (MODE) == TDOmode)
+  (FLOAT128_VECTOR_P (MODE) || (MODE) == OOmode || (MODE) == XOmode)
 
 #define ALTIVEC_VECTOR_MODE(MODE)					\
   ((MODE) == V16QImode							\
@@ -2293,7 +2292,6 @@ enum rs6000_builtin_type_index
   RS6000_BTI_const_str,		 /* pointer to const char * */
   RS6000_BTI_vector_pair,	 /* unsigned 256-bit types (vector pair).  */
   RS6000_BTI_vector_quad,	 /* unsigned 512-bit types (vector quad).  */
-  RS6000_BTI_dmr,		 /* unsigned 1,024-bit types (dmr).  */
   RS6000_BTI_const_ptr_void,     /* const pointer to void */
   RS6000_BTI_ptr_V16QI,
   RS6000_BTI_ptr_V1TI,
@@ -2332,7 +2330,6 @@ enum rs6000_builtin_type_index
   RS6000_BTI_ptr_dfloat128,
   RS6000_BTI_ptr_vector_pair,
   RS6000_BTI_ptr_vector_quad,
-  RS6000_BTI_ptr_dmr,
   RS6000_BTI_ptr_long_long,
   RS6000_BTI_ptr_long_long_unsigned,
   RS6000_BTI_MAX
@@ -2390,7 +2387,6 @@ enum rs6000_builtin_type_index
 #define const_str_type_node		 (rs6000_builtin_types[RS6000_BTI_const_str])
 #define vector_pair_type_node		 (rs6000_builtin_types[RS6000_BTI_vector_pair])
 #define vector_quad_type_node		 (rs6000_builtin_types[RS6000_BTI_vector_quad])
-#define dmr_type_node			 (rs6000_builtin_types[RS6000_BTI_dmr])
 #define pcvoid_type_node		 (rs6000_builtin_types[RS6000_BTI_const_ptr_void])
 #define ptr_V16QI_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_V16QI])
 #define ptr_V1TI_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_V1TI])
@@ -2429,7 +2425,6 @@ enum rs6000_builtin_type_index
 #define ptr_dfloat128_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_dfloat128])
 #define ptr_vector_pair_type_node	 (rs6000_builtin_types[RS6000_BTI_ptr_vector_pair])
 #define ptr_vector_quad_type_node	 (rs6000_builtin_types[RS6000_BTI_ptr_vector_quad])
-#define ptr_dmr_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_dmr])
 #define ptr_long_long_integer_type_node	 (rs6000_builtin_types[RS6000_BTI_ptr_long_long])
 #define ptr_long_long_unsigned_type_node (rs6000_builtin_types[RS6000_BTI_ptr_long_long_unsigned])
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dm-1024bit.c b/gcc/testsuite/gcc.target/powerpc/dm-1024bit.c
deleted file mode 100644
index 4d57ce826bb..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/dm-1024bit.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_dense_math_ok } */
-
-/* Note tree constant proprigation needs to be tweaked to allow skipping opaque
-   modes.  At the moment just to verify that basic loads and stores are handled
-   of the new type, just disable CCP for now.  By the time GCC 13 is shipped,
-   this needed to be fixed.  */
-/* { dg-options "-mdejagnu-cpu=future -O2 -fno-tree-ccp" } */
-
-/* Test basic load/store for __dmr type.  */
-
-#ifndef CONSTRAINT
-#if defined(USE_D)
-#define CONSTRAINT "d"
-
-#elif defined(USE_V)
-#define CONSTRAINT "v"
-
-#elif defined(USE_WA)
-#define CONSTRAINT "wa"
-
-#else
-#define CONSTRAINT "wD"
-#endif
-#endif
-const char constraint[] = CONSTRAINT;
-
-void foo_mem_asm (__dmr *p, __dmr *q)
-{
-  /* 2 LXVP instructions.  */
-  __dmr vq = *p;
-
-  /* 2 DMXXINSTDMR512 instructions to transfer VSX to DMR.  */
-  __asm__ ("# foo (" CONSTRAINT ") %A0" : "+" CONSTRAINT (vq));
-  /* 2 DMXXEXTFDMR512 instructions to transfer DMR to VSX.  */
-
-  /* 2 STXVP instructions.  */
-  *q = vq;
-}
-
-void foo_mem_asm2 (__dmr *p, __dmr *q)
-{
-  /* 2 LXVP instructions.  */
-  __dmr vq = *p;
-  __dmr vq2;
-  __dmr vq3;
-
-  /* 2 DMXXINSTDMR512 instructions to transfer VSX to DMR.  */
-  __asm__ ("# foo1 (" CONSTRAINT ") %A0" : "+" CONSTRAINT (vq));
-  /* 2 DMXXEXTFDMR512 instructions to transfer DMR to VSX.  */
-
-  vq2 = vq;
-  __asm__ ("# foo2 (wa) %0" : "+wa" (vq2));
-
-  /* 2 STXVP instructions.  */
-  *q = vq2;
-}
-
-void foo_mem (__dmr *p, __dmr *q)
-{
-  /* 2 LXVP, 2 STXVP instructions, no DMR transfer.  */
-  *q = *p;
-}
-
-/* { dg-final { scan-assembler-times {\mdmxxextfdmr512\M}  4 } } */
-/* { dg-final { scan-assembler-times {\mdmxxinstdmr512\M}  4 } } */
-/* { dg-final { scan-assembler-times {\mlxvp\M}           12 } } */
-/* { dg-final { scan-assembler-times {\mstxvp\M}          12 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dm-double-test.c b/gcc/testsuite/gcc.target/powerpc/dm-double-test.c
deleted file mode 100644
index 51733d6f641..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/dm-double-test.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Test derived from mma-double-1.c, modified for dense math.  */
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_dense_math_ok } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <altivec.h>
-
-typedef unsigned char vec_t __attribute__ ((vector_size (16)));
-typedef double v4sf_t __attribute__ ((vector_size (16)));
-#define SAVE_ACC(ACC, ldc, J)  \
-	  __builtin_mma_disassemble_acc (result, ACC); \
-	  rowC = (v4sf_t *) &CO[0*ldc+J]; \
-          rowC[0] += result[0]; \
-          rowC = (v4sf_t *) &CO[1*ldc+J]; \
-          rowC[0] += result[1]; \
-          rowC = (v4sf_t *) &CO[2*ldc+J]; \
-          rowC[0] += result[2]; \
-          rowC = (v4sf_t *) &CO[3*ldc+J]; \
-	  rowC[0] += result[3];
-
-void
-DM (int m, int n, int k, double *A, double *B, double *C)
-{
-  __vector_quad acc0, acc1, acc2, acc3, acc4, acc5, acc6, acc7;
-  v4sf_t result[4];
-  v4sf_t *rowC;
-  for (int l = 0; l < n; l += 4)
-    {
-      double *CO;
-      double *AO;
-      AO = A;
-      CO = C;
-      C += m * 4;
-      for (int j = 0; j < m; j += 16)
-	{
-	  double *BO = B;
-	  __builtin_mma_xxsetaccz (&acc0);
-	  __builtin_mma_xxsetaccz (&acc1);
-	  __builtin_mma_xxsetaccz (&acc2);
-	  __builtin_mma_xxsetaccz (&acc3);
-	  __builtin_mma_xxsetaccz (&acc4);
-	  __builtin_mma_xxsetaccz (&acc5);
-	  __builtin_mma_xxsetaccz (&acc6);
-	  __builtin_mma_xxsetaccz (&acc7);
-	  unsigned long i;
-
-	  for (i = 0; i < k; i++)
-	    {
-	      vec_t *rowA = (vec_t *) & AO[i * 16];
-	      __vector_pair rowB;
-	      vec_t *rb = (vec_t *) & BO[i * 4];
-	      __builtin_mma_assemble_pair (&rowB, rb[1], rb[0]);
-	      __builtin_mma_xvf64gerpp (&acc0, rowB, rowA[0]);
-	      __builtin_mma_xvf64gerpp (&acc1, rowB, rowA[1]);
-	      __builtin_mma_xvf64gerpp (&acc2, rowB, rowA[2]);
-	      __builtin_mma_xvf64gerpp (&acc3, rowB, rowA[3]);
-	      __builtin_mma_xvf64gerpp (&acc4, rowB, rowA[4]);
-	      __builtin_mma_xvf64gerpp (&acc5, rowB, rowA[5]);
-	      __builtin_mma_xvf64gerpp (&acc6, rowB, rowA[6]);
-	      __builtin_mma_xvf64gerpp (&acc7, rowB, rowA[7]);
-	    }
-	  SAVE_ACC (&acc0, m, 0);
-	  SAVE_ACC (&acc2, m, 4);
-	  SAVE_ACC (&acc1, m, 2);
-	  SAVE_ACC (&acc3, m, 6);
-	  SAVE_ACC (&acc4, m, 8);
-	  SAVE_ACC (&acc6, m, 12);
-	  SAVE_ACC (&acc5, m, 10);
-	  SAVE_ACC (&acc7, m, 14);
-	  AO += k * 16;
-	  BO += k * 4;
-	  CO += 16;
-	}
-      B += k * 4;
-    }
-}
-
-void
-init (double *matrix, int row, int column)
-{
-  for (int j = 0; j < column; j++)
-    {
-      for (int i = 0; i < row; i++)
-	{
-	  matrix[j * row + i] = (i * 16 + 2 + j) / 0.123;
-	}
-    }
-}
-
-void
-init0 (double *matrix, double *matrix1, int row, int column)
-{
-  for (int j = 0; j < column; j++)
-    for (int i = 0; i < row; i++)
-      matrix[j * row + i] = matrix1[j * row + i] = 0;
-}
-
-
-void
-print (const char *name, const double *matrix, int row, int column)
-{
-  printf ("Matrix %s has %d rows and %d columns:\n", name, row, column);
-  for (int i = 0; i < row; i++)
-    {
-      for (int j = 0; j < column; j++)
-	{
-	  printf ("%f ", matrix[j * row + i]);
-	}
-      printf ("\n");
-    }
-  printf ("\n");
-}
-
-int
-main (int argc, char *argv[])
-{
-  int rowsA, colsB, common;
-  int i, j, k;
-  int ret = 0;
-
-  for (int t = 16; t <= 128; t += 16)
-    {
-      for (int t1 = 4; t1 <= 16; t1 += 4)
-	{
-	  rowsA = t;
-	  colsB = t1;
-	  common = 1;
-	  /* printf ("Running test for rows = %d,cols = %d\n", t, t1); */
-	  double A[rowsA * common];
-	  double B[common * colsB];
-	  double C[rowsA * colsB];
-	  double D[rowsA * colsB];
-
-
-	  init (A, rowsA, common);
-	  init (B, common, colsB);
-	  init0 (C, D, rowsA, colsB);
-	  DM (rowsA, colsB, common, A, B, C);
-
-	  for (i = 0; i < colsB; i++)
-	    {
-	      for (j = 0; j < rowsA; j++)
-		{
-		  D[i * rowsA + j] = 0;
-		  for (k = 0; k < common; k++)
-		    {
-		      D[i * rowsA + j] +=
-			A[k * rowsA + j] * B[k + common * i];
-		    }
-		}
-	    }
-	  for (i = 0; i < colsB; i++)
-	    {
-	      for (j = 0; j < rowsA; j++)
-		{
-		  for (k = 0; k < common; k++)
-		    {
-		      if (D[i * rowsA + j] != C[i * rowsA + j])
-			{
-			  printf ("Error %d,%d,%d\n",i,j,k);
-			  ret++;
-			}
-		    }
-		}
-	    }
-	  if (ret)
-	    {
-	      print ("A", A, rowsA, common);
-	      print ("B", B, common, colsB);
-	      print ("C", C, rowsA, colsB);
-	      print ("D", D, rowsA, colsB);
-	    }
-	}
-    }
-  
-#ifdef VERBOSE
-  if (ret)
-    printf ("DM double test fail: %d errors\n",ret);
-  else
-    printf ("DM double test success: 0 DM errors\n");
-#else
-  if (ret)
-    abort();
-#endif
-      
-  return ret;
-}
-
-/* { dg-final { scan-assembler-times {\mdmsetaccz\M}       8 } } */
-/* { dg-final { scan-assembler-times {\mdmxvf64gerpp\M}    8 } } */
-/* { dg-final { scan-assembler-times {\mdmxxextfdmr512\M} 11 } } */
-
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index b70ebf963f9..c7f583d6d14 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -6534,25 +6534,6 @@ proc check_effective_target_power10_ok { } {
     }
 }
 
-# Return 1 if this is a PowerPC target supporting -mcpu=future or -mdense-math
-# which enables the dense math operations.
-proc check_effective_target_powerpc_dense_math_ok { } {
-	return [check_no_compiler_messages_nocache powerpc_dense_math_ok assembly {
-		__vector_quad vq;
-		void test (void)
-		{
-		#ifndef __PPC_DMR__
-		#error "target does not have dense math support."
-		#else
-		/* Make sure we have dense math support.  */
-		  __vector_quad dmr;
-		  __asm__ ("dmsetaccz %A0" : "=wD" (dmr));
-		  vq = dmr;
-		#endif
-		}
-	} "-mcpu=future"]
-}
-
 # Return 1 if this is a PowerPC target supporting -mfloat128 via either
 # software emulation on power7/power8 systems or hardware support on power9.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [gcc(refs/users/meissner/heads/dmf004)] Revert patches.
@ 2022-11-12  3:15 Michael Meissner
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Meissner @ 2022-11-12  3:15 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:0bd1b091dc8f9e05f6fb716a7f7922eab6eb0ad8

commit 0bd1b091dc8f9e05f6fb716a7f7922eab6eb0ad8
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Fri Nov 11 22:14:52 2022 -0500

    Revert patches.
    
    2022-11-11   Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            Revert patch.
            * config/rs6000/vsx.md (define_expand lxvl): If -mcpu=future, generate
              the lxvl with the shift count automaticaly used in the insn.
              (lxvrl): New insn for -mcpu=future.
              (lxvrll): Likewise.
              (define_expand lxvl): If -mcpu=future, generate the stxvl with the
              shift count automaticaly used in the insn.
              (stxvrl): New insn for -mcpu=future.
              (stxvrll): Likewise.
    
    2022-11-11   Michael Meissner  <meissner@linux.ibm.com>
    
    gcc/
    
            Revert patch.
            * config/rs6000/rs6000-builtin.cc (rs6000_invalid_builtin): Add support
            for flagging invalid use of future built-in functions.
            (rs6000_builtin_is_supported): Add support for future built-in
            functions.
            * config/rs6000/rs6000-builtins.def (__builtin_saturate_subtract32): New
            built-in function for -mcpu=future.
            (__builtin_saturate_subtract64): Likewise.
            * config/rs6000/rs6000-gen-builtins.cc (enum bif_stanza): Add stanzas
            for -mcpu=future built-ins.
            (stanza_map): Likewise.
            (enable_string): Likewise.
            (struct attrinfo): Likewise.
            (parse_bif_attrs): Likewise.
            (write_decls): Likewise.
            * config/rs6000/rs6000.md (sat_sub<mode>3): Add saturating subtract
            built-in insn declarations.
            (sat_sub<mode>3_dot): Likewise.
            (sat_sub<mode>3_dot2): Likewise.
    
    gcc/testsuite/
    
            Revert patch.
            * gcc.target/powerpc/subfus-1.c: New test.
            * gcc.target/powerpc/subfus-2.c: Likewise.
            * lib/target-supports.exp (check_effective_target_powerpc_subfus_ok):
            New effective target.

Diff:
---
 gcc/config/rs6000/rs6000-builtin.cc         |  17 ----
 gcc/config/rs6000/rs6000-builtins.def       |  11 ---
 gcc/config/rs6000/rs6000-gen-builtins.cc    |  35 ++------
 gcc/config/rs6000/rs6000.md                 |  60 --------------
 gcc/config/rs6000/vsx.md                    | 122 +++++-----------------------
 gcc/testsuite/gcc.target/powerpc/subfus-1.c |  32 --------
 gcc/testsuite/gcc.target/powerpc/subfus-2.c |  32 --------
 gcc/testsuite/lib/target-supports.exp       |  16 ----
 8 files changed, 26 insertions(+), 299 deletions(-)

diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index 1ac00e4b26c..f4eba184db8 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -139,17 +139,6 @@ rs6000_invalid_builtin (enum rs6000_gen_builtins fncode)
     case ENB_MMA:
       error ("%qs requires the %qs option", name, "-mmma");
       break;
-    case ENB_FUTURE:
-      error ("%qs requires the %qs option", name, "-mcpu=future");
-      break;
-    case ENB_FUTURE_64:
-      error ("%qs requires the %qs option and either the %qs or %qs option",
-	     name, "-mcpu=future", "-m64", "-mpowerpc64");
-      break;
-    case ENB_DM:
-      error ("%qs requires the %qs or %qs options", name, "-mcpu=future",
-	     "-mdense-math");
-      break;
     default:
     case ENB_ALWAYS:
       gcc_unreachable ();
@@ -205,12 +194,6 @@ rs6000_builtin_is_supported (enum rs6000_gen_builtins fncode)
       return TARGET_HTM;
     case ENB_MMA:
       return TARGET_MMA;
-    case ENB_FUTURE:
-      return TARGET_FUTURE;
-    case ENB_FUTURE_64:
-      return TARGET_FUTURE && TARGET_POWERPC64;
-    case ENB_DM:
-      return TARGET_DENSE_MATH;
     default:
       gcc_unreachable ();
     }
diff --git a/gcc/config/rs6000/rs6000-builtins.def b/gcc/config/rs6000/rs6000-builtins.def
index ee141c1d99e..f76f54793d7 100644
--- a/gcc/config/rs6000/rs6000-builtins.def
+++ b/gcc/config/rs6000/rs6000-builtins.def
@@ -139,8 +139,6 @@
 ;   endian   Needs special handling for endianness
 ;   ibmld    Restrict usage to the case when TFmode is IBM-128
 ;   ibm128   Restrict usage to the case where __ibm128 is supported or if ibmld
-;   future   Restrict usage to future instructions
-;   dm       Restrict usage to dense math
 ;
 ; Each attribute corresponds to extra processing required when
 ; the built-in is expanded.  All such special processing should
@@ -4110,12 +4108,3 @@
 
   void __builtin_vsx_stxvp (v256, unsigned long, const v256 *);
     STXVP nothing {mma,pair}
-
-[future]
-  const signed int __builtin_saturate_subtract32 (signed int, signed int);
-  SAT_SUBSI sat_subsi3 {}
-
-[future-64]
-  const signed long __builtin_saturate_subtract64 (signed long, signed long);
-  SAT_SUBDI sat_subdi3 {}
-
diff --git a/gcc/config/rs6000/rs6000-gen-builtins.cc b/gcc/config/rs6000/rs6000-gen-builtins.cc
index f4020141243..0bd7a535e5f 100644
--- a/gcc/config/rs6000/rs6000-gen-builtins.cc
+++ b/gcc/config/rs6000/rs6000-gen-builtins.cc
@@ -233,9 +233,6 @@ enum bif_stanza
  BSTZ_P10,
  BSTZ_P10_64,
  BSTZ_MMA,
- BSTZ_FUTURE,
- BSTZ_FUTURE_64,
- BSTZ_DM,
  NUMBIFSTANZAS
 };
 
@@ -269,10 +266,7 @@ static stanza_entry stanza_map[NUMBIFSTANZAS] =
     { "htm",		BSTZ_HTM	},
     { "power10",	BSTZ_P10	},
     { "power10-64",	BSTZ_P10_64	},
-    { "mma",		BSTZ_MMA	},
-    { "future",		BSTZ_FUTURE	},
-    { "future-64",	BSTZ_FUTURE_64	},
-    { "dm",		BSTZ_DM		},
+    { "mma",		BSTZ_MMA	}
   };
 
 static const char *enable_string[NUMBIFSTANZAS] =
@@ -297,10 +291,7 @@ static const char *enable_string[NUMBIFSTANZAS] =
     "ENB_HTM",
     "ENB_P10",
     "ENB_P10_64",
-    "ENB_MMA",
-    "ENB_FUTURE",
-    "ENB_FUTURE_64",
-    "ENB_DM",
+    "ENB_MMA"
   };
 
 /* Function modifiers provide special handling for const, pure, and fpmath
@@ -404,8 +395,6 @@ struct attrinfo
   bool isendian;
   bool isibmld;
   bool isibm128;
-  bool isfuture;
-  bool isdm;
 };
 
 /* Fields associated with a function prototype (bif or overload).  */
@@ -1488,8 +1477,7 @@ parse_bif_attrs (attrinfo *attrptr)
 	"ldvec = %d, stvec = %d, reve = %d, pred = %d, htm = %d, "
 	"htmspr = %d, htmcr = %d, mma = %d, quad = %d, pair = %d, "
 	"mmaint = %d, no32bit = %d, 32bit = %d, cpu = %d, ldstmask = %d, "
-	"lxvrse = %d, lxvrze = %d, endian = %d, ibmdld = %d, ibm128 = %d,",
-	"future = %d, dm = %d.\n",
+	"lxvrse = %d, lxvrze = %d, endian = %d, ibmdld = %d, ibm128 = %d.\n",
 	attrptr->isinit, attrptr->isset, attrptr->isextract,
 	attrptr->isnosoft, attrptr->isldvec, attrptr->isstvec,
 	attrptr->isreve, attrptr->ispred, attrptr->ishtm, attrptr->ishtmspr,
@@ -1497,7 +1485,7 @@ parse_bif_attrs (attrinfo *attrptr)
 	attrptr->ismmaint, attrptr->isno32bit, attrptr->is32bit,
 	attrptr->iscpu, attrptr->isldstmask, attrptr->islxvrse,
 	attrptr->islxvrze, attrptr->isendian, attrptr->isibmld,
-	attrptr->isibm128, attrptr->isfuture, attrptr->isdm);
+	attrptr->isibm128);
 #endif
 
   return PC_OK;
@@ -2269,10 +2257,7 @@ write_decls (void)
   fprintf (header_file, "  ENB_HTM,\n");
   fprintf (header_file, "  ENB_P10,\n");
   fprintf (header_file, "  ENB_P10_64,\n");
-  fprintf (header_file, "  ENB_MMA,\n");
-  fprintf (header_file, "  ENB_FUTURE,\n");
-  fprintf (header_file, "  ENB_FUTURE_64,\n");
-  fprintf (header_file, "  ENB_DM\n");
+  fprintf (header_file, "  ENB_MMA\n");
   fprintf (header_file, "};\n\n");
 
   fprintf (header_file, "#define PPC_MAXRESTROPNDS 3\n");
@@ -2316,8 +2301,6 @@ write_decls (void)
   fprintf (header_file, "#define bif_endian_bit\t\t(0x00200000)\n");
   fprintf (header_file, "#define bif_ibmld_bit\t\t(0x00400000)\n");
   fprintf (header_file, "#define bif_ibm128_bit\t\t(0x00800000)\n");
-  fprintf (header_file, "#define bif_future_bit\t\t(0x01000000)\n");
-  fprintf (header_file, "#define bif_dm_bit\t\t(0x02000000)\n");
   fprintf (header_file, "\n");
   fprintf (header_file,
 	   "#define bif_is_init(x)\t\t((x).bifattrs & bif_init_bit)\n");
@@ -2367,10 +2350,6 @@ write_decls (void)
 	   "#define bif_is_ibmld(x)\t((x).bifattrs & bif_ibmld_bit)\n");
   fprintf (header_file,
 	   "#define bif_is_ibm128(x)\t((x).bifattrs & bif_ibm128_bit)\n");
-  fprintf (header_file,
-	   "#define bif_is_future(x)\t((x).bifattrs & bif_future_bit)\n");
-  fprintf (header_file,
-	   "#define bif_is_dm(x)\t((x).bifattrs & bif_dm_bit)\n");
   fprintf (header_file, "\n");
 
   fprintf (header_file,
@@ -2569,10 +2548,6 @@ write_bif_static_init (void)
 	fprintf (init_file, " | bif_ibmld_bit");
       if (bifp->attrs.isibm128)
 	fprintf (init_file, " | bif_ibm128_bit");
-      if (bifp->attrs.isfuture)
-	fprintf (init_file, " | bif_future_bit");
-      if (bifp->attrs.isdm)
-	fprintf (init_file, " | bif_dm_bit");
       fprintf (init_file, ",\n");
       fprintf (init_file, "      /* restr_opnd */\t{%d, %d, %d},\n",
 	       bifp->proto.restr_opnd[0], bifp->proto.restr_opnd[1],
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index e9dfb138603..4a5007dc539 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -15499,66 +15499,6 @@
 }
   [(set_attr "type" "load")])
 \f
-;; Signed saturation.
-
-;; The subfus instruction is defined as: SUBFUS RT,L,RA,RB.  The extended
-;; mnemonic that we use (subdus and subwus) has the arguments RA and RB
-;; reversed (so it becomes a subtract instead of subtract from).
-
-(define_insn "sat_sub<mode>3"
-  [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
-	(ss_minus:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")
-		      (match_operand:GPR 2 "gpc_reg_operand" "r")))]
-  "TARGET_FUTURE"
-  "sub<wd>us %0,%1,%2"
-  [(set_attr "type" "add")])
-
-(define_insn_and_split "*sat_sub<mode>3_dot"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
-	(compare:CC (ss_minus:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r")
-				  (match_operand:GPR 2 "gpc_reg_operand" "r,r"))
-		    (const_int 0)))
-   (clobber (match_scratch:GPR 0 "=r,r"))]
-  "TARGET_FUTURE"
-  "@
-   sub<wd>us. %0,%1,%2
-   #"
-  "&& reload_completed && cc_reg_not_cr0_operand (operands[3], CCmode)"
-  [(set (match_dup 0)
-	(ss_minus:GPR (match_dup 1)
-		      (match_dup 2)))
-   (set (match_dup 3)
-	(compare:CC (match_dup 0)
-		    (const_int 0)))]
-  ""
-  [(set_attr "type" "add")
-   (set_attr "dot" "yes")
-   (set_attr "length" "4,8")])
-
-(define_insn_and_split "*sat_sub<mode>3_dot2"
-  [(set (match_operand:CC 3 "cc_reg_operand" "=x,?y")
-	(compare:CC (ss_minus:GPR (match_operand:GPR 1 "gpc_reg_operand" "r,r")
-				  (match_operand:GPR 2 "gpc_reg_operand" "r,r"))
-		    (const_int 0)))
-   (set (match_operand:GPR 0 "gpc_reg_operand" "=r,r")
-	(ss_minus:GPR (match_dup 1)
-		      (match_dup 2)))]
-  "TARGET_FUTURE"
-  "@
-   sub<wd>us. %0,%1,%2
-   #"
-  "&& reload_completed && cc_reg_not_cr0_operand (operands[3], CCmode)"
-  [(set (match_dup 0)
-	(ss_minus:GPR (match_dup 1)
-		      (match_dup 2)))
-   (set (match_dup 3)
-	(compare:CC (match_dup 0)
-		    (const_int 0)))]
-  ""
-  [(set_attr "type" "add")
-   (set_attr "dot" "yes")
-   (set_attr "length" "4,8")])
-\f
 
 (include "sync.md")
 (include "vector.md")
diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
index e4e73db9bb8..fb5cf04147e 100644
--- a/gcc/config/rs6000/vsx.md
+++ b/gcc/config/rs6000/vsx.md
@@ -5582,32 +5582,20 @@
   DONE;
 })
 
-;; Load VSX Vector with Length.  If we have lxvrl, we don't have to do an
-;; explicit shift left into a pseudo.
+;; Load VSX Vector with Length
 (define_expand "lxvl"
-  [(use (match_operand:V16QI 0 "vsx_register_operand"))
-   (use (match_operand:DI 1 "gpc_reg_operand"))
-   (use (match_operand:DI 2 "gpc_reg_operand"))]
+  [(set (match_dup 3)
+        (ashift:DI (match_operand:DI 2 "register_operand")
+                   (const_int 56)))
+   (set (match_operand:V16QI 0 "vsx_register_operand")
+	(unspec:V16QI
+	 [(match_operand:DI 1 "gpc_reg_operand")
+          (mem:V16QI (match_dup 1))
+	  (match_dup 3)]
+	 UNSPEC_LXVL))]
   "TARGET_P9_VECTOR && TARGET_64BIT"
 {
-  rtx shift_len = gen_rtx_ASHIFT (DImode, operands[2], GEN_INT (56));
-  rtx len;
-
-  if (TARGET_FUTURE)
-    len = shift_len;
-  else
-    {
-      len = gen_reg_rtx (DImode);
-      emit_insn (gen_rtx_SET (len, shift_len));
-    }
-
-  rtx dest = operands[0];
-  rtx addr = operands[1];
-  rtx mem = gen_rtx_MEM (V16QImode, addr);
-  rtvec rv = gen_rtvec (3, addr, mem, len);
-  rtx lxvl = gen_rtx_UNSPEC (V16QImode, rv, UNSPEC_LXVL);
-  emit_insn (gen_rtx_SET (dest, lxvl));
-  DONE;
+  operands[3] = gen_reg_rtx (DImode);
 })
 
 (define_insn "*lxvl"
@@ -5631,34 +5619,6 @@
   "lxvll %x0,%1,%2"
   [(set_attr "type" "vecload")])
 
-;; For lxvrl and lxvrll, use the combiner to eliminate the shift.  The
-;; define_expand for lxvl will already incorporate the shift in generating the
-;; insn.  The lxvll buitl-in function required the user to have already done
-;; the shift.  Defining lxvrll this way, will optimize cases where the user has
-;; done the shift immediately before the built-in.
-(define_insn "*lxvrl"
-  [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
-	(unspec:V16QI
-	 [(match_operand:DI 1 "gpc_reg_operand" "b")
-	  (mem:V16QI (match_dup 1))
-	  (ashift:DI (match_operand:DI 2 "register_operand" "r")
-		     (const_int 56))]
-	 UNSPEC_LXVL))]
-  "TARGET_FUTURE && TARGET_64BIT"
-  "lxvrl %x0,%1,%2"
-  [(set_attr "type" "vecload")])
-
-(define_insn "*lxvrll"
-  [(set (match_operand:V16QI 0 "vsx_register_operand" "=wa")
-	(unspec:V16QI [(match_operand:DI 1 "gpc_reg_operand" "b")
-                       (mem:V16QI (match_dup 1))
-		       (ashift:DI (match_operand:DI 2 "register_operand" "r")
-				  (const_int 56))]
-		      UNSPEC_LXVLL))]
-  "TARGET_FUTURE"
-  "lxvrll %x0,%1,%2"
-  [(set_attr "type" "vecload")])
-
 ;; Expand for builtin xl_len_r
 (define_expand "xl_len_r"
   [(match_operand:V16QI 0 "vsx_register_operand")
@@ -5690,29 +5650,18 @@
 
 ;; Store VSX Vector with Length
 (define_expand "stxvl"
-  [(use (match_operand:V16QI 0 "vsx_register_operand"))
-   (use (match_operand:DI 1 "gpc_reg_operand"))
-   (use (match_operand:DI 2 "gpc_reg_operand"))]
+  [(set (match_dup 3)
+	(ashift:DI (match_operand:DI 2 "register_operand")
+		   (const_int 56)))
+   (set (mem:V16QI (match_operand:DI 1 "gpc_reg_operand"))
+	(unspec:V16QI
+	 [(match_operand:V16QI 0 "vsx_register_operand")
+	  (mem:V16QI (match_dup 1))
+	  (match_dup 3)]
+	 UNSPEC_STXVL))]
   "TARGET_P9_VECTOR && TARGET_64BIT"
 {
-  rtx shift_len = gen_rtx_ASHIFT (DImode, operands[2], GEN_INT (56));
-  rtx len;
-
-  if (TARGET_FUTURE)
-    len = shift_len;
-  else
-    {
-      len = gen_reg_rtx (DImode);
-      emit_insn (gen_rtx_SET (len, shift_len));
-    }
-
-  rtx src = operands[0];
-  rtx addr = operands[1];
-  rtx mem = gen_rtx_MEM (V16QImode, addr);
-  rtvec rv = gen_rtvec (3, src, mem, len);
-  rtx stxvl = gen_rtx_UNSPEC (V16QImode, rv, UNSPEC_STXVL);
-  emit_insn (gen_rtx_SET (mem, stxvl));
-  DONE;
+  operands[3] = gen_reg_rtx (DImode);
 })
 
 ;; Define optab for vector access with length vectorization exploitation.
@@ -5756,35 +5705,6 @@
   "stxvl %x0,%1,%2"
   [(set_attr "type" "vecstore")])
 
-;; For stxvrl and stxvrll, use the combiner to eliminate the shift.  The
-;; define_expand for stxvl will already incorporate the shift in generating the
-;; insn.  The stxvll buitl-in function required the user to have already done
-;; the shift.  Defining stxvrll this way, will optimize cases where the user
-;; has done the shift immediately before the built-in.
-
-(define_insn "*stxvrl"
-  [(set (mem:V16QI (match_operand:DI 1 "gpc_reg_operand" "b"))
-	(unspec:V16QI
-	 [(match_operand:V16QI 0 "vsx_register_operand" "wa")
-	  (mem:V16QI (match_dup 1))
-	  (ashift:DI (match_operand:DI 2 "register_operand" "r")
-		     (const_int 56))]
-	 UNSPEC_STXVL))]
-  "TARGET_FUTURE && TARGET_64BIT"
-  "stxvrl %x0,%1,%2"
-  [(set_attr "type" "vecstore")])
-
-(define_insn "*stxvrll"
-  [(set (mem:V16QI (match_operand:DI 1 "gpc_reg_operand" "b"))
-	(unspec:V16QI [(match_operand:V16QI 0 "vsx_register_operand" "wa")
-		       (mem:V16QI (match_dup 1))
-		       (ashift:DI (match_operand:DI 2 "register_operand" "r")
-				  (const_int 56))]
-	              UNSPEC_STXVLL))]
-  "TARGET_FUTURE"
-  "stxvrll %x0,%1,%2"
-  [(set_attr "type" "vecstore")])
-
 ;; Expand for builtin xst_len_r
 (define_expand "xst_len_r"
   [(match_operand:V16QI 0 "vsx_register_operand" "=wa")
diff --git a/gcc/testsuite/gcc.target/powerpc/subfus-1.c b/gcc/testsuite/gcc.target/powerpc/subfus-1.c
deleted file mode 100644
index 68007e96cce..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/subfus-1.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_subfus_ok } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Test whether the saturating subtract built-in generates subwus for 32-bit
-   subtracts.  */
-
-int do_sat_int  (int  a, int  b)
-{
-  return __builtin_saturate_subtract32 (a, b);		/* subwus  */
-}
-
-int do_sat_int_dot  (int  a, int  b, int  *p)
-{
-  int  r = __builtin_saturate_subtract32 (a, b);	/* subwus.  */
-  if (r == 0)
-    *p = 0;
-
-  return r;
-}
-
-void do_sat_int_dot2  (int  a, int  b, int  *p, int *q)
-{
-  if (__builtin_saturate_subtract32 (a, b))		/* subwus.  */
-    *p = 0;
-
-  *q = a + b;
-  return;
-}
-
-/* { dg-final { scan-assembler     {\msubwus\M} } } */
-/* { dg-final { scan-assembler-not {\msubf\M}   } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/subfus-2.c b/gcc/testsuite/gcc.target/powerpc/subfus-2.c
deleted file mode 100644
index 56e6d237900..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/subfus-2.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* { dg-do compile { target lp64 } } */
-/* { dg-require-effective-target powerpc_subfus_ok } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Test whether the saturating subtract built-in generates subwus for 64-bit
-   subtracts.  */
-
-long do_sat_long  (long  a, long  b)
-{
-  return __builtin_saturate_subtract64 (a, b);		/* subwus  */
-}
-
-long do_sat_long_dot  (long  a, long  b, long  *p)
-{
-  long  r = __builtin_saturate_subtract64 (a, b);	/* subwus.  */
-  if (r == 0)
-    *p = 0;
-
-  return r;
-}
-
-void do_sat_long_dot2  (long  a, long  b, long  *p, long *q)
-{
-  if (__builtin_saturate_subtract64 (a, b))		/* subwus.  */
-    *p = 0;
-
-  *q = a + b;
-  return;
-}
-
-/* { dg-final { scan-assembler     {\msubdus\M} } } */
-/* { dg-final { scan-assembler-not {\msubf\M}   } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 8af840d1d3b..b70ebf963f9 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -6553,22 +6553,6 @@ proc check_effective_target_powerpc_dense_math_ok { } {
 	} "-mcpu=future"]
 }
 
-# Return 1 if this is a PowerPC target supporting -mcpu=future which enables
-# the saturating subtract instruction.
-proc check_effective_target_powerpc_subfus_ok { } {
-	return [check_no_compiler_messages_nocache powerpc_subfus_ok assembly {
-		int test (int a, int b)
-		{
-		#ifndef _ARCH_PWR_FUTURE
-		#error "target does not have saturating subtract support."
-		#else
-		/* Make sure we have saturating subtract support.  */
-		  return __builtin_saturate_subtract32 (a, b);
-		#endif
-		}
-	} "-mcpu=future"]
-}
-
 # Return 1 if this is a PowerPC target supporting -mfloat128 via either
 # software emulation on power7/power8 systems or hardware support on power9.

^ permalink raw reply	[flat|nested] 4+ messages in thread

* [gcc(refs/users/meissner/heads/dmf004)] Revert patches.
@ 2022-11-09 22:35 Michael Meissner
  0 siblings, 0 replies; 4+ messages in thread
From: Michael Meissner @ 2022-11-09 22:35 UTC (permalink / raw)
  To: gcc-cvs

https://gcc.gnu.org/g:9d0b6ed74664a867d402897bf65ea7baeaab2323

commit 9d0b6ed74664a867d402897bf65ea7baeaab2323
Author: Michael Meissner <meissner@linux.ibm.com>
Date:   Wed Nov 9 17:34:20 2022 -0500

    Revert patches.
    
    gcc/
    
            Revert patches.
            * config/rs6000/mma.md (UNSPEC_DM_INSERT512_UPPER): New unspec.
            (UNSPEC_DM_INSERT512_LOWER): Likewise.
            (UNSPEC_DM_EXTRACT512): Likewise.
            (UNSPEC_DMR_RELOAD_FROM_MEMORY): Likewise.
            (UNSPEC_DMR_RELOAD_TO_MEMORY): Likewise.
            (movtdo): New define_expand and define_insn_and_split to implement 1,024
            bit DMR registers.
            (movtdo_insert512_upper): New insn.
            (movtdo_insert512_lower): Likewise.
            (movtdo_extract512): Likewise.
            (reload_dmr_from_memory): Likewise.
            (reload_dmr_to_memory): Likewise.
            * config/rs6000/rs6000-builtin.cc (rs6000_type_string): Add DMR
            support.
            (rs6000_init_builtins): Add support for __dmr keyword.
            * config/rs6000/rs6000-call.cc (rs6000_return_in_memory): Add support
            for TDOmode.
            (rs6000_function_arg): Likewise.
            * config/rs6000/rs6000-modes.def (TDOmode): New mode.
            * config/rs6000/rs6000.cc (rs6000_hard_regno_nregs_internal): Add
            support for TDOmode.
            (rs6000_hard_regno_mode_ok_uncached): Likewise.
            (rs6000_hard_regno_mode_ok): Likewise.
            (rs6000_modes_tieable_p): Likewise.
            (rs6000_debug_reg_global): Likewise.
            (rs6000_setup_reg_addr_masks): Likewise.
            (rs6000_init_hard_regno_mode_ok): Add support for TDOmode.  Setup reload
            hooks for DMR mode.
            (reg_offset_addressing_ok_p): Add support for TDOmode.
            (rs6000_emit_move): Likewise.
            (rs6000_secondary_reload_simple_move): Likewise.
            (rs6000_secondary_reload_class): Likewise.
            (rs6000_mangle_type): Add mangling for __dmr type.
            (rs6000_dmr_register_move_cost): Add support for TDOmode.
            (rs6000_split_multireg_move): Likewise.
            (rs6000_invalid_conversion): Likewise.
            * config/rs6000/rs6000.h (VECTOR_ALIGNMENT_P): Add TDOmode.
            (enum rs6000_builtin_type_index): Add DMR type nodes.
            (dmr_type_node): Likewise.
            (ptr_dmr_type_node): Likewise.
    
    gcc/testsuite/
    
            Revert patches.
            * gcc.target/powerpc/dm-1024bit.c: New test.
    
    gcc/
    
            Revert patches.
            * config/rs6000/mma.md (vvi4i4i8_dm): New int attribute.
            (avvi4i4i8_dm): Likewise.
            (vvi4i4i2_dm): Likewise.
            (avvi4i4i2_dm): Likewise.
            (vvi4i4_dm): Likewise.
            (avvi4i4_dm): Likewise.
            (pvi4i2_dm): Likewise.
            (apvi4i2_dm): Likewise.
            (vvi4i4i4_dm): Likewise.
            (avvi4i4i4_dm): Likewise.
            (mma_<vv>): Add support for running on DMF systems, generating the dense
            math instruction and using the dense math accumulators.
            (mma_<avv>): Likewise.
            (mma_<pv>): Likewise.
            (mma_<apv>): Likewise.
            (mma_<vvi4i4i8>): Likewise.
            (mma_<avvi4i4i8>): Likewise.
            (mma_<vvi4i4i2>): Likewise.
            (mma_<avvi4i4i2>): Likewise.
            (mma_<vvi4i4>): Likewise.
            (mma_<avvi4i4): Likewise.
            (mma_<pvi4i2>): Likewise.
            (mma_<apvi4i2): Likewise.
            (mma_<vvi4i4i4>): Likewise.
            (mma_<avvi4i4i4>): Likewise.
    
    gcc/testsuite/
    
            Revert patches.
            * gcc.target/powerpc/dm-double-test.c: New test.
            * lib/target-supports.exp (check_effective_target_ppc_dmr_ok): New
            target test.

Diff:
---
 gcc/config/rs6000/mma.md                          | 250 ++--------------------
 gcc/config/rs6000/rs6000-builtin.cc               |  13 --
 gcc/config/rs6000/rs6000-call.cc                  |  13 +-
 gcc/config/rs6000/rs6000-modes.def                |   4 -
 gcc/config/rs6000/rs6000.cc                       | 125 +++--------
 gcc/config/rs6000/rs6000.h                        |   7 +-
 gcc/testsuite/gcc.target/powerpc/dm-1024bit.c     |  68 ------
 gcc/testsuite/gcc.target/powerpc/dm-double-test.c | 194 -----------------
 gcc/testsuite/lib/target-supports.exp             |  19 --
 9 files changed, 44 insertions(+), 649 deletions(-)

diff --git a/gcc/config/rs6000/mma.md b/gcc/config/rs6000/mma.md
index 2c08ad7619a..835f34e8e00 100644
--- a/gcc/config/rs6000/mma.md
+++ b/gcc/config/rs6000/mma.md
@@ -92,11 +92,6 @@
    UNSPEC_MMA_XXMFACC
    UNSPEC_MMA_XXMTACC
    UNSPEC_DM_ASSEMBLE_ACC
-   UNSPEC_DM_INSERT512_UPPER
-   UNSPEC_DM_INSERT512_LOWER
-   UNSPEC_DM_EXTRACT512
-   UNSPEC_DMR_RELOAD_FROM_MEMORY
-   UNSPEC_DMR_RELOAD_TO_MEMORY
   ])
 
 (define_c_enum "unspecv"
@@ -232,22 +227,13 @@
 
 (define_int_attr vvi4i4i8	[(UNSPEC_MMA_PMXVI4GER8		"pmxvi4ger8")])
 
-(define_int_attr vvi4i4i8_dm	[(UNSPEC_MMA_PMXVI4GER8		"pmdmxvi4ger8")])
-
 (define_int_attr avvi4i4i8	[(UNSPEC_MMA_PMXVI4GER8PP	"pmxvi4ger8pp")])
 
-(define_int_attr avvi4i4i8_dm	[(UNSPEC_MMA_PMXVI4GER8PP	"pmdmxvi4ger8pp")])
-
 (define_int_attr vvi4i4i2	[(UNSPEC_MMA_PMXVI16GER2	"pmxvi16ger2")
 				 (UNSPEC_MMA_PMXVI16GER2S	"pmxvi16ger2s")
 				 (UNSPEC_MMA_PMXVF16GER2	"pmxvf16ger2")
 				 (UNSPEC_MMA_PMXVBF16GER2	"pmxvbf16ger2")])
 
-(define_int_attr vvi4i4i2_dm	[(UNSPEC_MMA_PMXVI16GER2	"pmdmxvi16ger2")
-				 (UNSPEC_MMA_PMXVI16GER2S	"pmdmxvi16ger2s")
-				 (UNSPEC_MMA_PMXVF16GER2	"pmdmxvf16ger2")
-				 (UNSPEC_MMA_PMXVBF16GER2	"pmdmxvbf16ger2")])
-
 (define_int_attr avvi4i4i2	[(UNSPEC_MMA_PMXVI16GER2PP	"pmxvi16ger2pp")
 				 (UNSPEC_MMA_PMXVI16GER2SPP	"pmxvi16ger2spp")
 				 (UNSPEC_MMA_PMXVF16GER2PP	"pmxvf16ger2pp")
@@ -259,54 +245,25 @@
 				 (UNSPEC_MMA_PMXVBF16GER2NP	"pmxvbf16ger2np")
 				 (UNSPEC_MMA_PMXVBF16GER2NN	"pmxvbf16ger2nn")])
 
-(define_int_attr avvi4i4i2_dm	[(UNSPEC_MMA_PMXVI16GER2PP	"pmdmxvi16ger2pp")
-				 (UNSPEC_MMA_PMXVI16GER2SPP	"pmdmxvi16ger2spp")
-				 (UNSPEC_MMA_PMXVF16GER2PP	"pmdmxvf16ger2pp")
-				 (UNSPEC_MMA_PMXVF16GER2PN	"pmdmxvf16ger2pn")
-				 (UNSPEC_MMA_PMXVF16GER2NP	"pmdmxvf16ger2np")
-				 (UNSPEC_MMA_PMXVF16GER2NN	"pmdmxvf16ger2nn")
-				 (UNSPEC_MMA_PMXVBF16GER2PP	"pmdmxvbf16ger2pp")
-				 (UNSPEC_MMA_PMXVBF16GER2PN	"pmdmxvbf16ger2pn")
-				 (UNSPEC_MMA_PMXVBF16GER2NP	"pmdmxvbf16ger2np")
-				 (UNSPEC_MMA_PMXVBF16GER2NN	"pmdmxvbf16ger2nn")])
-
 (define_int_attr vvi4i4		[(UNSPEC_MMA_PMXVF32GER		"pmxvf32ger")])
 
-(define_int_attr vvi4i4_dm	[(UNSPEC_MMA_PMXVF32GER		"pmdmxvf32ger")])
-
 (define_int_attr avvi4i4	[(UNSPEC_MMA_PMXVF32GERPP	"pmxvf32gerpp")
 				 (UNSPEC_MMA_PMXVF32GERPN	"pmxvf32gerpn")
 				 (UNSPEC_MMA_PMXVF32GERNP	"pmxvf32gernp")
 				 (UNSPEC_MMA_PMXVF32GERNN	"pmxvf32gernn")])
 
-(define_int_attr avvi4i4_dm	[(UNSPEC_MMA_PMXVF32GERPP	"pmdmxvf32gerpp")
-				 (UNSPEC_MMA_PMXVF32GERPN	"pmdmxvf32gerpn")
-				 (UNSPEC_MMA_PMXVF32GERNP	"pmdmxvf32gernp")
-				 (UNSPEC_MMA_PMXVF32GERNN	"pmdmxvf32gernn")])
-
 (define_int_attr pvi4i2		[(UNSPEC_MMA_PMXVF64GER		"pmxvf64ger")])
 
-(define_int_attr pvi4i2_dm	[(UNSPEC_MMA_PMXVF64GER		"pmdmxvf64ger")])
-
 (define_int_attr apvi4i2	[(UNSPEC_MMA_PMXVF64GERPP	"pmxvf64gerpp")
 				 (UNSPEC_MMA_PMXVF64GERPN	"pmxvf64gerpn")
 				 (UNSPEC_MMA_PMXVF64GERNP	"pmxvf64gernp")
 				 (UNSPEC_MMA_PMXVF64GERNN	"pmxvf64gernn")])
 
-(define_int_attr apvi4i2_dm	[(UNSPEC_MMA_PMXVF64GERPP	"pmdmxvf64gerpp")
-				 (UNSPEC_MMA_PMXVF64GERPN	"pmdmxvf64gerpn")
-				 (UNSPEC_MMA_PMXVF64GERNP	"pmdmxvf64gernp")
-				 (UNSPEC_MMA_PMXVF64GERNN	"pmdmxvf64gernn")])
-
 (define_int_attr vvi4i4i4	[(UNSPEC_MMA_PMXVI8GER4		"pmxvi8ger4")])
 
-(define_int_attr vvi4i4i4_dm	[(UNSPEC_MMA_PMXVI8GER4		"pmdmxvi8ger4")])
-
 (define_int_attr avvi4i4i4	[(UNSPEC_MMA_PMXVI8GER4PP	"pmxvi8ger4pp")
 				 (UNSPEC_MMA_PMXVI8GER4SPP	"pmxvi8ger4spp")])
 
-(define_int_attr avvi4i4i4_dm	[(UNSPEC_MMA_PMXVI8GER4PP	"pmdmxvi8ger4pp")
-				 (UNSPEC_MMA_PMXVI8GER4SPP	"pmdmxvi8ger4spp")])
 
 ;; Vector pair support.  OOmode can only live in VSRs.
 (define_expand "movoo"
@@ -658,10 +615,7 @@
 		    (match_operand:V16QI 2 "vsx_register_operand" "wa,v,?wa")]
 		    MMA_VV))]
   "TARGET_MMA"
-  "@
-   dm<vv> %A0,%x1,%x2
-   <vv> %A0,%x1,%x2
-   <vv> %A0,%x1,%x2"
+  "<vv> %A0,%x1,%x2"
   [(set_attr "type" "mma")
    (set_attr "isa" "dm,not_dm,not_dm")])
 
@@ -682,10 +636,7 @@
 		    (match_operand:V16QI 2 "vsx_register_operand" "wa,v,?wa")]
 		    MMA_PV))]
   "TARGET_MMA"
-  "@
-   dm<pv> %A0,%x1,%x2
-   <pv> %A0,%x1,%x2
-   <pv> %A0,%x1,%x2"
+  "<pv> %A0,%x1,%x2"
   [(set_attr "type" "mma")
    (set_attr "isa" "dm,not_dm,not_dm")])
 
@@ -696,10 +647,7 @@
 		    (match_operand:V16QI 3 "vsx_register_operand" "wa,v,?wa")]
 		    MMA_APV))]
   "TARGET_MMA"
-  "@
-   dm<apv> %A0,%x2,%x3
-   <apv> %A0,%x2,%x3
-   <apv> %A0,%x2,%x3"
+  "<apv> %A0,%x2,%x3"
   [(set_attr "type" "mma")
    (set_attr "isa" "dm,not_dm,not_dm")])
 
@@ -712,10 +660,7 @@
 		    (match_operand:SI 5 "u8bit_cint_operand" "n,n,n")]
 		    MMA_VVI4I4I8))]
   "TARGET_MMA"
-  "@
-   dm<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i8> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"
+  "<vvi4i4i8> %A0,%x1,%x2,%3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -744,10 +689,7 @@
 		    (match_operand:SI 5 "const_0_to_3_operand" "n,n,n")]
 		    MMA_VVI4I4I2))]
   "TARGET_MMA"
-  "@
-   <vvi4i4i2_dm> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i2> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i2> %A0,%x1,%x2,%3,%4,%5"
+  "<vvi4i4i2> %A0,%x1,%x2,%3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -762,10 +704,7 @@
 		    (match_operand:SI 6 "const_0_to_3_operand" "n,n,n")]
 		    MMA_AVVI4I4I2))]
   "TARGET_MMA"
-  "@
-   <avvi4i4i2_dm> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i2> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i2> %A0,%x2,%x3,%4,%5,%6"
+  "<avvi4i4i2> %A0,%x2,%x3,%4,%5,%6"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -778,10 +717,7 @@
 		    (match_operand:SI 4 "const_0_to_15_operand" "n,n,n")]
 		    MMA_VVI4I4))]
   "TARGET_MMA"
-  "@
-   <vvi4i4_dm> %A0,%x1,%x2,%3,%4
-   <vvi4i4> %A0,%x1,%x2,%3,%4
-   <vvi4i4> %A0,%x1,%x2,%3,%4"
+  "<vvi4i4> %A0,%x1,%x2,%3,%4"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -795,10 +731,7 @@
 		    (match_operand:SI 5 "const_0_to_15_operand" "n,n,n")]
 		    MMA_AVVI4I4))]
   "TARGET_MMA"
-  "@
-   <avvi4i4_dm> %A0,%x2,%x3,%4,%5
-   <avvi4i4> %A0,%x2,%x3,%4,%5
-   <avvi4i4> %A0,%x2,%x3,%4,%5"
+  "<avvi4i4> %A0,%x2,%x3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -811,10 +744,7 @@
 		    (match_operand:SI 4 "const_0_to_3_operand" "n,n,n")]
 		    MMA_PVI4I2))]
   "TARGET_MMA"
-  "@
-   <pvi4i2_dm> %A0,%x1,%x2,%3,%4
-   <pvi4i2> %A0,%x1,%x2,%3,%4
-   <pvi4i2> %A0,%x1,%x2,%3,%4"
+  "<pvi4i2> %A0,%x1,%x2,%3,%4"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -828,10 +758,7 @@
 		    (match_operand:SI 5 "const_0_to_3_operand" "n,n,n")]
 		    MMA_APVI4I2))]
   "TARGET_MMA"
-  "@
-   <apvi4i2_dm> %A0,%x2,%x3,%4,%5
-   <apvi4i2> %A0,%x2,%x3,%4,%5
-   <apvi4i2> %A0,%x2,%x3,%4,%5"
+  "<apvi4i2> %A0,%x2,%x3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -845,10 +772,7 @@
 		    (match_operand:SI 5 "const_0_to_15_operand" "n,n,n")]
 		    MMA_VVI4I4I4))]
   "TARGET_MMA"
-  "@
-   <vvi4i4i4_dm> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i4> %A0,%x1,%x2,%3,%4,%5
-   <vvi4i4i4> %A0,%x1,%x2,%3,%4,%5"
+  "<vvi4i4i4> %A0,%x1,%x2,%3,%4,%5"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
@@ -863,157 +787,7 @@
 		    (match_operand:SI 6 "const_0_to_15_operand" "n,n,n")]
 		    MMA_AVVI4I4I4))]
   "TARGET_MMA"
-  "@
-   <avvi4i4i4_dm> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i4> %A0,%x2,%x3,%4,%5,%6
-   <avvi4i4i4> %A0,%x2,%x3,%4,%5,%6"
+  "<avvi4i4i4> %A0,%x2,%x3,%4,%5,%6"
   [(set_attr "type" "mma")
    (set_attr "prefixed" "yes")
    (set_attr "isa" "dm,not_dm,not_dm")])
-
-\f
-;; TDOmode (i.e. __dmr).
-(define_expand "movtdo"
-  [(set (match_operand:TDO 0 "nonimmediate_operand")
-	(match_operand:TDO 1 "input_operand"))]
-  "TARGET_DENSE_MATH"
-{
-  rs6000_emit_move (operands[0], operands[1], TDOmode);
-  DONE;
-})
-
-(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_DENSE_MATH
-   && (gpc_reg_operand (operands[0], TDOmode)
-       || gpc_reg_operand (operands[1], TDOmode))"
-  "@
-   #
-   #
-   #
-   #
-   dmmr %0,%1
-   #"
-  "&& reload_completed
-   && (!dmr_operand (operands[0], TDOmode) || !dmr_operand (operands[1], TDOmode))"
-  [(const_int 0)]
-{
-  rtx op0 = operands[0];
-  rtx op1 = operands[1];
-
-  if (REG_P (op0) && REG_P (op1))
-    {
-      int regno0 = REGNO (op0);
-      int regno1 = REGNO (op1);
-
-      if (DMR_REGNO_P (regno0) && VSX_REGNO_P (regno1))
-	{
-	  rtx op1_upper = gen_rtx_REG (XOmode, regno1);
-	  rtx op1_lower = gen_rtx_REG (XOmode, regno1 + 4);
-	  emit_insn (gen_movtdo_insert512_upper (op0, op1_upper));
-	  emit_insn (gen_movtdo_insert512_lower (op0, op0, op1_lower));
-	  DONE;
-	}
-
-      else if (VSX_REGNO_P (regno0) && DMR_REGNO_P (regno1))
-	{
-	  rtx op0_upper = gen_rtx_REG (XOmode, regno0);
-	  rtx op0_lower = gen_rtx_REG (XOmode, regno0 + 4);
-	  emit_insn (gen_movtdo_extract512 (op0_upper, op1, const0_rtx));
-	  emit_insn (gen_movtdo_extract512 (op0_lower, op1, const1_rtx));
-	  DONE;
-	}
-    }
-
-  rs6000_split_multireg_move (operands[0], operands[1]);
-  DONE;
-}
-  [(set_attr "type" "vecload,vecstore,vecmove,vecmove,vecmove,vecmove")
-   (set_attr "length" "*,*,32,8,*,8")
-   (set_attr "max_prefixed_insns" "4,4,*,*,*,*")])
-
-;; Move from VSX registers to DMR registers via two insert 512 bit
-;; instructions.
-(define_insn "movtdo_insert512_upper"
-  [(set (match_operand:TDO 0 "dmr_operand" "=wD")
-	(unspec:TDO [(match_operand:XO 1 "vsx_register_operand" "wa")]
-		    UNSPEC_DM_INSERT512_UPPER))]
-  "TARGET_DENSE_MATH"
-  "dmxxinstdmr512 %0,%1,%Y1,0"
-  [(set_attr "type" "mma")])
-
-(define_insn "movtdo_insert512_lower"
-  [(set (match_operand:TDO 0 "dmr_operand" "=wD")
-	(unspec:TDO [(match_operand:TDO 1 "dmr_operand" "0")
-		     (match_operand:XO 2 "vsx_register_operand" "wa")]
-		    UNSPEC_DM_INSERT512_LOWER))]
-  "TARGET_DENSE_MATH"
-  "dmxxinstdmr512 %0,%2,%Y2,1"
-  [(set_attr "type" "mma")])
-
-;; Move from DMR registers to VSX registers via two extract 512 bit
-;; instructions.
-(define_insn "movtdo_extract512"
-  [(set (match_operand:XO 0 "vsx_register_operand" "=wa")
-	(unspec:XO [(match_operand:TDO 1 "dmr_operand" "wD")
-		    (match_operand 2 "const_0_to_1_operand" "n")]
-		   UNSPEC_DM_EXTRACT512))]
-  "TARGET_DENSE_MATH"
-  "dmxxextfdmr512 %0,%Y0,%1,%2"
-  [(set_attr "type" "mma")])
-
-;; Reload DMR registers from memory
-(define_insn_and_split "reload_dmr_from_memory"
-  [(set (match_operand:TDO 0 "dmr_operand" "=wD")
-	(unspec:TDO [(match_operand:TDO 1 "memory_operand" "m")]
-		    UNSPEC_DMR_RELOAD_FROM_MEMORY))
-   (clobber (match_operand:XO 2 "vsx_register_operand" "=wa"))]
-  "TARGET_DENSE_MATH"
-  "#"
-  "&& reload_completed"
-  [(const_int 0)]
-{
-  rtx dest = operands[0];
-  rtx src = operands[1];
-  rtx tmp = operands[2];
-  rtx mem_upper = adjust_address (src, XOmode, BYTES_BIG_ENDIAN ? 0 : 32);
-  rtx mem_lower = adjust_address (src, XOmode, BYTES_BIG_ENDIAN ? 32 : 0);
-
-  emit_move_insn (tmp, mem_upper);
-  emit_insn (gen_movtdo_insert512_upper (dest, tmp));
-
-  emit_move_insn (tmp, mem_lower);
-  emit_insn (gen_movtdo_insert512_lower (dest, dest, tmp));
-  DONE;
-}
-  [(set_attr "length" "16")
-   (set_attr "max_prefixed_insns" "2")
-   (set_attr "type" "vecload")])
-
-;; Reload dense math registers to memory
-(define_insn_and_split "reload_dmr_to_memory"
-  [(set (match_operand:TDO 0 "memory_operand" "=m")
-	(unspec:TDO [(match_operand:TDO 1 "dmr_operand" "wD")]
-		    UNSPEC_DMR_RELOAD_TO_MEMORY))
-   (clobber (match_operand:XO 2 "vsx_register_operand" "=wa"))]
-  "TARGET_DENSE_MATH"
-  "#"
-  "&& reload_completed"
-  [(const_int 0)]
-{
-  rtx dest = operands[0];
-  rtx src = operands[1];
-  rtx tmp = operands[2];
-  rtx mem_upper = adjust_address (dest, XOmode, BYTES_BIG_ENDIAN ? 0 : 32);
-  rtx mem_lower = adjust_address (dest, XOmode, BYTES_BIG_ENDIAN ? 32 : 0);
-
-  emit_insn (gen_movtdo_extract512 (tmp, src, const0_rtx));
-  emit_move_insn (mem_upper, tmp);
-
-  emit_insn (gen_movtdo_extract512 (tmp, src, const1_rtx));
-  emit_move_insn (mem_lower, tmp);
-  DONE;
-}
-  [(set_attr "length" "16")
-   (set_attr "max_prefixed_insns" "2")])
diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index f4eba184db8..e5298f45363 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -495,8 +495,6 @@ const char *rs6000_type_string (tree type_node)
     return "__vector_pair";
   else if (type_node == vector_quad_type_node)
     return "__vector_quad";
-  else if (type_node == dmr_type_node)
-    return "__dmr";
 
   return "unknown";
 }
@@ -786,17 +784,6 @@ rs6000_init_builtins (void)
   t = build_qualified_type (vector_quad_type_node, TYPE_QUAL_CONST);
   ptr_vector_quad_type_node = build_pointer_type (t);
 
-  dmr_type_node = make_node (OPAQUE_TYPE);
-  SET_TYPE_MODE (dmr_type_node, TDOmode);
-  TYPE_SIZE (dmr_type_node) = bitsize_int (GET_MODE_BITSIZE (TDOmode));
-  TYPE_PRECISION (dmr_type_node) = GET_MODE_BITSIZE (TDOmode);
-  TYPE_SIZE_UNIT (dmr_type_node) = size_int (GET_MODE_SIZE (TDOmode));
-  SET_TYPE_ALIGN (dmr_type_node, 512);
-  TYPE_USER_ALIGN (dmr_type_node) = 0;
-  lang_hooks.types.register_builtin_type (dmr_type_node, "__dmr");
-  t = build_qualified_type (dmr_type_node, TYPE_QUAL_CONST);
-  ptr_dmr_type_node = build_pointer_type (t);
-
   tdecl = add_builtin_type ("__bool char", bool_char_type_node);
   TYPE_NAME (bool_char_type_node) = tdecl;
 
diff --git a/gcc/config/rs6000/rs6000-call.cc b/gcc/config/rs6000/rs6000-call.cc
index 13eacd3a84d..6da4de67137 100644
--- a/gcc/config/rs6000/rs6000-call.cc
+++ b/gcc/config/rs6000/rs6000-call.cc
@@ -437,8 +437,7 @@ rs6000_return_in_memory (const_tree type, const_tree fntype ATTRIBUTE_UNUSED)
   if (cfun
       && !cfun->machine->mma_return_type_error
       && TREE_TYPE (cfun->decl) == fntype
-      && (TYPE_MODE (type) == OOmode || TYPE_MODE (type) == XOmode
-	  || TYPE_MODE (type) == TDOmode))
+      && (TYPE_MODE (type) == OOmode || TYPE_MODE (type) == XOmode))
     {
       /* Record we have now handled function CFUN, so the next time we
 	 are called, we do not re-report the same error.  */
@@ -1642,16 +1641,6 @@ rs6000_function_arg (cumulative_args_t cum_v, const function_arg_info &arg)
       return NULL_RTX;
     }
 
-  if (mode == TDOmode)
-    {
-      if (TYPE_CANONICAL (type) != NULL_TREE)
-	type = TYPE_CANONICAL (type);
-      error ("invalid use of dense math operand of type %qs as a function "
-	     "parameter",
-	     IDENTIFIER_POINTER (DECL_NAME (TYPE_NAME (type))));
-      return NULL_RTX;
-    }
-
   /* Return a marker to indicate whether CR1 needs to set or clear the
      bit that V.4 uses to say fp args were passed in registers.
      Assume that we don't need the marker for software floating point,
diff --git a/gcc/config/rs6000/rs6000-modes.def b/gcc/config/rs6000/rs6000-modes.def
index a1384d5dd91..8ef910869c5 100644
--- a/gcc/config/rs6000/rs6000-modes.def
+++ b/gcc/config/rs6000/rs6000-modes.def
@@ -86,7 +86,3 @@ PARTIAL_INT_MODE (TI, 128, PTI);
 /* Modes used by __vector_pair and __vector_quad.  */
 OPAQUE_MODE (OO, 32);
 OPAQUE_MODE (XO, 64);
-
-/* Modes used by __dmr.  */
-OPAQUE_MODE (TDO, 128);
-
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index dba37df3c61..361fd87aa8c 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -1820,9 +1820,7 @@ rs6000_hard_regno_nregs_internal (int regno, machine_mode mode)
      128-bit floating point that can go in vector registers, which has VSX
      memory addressing.  */
   if (FP_REGNO_P (regno))
-    reg_size = (VECTOR_MEM_VSX_P (mode)
-		|| VECTOR_ALIGNMENT_P (mode)
-		|| mode == TDOmode
+    reg_size = (VECTOR_MEM_VSX_P (mode) || VECTOR_ALIGNMENT_P (mode)
 		? UNITS_PER_VSX_WORD
 		: UNITS_PER_FP_WORD);
 
@@ -1855,9 +1853,9 @@ rs6000_hard_regno_mode_ok_uncached (int regno, machine_mode mode)
 
   /* On power10, MMA accumulator modes need FPR registers divisible by 4.
 
-     If dense math is enabled, allow all VSX registers plus the dense math
-     registers.  We need to make sure we don't cross between the boundary of
-     FPRs and traditional Altiviec registers.  */
+     If dense math is enabled, allow all VSX registers plus the DMR registers.
+     We need to make sure we don't cross between the boundary of FPRs and
+     traditional Altiviec registers.  */
   if (mode == XOmode)
     {
       if (TARGET_MMA && !TARGET_DENSE_MATH)
@@ -1879,27 +1877,7 @@ rs6000_hard_regno_mode_ok_uncached (int regno, machine_mode mode)
 	return 0;
     }
 
-  /* Dense math register modes need DMR registers or VSX registers divisible by
-     2.  We need to make sure we don't cross between the boundary of FPRs and
-     traditional Altiviec registers.  */
-  if (mode == TDOmode)
-    {
-      if (!TARGET_DENSE_MATH)
-	return 0;
-
-      if (DMR_REGNO_P (regno))
-	return 1;
-
-      if (FP_REGNO_P (regno))
-	return ((regno & 1) == 0 && regno <= LAST_FPR_REGNO - 7);
-
-      if (ALTIVEC_REGNO_P (regno))
-	return ((regno & 1) == 0 && regno <= LAST_ALTIVEC_REGNO - 7);
-
-      return 0;
-    }
-
-  /* No other types other than XOmode or TDOmode can go in DMRs.  */
+  /* No other types other than XOmode can go in DMRs.  */
   if (DMR_REGNO_P (regno))
     return 0;
 
@@ -2007,11 +1985,9 @@ rs6000_hard_regno_mode_ok (unsigned int regno, machine_mode mode)
    GPR registers, and TImode can go in any GPR as well as VSX registers (PR
    57744).
 
-   Similarly, don't allow OOmode (vector pair), XOmode (vector quad), or
-   TDOmode (dmr register) to pair with anything else.  Vector pairs are
-   restricted to even/odd VSX registers.  Without dense math, vector quads are
-   limited to FPR registers divisible by 4.  With dense math, vector quads are
-   limited to even VSX registers or DMR registers.
+   Similarly, don't allow OOmode (vector pair, restricted to even VSX
+   registers) or XOmode (vector quad, restricted to FPR registers divisible
+   by 4) to tie with other modes.
 
    Altivec/VSX vector tests were moved ahead of scalar float mode, so that IEEE
    128-bit floating point on VSX systems ties with other vectors.  */
@@ -2020,8 +1996,7 @@ static bool
 rs6000_modes_tieable_p (machine_mode mode1, machine_mode mode2)
 {
   if (mode1 == PTImode || mode1 == OOmode || mode1 == XOmode
-      || mode1 == TDOmode || mode2 == PTImode || mode2 == OOmode
-      || mode2 == XOmode || mode2 == TDOmode)
+      || mode2 == PTImode || mode2 == OOmode || mode2 == XOmode)
     return mode1 == mode2;
 
   if (ALTIVEC_OR_VSX_VECTOR_MODE (mode1))
@@ -2312,7 +2287,6 @@ rs6000_debug_reg_global (void)
     V4DFmode,
     OOmode,
     XOmode,
-    TDOmode,
     CCmode,
     CCUNSmode,
     CCEQmode,
@@ -2678,7 +2652,7 @@ rs6000_setup_reg_addr_masks (void)
 	  /* Special case DMR registers.  */
 	  if (rc == RELOAD_REG_DMR)
 	    {
-	      if (TARGET_DENSE_MATH && (m2 == XOmode || m2 == TDOmode))
+	      if (TARGET_DENSE_MATH && m2 == XOmode)
 		{
 		  addr_mask = RELOAD_REG_VALID;
 		  reg_addr[m].addr_mask[rc] = addr_mask;
@@ -2788,7 +2762,7 @@ rs6000_setup_reg_addr_masks (void)
 	     since it will be broken into two vector moves.  Vector quads and
 	     1,024 bit DMR values can only do offset loads.  */
 	  else if ((addr_mask != 0) && TARGET_MMA
-		   && (m2 == OOmode || m2 == XOmode || m2 == TDOmode))
+		   && (m2 == OOmode || m2 == XOmode))
 	    {
 	      addr_mask |= RELOAD_REG_OFFSET;
 	      if (rc == RELOAD_REG_FPR || rc == RELOAD_REG_VMX)
@@ -3016,14 +2990,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
       rs6000_vector_align[XOmode] = 512;
     }
 
-  /* Add support for 1,024 bit DMR registers.  */
-  if (TARGET_DENSE_MATH)
-    {
-      rs6000_vector_unit[TDOmode] = VECTOR_NONE;
-      rs6000_vector_mem[TDOmode] = VECTOR_VSX;
-      rs6000_vector_align[TDOmode] = 512;
-    }
-
   /* Register class constraints for the constraints that depend on compile
      switches. When the VSX code was added, different constraints were added
      based on the type (DFmode, V2DFmode, V4SFmode).  For the vector types, all
@@ -3237,12 +3203,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
 	}
     }
 
-  if (TARGET_DENSE_MATH)
-    {
-      reg_addr[TDOmode].reload_load = CODE_FOR_reload_dmr_from_memory;
-      reg_addr[TDOmode].reload_store = CODE_FOR_reload_dmr_to_memory;
-    }
-
   /* Precalculate HARD_REGNO_NREGS.  */
   for (r = 0; HARD_REGISTER_NUM_P (r); ++r)
     for (m = 0; m < NUM_MACHINE_MODES; ++m)
@@ -8718,15 +8678,12 @@ reg_offset_addressing_ok_p (machine_mode mode)
 	return mode_supports_dq_form (mode);
       break;
 
-      /* The vector pair/quad types and the dense math types support offset
-	 addressing if the underlying vectors support offset addressing.  */
+      /* The vector pair/quad types support offset addressing if the
+	 underlying vectors support offset addressing.  */
     case E_OOmode:
     case E_XOmode:
       return TARGET_MMA;
 
-    case E_TDOmode:
-      return TARGET_DENSE_MATH;
-
     case E_SDmode:
       /* If we can do direct load/stores of SDmode, restrict it to reg+reg
 	 addressing for the LFIWZX and STFIWX instructions.  */
@@ -11005,12 +10962,6 @@ rs6000_emit_move (rtx dest, rtx source, machine_mode mode)
 	       (mode == OOmode) ? "__vector_pair" : "__vector_quad");
       break;
 
-    case E_TDOmode:
-      if (CONST_INT_P (operands[1]))
-	error ("%qs is an opaque type, and you cannot set it to constants",
-	       "__dmr");
-      break;
-
     case E_SImode:
     case E_DImode:
       /* Use default pattern for address of ELF small data */
@@ -12465,7 +12416,7 @@ rs6000_secondary_reload_simple_move (enum rs6000_reg_type to_type,
 
   /* We can transfer between VSX registers and DMR registers without needing
      extra registers.  */
-  if (TARGET_DENSE_MATH && (mode == XOmode || mode == TDOmode)
+  if (TARGET_DENSE_MATH && mode == XOmode
       && ((to_type == DMR_REG_TYPE && from_type == VSX_REG_TYPE)
 	  || (to_type == VSX_REG_TYPE && from_type == DMR_REG_TYPE)))
     return true;
@@ -13266,9 +13217,6 @@ rs6000_preferred_reload_class (rtx x, enum reg_class rclass)
       if (mode == XOmode)
 	return TARGET_DENSE_MATH ? VSX_REGS : FLOAT_REGS;
 
-      if (mode == TDOmode)
-	return VSX_REGS;
-
       if (GET_MODE_CLASS (mode) == MODE_INT)
 	return GENERAL_REGS;
     }
@@ -13392,9 +13340,8 @@ rs6000_secondary_reload_class (enum reg_class rclass, machine_mode mode,
   else
     regno = -1;
 
-  /* Dense math registers don't have loads or stores.  We have to go through
-     the VSX registers to load XOmode (vector quad) and TDOmode (dmr 1024
-     bit).  */
+  /* DMR registers don't have loads or stores.  We have to go through the VSX
+     registers to load XOmode (vector quad).  */
   if (TARGET_DENSE_MATH && rclass == DM_REGS)
     return VSX_REGS;
 
@@ -20420,8 +20367,6 @@ rs6000_mangle_type (const_tree type)
     return "u13__vector_pair";
   if (type == vector_quad_type_node)
     return "u13__vector_quad";
-  if (type == dmr_type_node)
-    return "u5__dmr";
 
   /* For all other types, use the default mangling.  */
   return NULL;
@@ -22545,10 +22490,6 @@ rs6000_dmr_register_move_cost (machine_mode mode, reg_class_t rclass)
       if (mode == XOmode)
 	return reg_move_base;
 
-      /* __dmr (i.e. TDOmode) is transferred in 2 instructions.  */
-      else if (mode == TDOmode)
-	return reg_move_base * 2;
-
       else
 	return reg_move_base * 2 * hard_regno_nregs (FIRST_DMR_REGNO, mode);
     }
@@ -27248,10 +27189,9 @@ rs6000_split_multireg_move (rtx dst, rtx src)
   mode = GET_MODE (dst);
   nregs = hard_regno_nregs (reg, mode);
 
-  /* If we have a vector quad register for MMA or DMR register for dense math,
-     and this is a load or store, see if we can use vector paired
-     load/stores.  */
-  if ((mode == XOmode || mode == TDOmode) && TARGET_MMA
+  /* If we have a vector quad register for MMA, and this is a load or store,
+     see if we can use vector paired load/stores.  */
+  if (mode == XOmode && TARGET_MMA
       && (MEM_P (dst) || MEM_P (src)))
     {
       reg_mode = OOmode;
@@ -27259,7 +27199,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
     }
   /* If we have a vector pair/quad mode, split it into two/four separate
      vectors.  */
-  else if (mode == OOmode || mode == XOmode || mode == TDOmode)
+  else if (mode == OOmode || mode == XOmode)
     reg_mode = V1TImode;
   else if (FP_REGNO_P (reg))
     reg_mode = DECIMAL_FLOAT_MODE_P (mode) ? DDmode :
@@ -27305,13 +27245,13 @@ rs6000_split_multireg_move (rtx dst, rtx src)
       return;
     }
 
-  /* The __vector_pair, __vector_quad, and __dmr modes are multi-register
-     modes, so if we have to load or store the registers, we have to be careful
-     to properly swap them if we're in little endian mode below.  This means
-     the last register gets the first memory location.  We also need to be
-     careful of using the right register numbers if we are splitting XO to
-     OO.  */
-  if (mode == OOmode || mode == XOmode || mode == TDOmode)
+  /* The __vector_pair and __vector_quad modes are multi-register
+     modes, so if we have to load or store the registers, we have to be
+     careful to properly swap them if we're in little endian mode
+     below.  This means the last register gets the first memory
+     location.  We also need to be careful of using the right register
+     numbers if we are splitting XO to OO.  */
+  if (mode == OOmode || mode == XOmode)
     {
       nregs = hard_regno_nregs (reg, mode);
       int reg_mode_nregs = hard_regno_nregs (reg, reg_mode);
@@ -27448,7 +27388,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 	 overlap.  */
       int i;
       /* XO/OO are opaque so cannot use subregs. */
-      if (mode == OOmode || mode == XOmode || mode == TDOmode)
+      if (mode == OOmode || mode == XOmode )
 	{
 	  for (i = nregs - 1; i >= 0; i--)
 	    {
@@ -27622,7 +27562,7 @@ rs6000_split_multireg_move (rtx dst, rtx src)
 	    continue;
 
 	  /* XO/OO are opaque so cannot use subregs. */
-	  if (mode == OOmode || mode == XOmode || mode == TDOmode)
+	  if (mode == OOmode || mode == XOmode )
 	    {
 	      rtx dst_i = gen_rtx_REG (reg_mode, REGNO (dst) + j);
 	      rtx src_i = gen_rtx_REG (reg_mode, REGNO (src) + j);
@@ -28603,8 +28543,7 @@ rs6000_invalid_conversion (const_tree fromtype, const_tree totype)
 
   if (frommode != tomode)
     {
-      /* Do not allow conversions to/from XOmode, OOmode, and TDOmode
-	 types.  */
+      /* Do not allow conversions to/from XOmode and OOmode types.  */
       if (frommode == XOmode)
 	return N_("invalid conversion from type %<__vector_quad%>");
       if (tomode == XOmode)
@@ -28613,10 +28552,6 @@ rs6000_invalid_conversion (const_tree fromtype, const_tree totype)
 	return N_("invalid conversion from type %<__vector_pair%>");
       if (tomode == OOmode)
 	return N_("invalid conversion to type %<__vector_pair%>");
-      if (frommode == TDOmode)
-	return N_("invalid conversion from type %<__dmr%>");
-      if (tomode == TDOmode)
-	return N_("invalid conversion to type %<__dmr%>");
     }
 
   /* Conversion allowed.  */
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index f2b63c3cd71..27f7067ef52 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -1006,8 +1006,7 @@ enum data_align { align_abi, align_opt, align_both };
 /* Modes that are not vectors, but require vector alignment.  Treat these like
    vectors in terms of loads and stores.  */
 #define VECTOR_ALIGNMENT_P(MODE)					\
-  (FLOAT128_VECTOR_P (MODE) || (MODE) == OOmode || (MODE) == XOmode	\
-   || (MODE) == TDOmode)
+  (FLOAT128_VECTOR_P (MODE) || (MODE) == OOmode || (MODE) == XOmode)
 
 #define ALTIVEC_VECTOR_MODE(MODE)					\
   ((MODE) == V16QImode							\
@@ -2293,7 +2292,6 @@ enum rs6000_builtin_type_index
   RS6000_BTI_const_str,		 /* pointer to const char * */
   RS6000_BTI_vector_pair,	 /* unsigned 256-bit types (vector pair).  */
   RS6000_BTI_vector_quad,	 /* unsigned 512-bit types (vector quad).  */
-  RS6000_BTI_dmr,		 /* unsigned 1,024-bit types (dmr).  */
   RS6000_BTI_const_ptr_void,     /* const pointer to void */
   RS6000_BTI_ptr_V16QI,
   RS6000_BTI_ptr_V1TI,
@@ -2332,7 +2330,6 @@ enum rs6000_builtin_type_index
   RS6000_BTI_ptr_dfloat128,
   RS6000_BTI_ptr_vector_pair,
   RS6000_BTI_ptr_vector_quad,
-  RS6000_BTI_ptr_dmr,
   RS6000_BTI_ptr_long_long,
   RS6000_BTI_ptr_long_long_unsigned,
   RS6000_BTI_MAX
@@ -2390,7 +2387,6 @@ enum rs6000_builtin_type_index
 #define const_str_type_node		 (rs6000_builtin_types[RS6000_BTI_const_str])
 #define vector_pair_type_node		 (rs6000_builtin_types[RS6000_BTI_vector_pair])
 #define vector_quad_type_node		 (rs6000_builtin_types[RS6000_BTI_vector_quad])
-#define dmr_type_node			 (rs6000_builtin_types[RS6000_BTI_dmr])
 #define pcvoid_type_node		 (rs6000_builtin_types[RS6000_BTI_const_ptr_void])
 #define ptr_V16QI_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_V16QI])
 #define ptr_V1TI_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_V1TI])
@@ -2429,7 +2425,6 @@ enum rs6000_builtin_type_index
 #define ptr_dfloat128_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_dfloat128])
 #define ptr_vector_pair_type_node	 (rs6000_builtin_types[RS6000_BTI_ptr_vector_pair])
 #define ptr_vector_quad_type_node	 (rs6000_builtin_types[RS6000_BTI_ptr_vector_quad])
-#define ptr_dmr_type_node		 (rs6000_builtin_types[RS6000_BTI_ptr_dmr])
 #define ptr_long_long_integer_type_node	 (rs6000_builtin_types[RS6000_BTI_ptr_long_long])
 #define ptr_long_long_unsigned_type_node (rs6000_builtin_types[RS6000_BTI_ptr_long_long_unsigned])
 
diff --git a/gcc/testsuite/gcc.target/powerpc/dm-1024bit.c b/gcc/testsuite/gcc.target/powerpc/dm-1024bit.c
deleted file mode 100644
index 4d57ce826bb..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/dm-1024bit.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_dense_math_ok } */
-
-/* Note tree constant proprigation needs to be tweaked to allow skipping opaque
-   modes.  At the moment just to verify that basic loads and stores are handled
-   of the new type, just disable CCP for now.  By the time GCC 13 is shipped,
-   this needed to be fixed.  */
-/* { dg-options "-mdejagnu-cpu=future -O2 -fno-tree-ccp" } */
-
-/* Test basic load/store for __dmr type.  */
-
-#ifndef CONSTRAINT
-#if defined(USE_D)
-#define CONSTRAINT "d"
-
-#elif defined(USE_V)
-#define CONSTRAINT "v"
-
-#elif defined(USE_WA)
-#define CONSTRAINT "wa"
-
-#else
-#define CONSTRAINT "wD"
-#endif
-#endif
-const char constraint[] = CONSTRAINT;
-
-void foo_mem_asm (__dmr *p, __dmr *q)
-{
-  /* 2 LXVP instructions.  */
-  __dmr vq = *p;
-
-  /* 2 DMXXINSTDMR512 instructions to transfer VSX to DMR.  */
-  __asm__ ("# foo (" CONSTRAINT ") %A0" : "+" CONSTRAINT (vq));
-  /* 2 DMXXEXTFDMR512 instructions to transfer DMR to VSX.  */
-
-  /* 2 STXVP instructions.  */
-  *q = vq;
-}
-
-void foo_mem_asm2 (__dmr *p, __dmr *q)
-{
-  /* 2 LXVP instructions.  */
-  __dmr vq = *p;
-  __dmr vq2;
-  __dmr vq3;
-
-  /* 2 DMXXINSTDMR512 instructions to transfer VSX to DMR.  */
-  __asm__ ("# foo1 (" CONSTRAINT ") %A0" : "+" CONSTRAINT (vq));
-  /* 2 DMXXEXTFDMR512 instructions to transfer DMR to VSX.  */
-
-  vq2 = vq;
-  __asm__ ("# foo2 (wa) %0" : "+wa" (vq2));
-
-  /* 2 STXVP instructions.  */
-  *q = vq2;
-}
-
-void foo_mem (__dmr *p, __dmr *q)
-{
-  /* 2 LXVP, 2 STXVP instructions, no DMR transfer.  */
-  *q = *p;
-}
-
-/* { dg-final { scan-assembler-times {\mdmxxextfdmr512\M}  4 } } */
-/* { dg-final { scan-assembler-times {\mdmxxinstdmr512\M}  4 } } */
-/* { dg-final { scan-assembler-times {\mlxvp\M}           12 } } */
-/* { dg-final { scan-assembler-times {\mstxvp\M}          12 } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/dm-double-test.c b/gcc/testsuite/gcc.target/powerpc/dm-double-test.c
deleted file mode 100644
index 51733d6f641..00000000000
--- a/gcc/testsuite/gcc.target/powerpc/dm-double-test.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Test derived from mma-double-1.c, modified for dense math.  */
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_dense_math_ok } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <altivec.h>
-
-typedef unsigned char vec_t __attribute__ ((vector_size (16)));
-typedef double v4sf_t __attribute__ ((vector_size (16)));
-#define SAVE_ACC(ACC, ldc, J)  \
-	  __builtin_mma_disassemble_acc (result, ACC); \
-	  rowC = (v4sf_t *) &CO[0*ldc+J]; \
-          rowC[0] += result[0]; \
-          rowC = (v4sf_t *) &CO[1*ldc+J]; \
-          rowC[0] += result[1]; \
-          rowC = (v4sf_t *) &CO[2*ldc+J]; \
-          rowC[0] += result[2]; \
-          rowC = (v4sf_t *) &CO[3*ldc+J]; \
-	  rowC[0] += result[3];
-
-void
-DM (int m, int n, int k, double *A, double *B, double *C)
-{
-  __vector_quad acc0, acc1, acc2, acc3, acc4, acc5, acc6, acc7;
-  v4sf_t result[4];
-  v4sf_t *rowC;
-  for (int l = 0; l < n; l += 4)
-    {
-      double *CO;
-      double *AO;
-      AO = A;
-      CO = C;
-      C += m * 4;
-      for (int j = 0; j < m; j += 16)
-	{
-	  double *BO = B;
-	  __builtin_mma_xxsetaccz (&acc0);
-	  __builtin_mma_xxsetaccz (&acc1);
-	  __builtin_mma_xxsetaccz (&acc2);
-	  __builtin_mma_xxsetaccz (&acc3);
-	  __builtin_mma_xxsetaccz (&acc4);
-	  __builtin_mma_xxsetaccz (&acc5);
-	  __builtin_mma_xxsetaccz (&acc6);
-	  __builtin_mma_xxsetaccz (&acc7);
-	  unsigned long i;
-
-	  for (i = 0; i < k; i++)
-	    {
-	      vec_t *rowA = (vec_t *) & AO[i * 16];
-	      __vector_pair rowB;
-	      vec_t *rb = (vec_t *) & BO[i * 4];
-	      __builtin_mma_assemble_pair (&rowB, rb[1], rb[0]);
-	      __builtin_mma_xvf64gerpp (&acc0, rowB, rowA[0]);
-	      __builtin_mma_xvf64gerpp (&acc1, rowB, rowA[1]);
-	      __builtin_mma_xvf64gerpp (&acc2, rowB, rowA[2]);
-	      __builtin_mma_xvf64gerpp (&acc3, rowB, rowA[3]);
-	      __builtin_mma_xvf64gerpp (&acc4, rowB, rowA[4]);
-	      __builtin_mma_xvf64gerpp (&acc5, rowB, rowA[5]);
-	      __builtin_mma_xvf64gerpp (&acc6, rowB, rowA[6]);
-	      __builtin_mma_xvf64gerpp (&acc7, rowB, rowA[7]);
-	    }
-	  SAVE_ACC (&acc0, m, 0);
-	  SAVE_ACC (&acc2, m, 4);
-	  SAVE_ACC (&acc1, m, 2);
-	  SAVE_ACC (&acc3, m, 6);
-	  SAVE_ACC (&acc4, m, 8);
-	  SAVE_ACC (&acc6, m, 12);
-	  SAVE_ACC (&acc5, m, 10);
-	  SAVE_ACC (&acc7, m, 14);
-	  AO += k * 16;
-	  BO += k * 4;
-	  CO += 16;
-	}
-      B += k * 4;
-    }
-}
-
-void
-init (double *matrix, int row, int column)
-{
-  for (int j = 0; j < column; j++)
-    {
-      for (int i = 0; i < row; i++)
-	{
-	  matrix[j * row + i] = (i * 16 + 2 + j) / 0.123;
-	}
-    }
-}
-
-void
-init0 (double *matrix, double *matrix1, int row, int column)
-{
-  for (int j = 0; j < column; j++)
-    for (int i = 0; i < row; i++)
-      matrix[j * row + i] = matrix1[j * row + i] = 0;
-}
-
-
-void
-print (const char *name, const double *matrix, int row, int column)
-{
-  printf ("Matrix %s has %d rows and %d columns:\n", name, row, column);
-  for (int i = 0; i < row; i++)
-    {
-      for (int j = 0; j < column; j++)
-	{
-	  printf ("%f ", matrix[j * row + i]);
-	}
-      printf ("\n");
-    }
-  printf ("\n");
-}
-
-int
-main (int argc, char *argv[])
-{
-  int rowsA, colsB, common;
-  int i, j, k;
-  int ret = 0;
-
-  for (int t = 16; t <= 128; t += 16)
-    {
-      for (int t1 = 4; t1 <= 16; t1 += 4)
-	{
-	  rowsA = t;
-	  colsB = t1;
-	  common = 1;
-	  /* printf ("Running test for rows = %d,cols = %d\n", t, t1); */
-	  double A[rowsA * common];
-	  double B[common * colsB];
-	  double C[rowsA * colsB];
-	  double D[rowsA * colsB];
-
-
-	  init (A, rowsA, common);
-	  init (B, common, colsB);
-	  init0 (C, D, rowsA, colsB);
-	  DM (rowsA, colsB, common, A, B, C);
-
-	  for (i = 0; i < colsB; i++)
-	    {
-	      for (j = 0; j < rowsA; j++)
-		{
-		  D[i * rowsA + j] = 0;
-		  for (k = 0; k < common; k++)
-		    {
-		      D[i * rowsA + j] +=
-			A[k * rowsA + j] * B[k + common * i];
-		    }
-		}
-	    }
-	  for (i = 0; i < colsB; i++)
-	    {
-	      for (j = 0; j < rowsA; j++)
-		{
-		  for (k = 0; k < common; k++)
-		    {
-		      if (D[i * rowsA + j] != C[i * rowsA + j])
-			{
-			  printf ("Error %d,%d,%d\n",i,j,k);
-			  ret++;
-			}
-		    }
-		}
-	    }
-	  if (ret)
-	    {
-	      print ("A", A, rowsA, common);
-	      print ("B", B, common, colsB);
-	      print ("C", C, rowsA, colsB);
-	      print ("D", D, rowsA, colsB);
-	    }
-	}
-    }
-  
-#ifdef VERBOSE
-  if (ret)
-    printf ("DM double test fail: %d errors\n",ret);
-  else
-    printf ("DM double test success: 0 DM errors\n");
-#else
-  if (ret)
-    abort();
-#endif
-      
-  return ret;
-}
-
-/* { dg-final { scan-assembler-times {\mdmsetaccz\M}       8 } } */
-/* { dg-final { scan-assembler-times {\mdmxvf64gerpp\M}    8 } } */
-/* { dg-final { scan-assembler-times {\mdmxxextfdmr512\M} 11 } } */
-
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index b70ebf963f9..c7f583d6d14 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -6534,25 +6534,6 @@ proc check_effective_target_power10_ok { } {
     }
 }
 
-# Return 1 if this is a PowerPC target supporting -mcpu=future or -mdense-math
-# which enables the dense math operations.
-proc check_effective_target_powerpc_dense_math_ok { } {
-	return [check_no_compiler_messages_nocache powerpc_dense_math_ok assembly {
-		__vector_quad vq;
-		void test (void)
-		{
-		#ifndef __PPC_DMR__
-		#error "target does not have dense math support."
-		#else
-		/* Make sure we have dense math support.  */
-		  __vector_quad dmr;
-		  __asm__ ("dmsetaccz %A0" : "=wD" (dmr));
-		  vq = dmr;
-		#endif
-		}
-	} "-mcpu=future"]
-}
-
 # Return 1 if this is a PowerPC target supporting -mfloat128 via either
 # software emulation on power7/power8 systems or hardware support on power9.

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-11-17 21:53 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-17 21:53 [gcc(refs/users/meissner/heads/dmf004)] Revert patches Michael Meissner
  -- strict thread matches above, loose matches on Subject: below --
2022-11-17 21:53 Michael Meissner
2022-11-12  3:15 Michael Meissner
2022-11-09 22:35 Michael Meissner

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).