[gcc(refs/users/meissner/heads/work256-dmf)] Revert changes

Michael Meissner via Gcc-cvs <[email protected]>
Newsgroups gmane.comp.gcc.cvs
Message-ID <[email protected]>
https://gcc.gnu.org/g:33de31eca0f808eae44c2cf28dc4dade1c021209

commit 33de31eca0f808eae44c2cf28dc4dade1c021209
Author: Michael Meissner <[email protected]>
Date:   Fri Aug 7 15:52:58 2026 -0400

    Revert changes

Diff:
---
 gcc/config/rs6000/altivec.md                       |  14 --
 gcc/config/rs6000/constraints.md                   |  10 --
 gcc/config/rs6000/predicates.md                    |  79 +-----------
 gcc/config/rs6000/rs6000-string.cc                 |   1 -
 gcc/config/rs6000/rs6000.cc                        |  21 +--
 gcc/config/rs6000/rs6000.h                         |  15 ---
 gcc/config/rs6000/rs6000.md                        | 143 +++++----------------
 gcc/config/rs6000/vsx.md                           | 122 +++---------------
 gcc/doc/md.texi                                    |   6 -
 gcc/testsuite/gcc.target/powerpc/lxvrl.c           |  32 -----
 gcc/testsuite/gcc.target/powerpc/prefixed-addis.c  |  24 ----
 .../gcc.target/powerpc/saturate-subtract-1.c       |  39 ------
 .../gcc.target/powerpc/saturate-subtract-2.c       |  40 ------
 .../gcc.target/powerpc/vector-rotate-left.c        |  34 -----
 gcc/testsuite/lib/target-supports.exp              |  13 --
 15 files changed, 57 insertions(+), 536 deletions(-)

diff --git a/gcc/config/rs6000/altivec.md b/gcc/config/rs6000/altivec.md
index e6e98fe20a94..a8f8d039ffc7 100644
--- a/gcc/config/rs6000/altivec.md
+++ b/gcc/config/rs6000/altivec.md
@@ -2018,20 +2018,6 @@
 }
   [(set_attr "type" "vecperm")])
 
-;; -mcpu=future adds a vector rotate left word variant.  There is no vector
-;; byte/half-word/double-word/quad-word rotate left.  This insn occurs before
-;; altivec_vrl<VI_char> and will match for -mcpu=future, while other cpus will
-;; match the generic insn.
-(define_insn "*xvrlw"
-  [(set (match_operand:V4SI 0 "register_operand" "=v,wa")
-	(rotate:V4SI (match_operand:V4SI 1 "register_operand" "v,wa")
-		     (match_operand:V4SI 2 "register_operand" "v,wa")))]
-  "TARGET_XVRLW"
-  "@
-   vrlw %0,%1,%2
-   xvrlw %x0,%x1,%x2"
-  [(set_attr "type" "vecsimple")])
-
 (define_insn "altivec_vrl<VI_char>"
   [(set (match_operand:VI2 0 "register_operand" "=v")
         (rotate:VI2 (match_operand:VI2 1 "register_operand" "v")
diff --git a/gcc/config/rs6000/constraints.md b/gcc/config/rs6000/constraints.md
index 7a21815675a3..4b2e703f0497 100644
--- a/gcc/config/rs6000/constraints.md
+++ b/gcc/config/rs6000/constraints.md
@@ -223,16 +223,6 @@
   "An IEEE 128-bit constant that can be loaded into VSX registers."
   (match_operand 0 "easy_vector_constant_ieee128"))
 
-(define_constraint "eU"
-  "@internal integer constant that can be loaded with paddis"
-  (and (match_code "const_int")
-       (match_operand 0 "paddis_operand")))
-
-(define_constraint "eV"
-  "@A signed integer constant that paddis and paddi instructions generate."
-  (and (match_code "const_int")
-       (match_operand 0 "paddis_paddi_operand")))
-
 ;; Floating-point constraints.  These two are defined so that insn
 ;; length attributes can be calculated exactly.
 
diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md
index b7a0b25921c2..a6ec04f5922d 100644
--- a/gcc/config/rs6000/predicates.md
+++ b/gcc/config/rs6000/predicates.md
@@ -376,68 +376,6 @@
   return SIGNED_INTEGER_34BIT_P (INTVAL (op));
 })
 
-;; Return 1 if op is a 64-bit constant that uses the paddis instruction
-(define_predicate "paddis_operand"
-  (match_code "const_int")
-{
-  if (!TARGET_PADDIS)
-    return false;
-
-  if (mode != VOIDmode && mode != DImode)
-    return false;
-
-  HOST_WIDE_INT value = INTVAL (op);
-
-  if (!SIGNED_INTEGER_64BIT_P (value))
-    return false;
-
-  /* If paddi alone can handle the number, don't return true.  */
-  if (SIGNED_INTEGER_34BIT_P (value))
-    return false;
-
-  /* If the bottom 32-bits are non-zero, paddis alone can't handle it.  */
-  if ((value & HOST_WIDE_INT_C(0xffffffff)) != 0)
-    return false;
-
-  return true;
-})
-
-;; Return 1 if op is a 64-bit constant that can be created with a
-;; combination of paddi and paddis.  Don't generate paddi and paddis if
-;; we can do it via addis and rldicl.
-(define_predicate "paddis_paddi_operand"
-  (match_code "const_int")
-{
-  if (!TARGET_PADDIS)
-    return false;
-
-  if (mode != VOIDmode && mode != DImode)
-    return false;
-
-  HOST_WIDE_INT value = INTVAL (op);
-
-  if (!SIGNED_INTEGER_64BIT_P (value))
-    return false;
-
-  /* Don't worry about negative values at the moment.  */
-  if (value < 0)
-    return false;
-
-  /* If paddi alone can handle the number, don't return true.  */
-  if (SIGNED_INTEGER_34BIT_P (value))
-    return false;
-
-  /* If we can do the add or generate the constant via addis/rldicl, fail.  */
-  if (rs6000_is_valid_and_mask (op, mode))
-    return false;
-
-  /* Only return true if we need both paddi and paddis.  */
-  if ((value & HOST_WIDE_INT_C(0xffffffff)) == 0)
-    return false;
-
-  return true;
-})
-
 ;; Return 1 if op is a register that is not special.
 ;; Disallow (SUBREG:SF (REG:SI)) and (SUBREG:SI (REG:SF)) on VSX systems where
 ;; you need to be careful in moving a SFmode to SImode and vice versa due to
@@ -631,22 +569,18 @@
   (ior (match_operand 0 "zero_constant")
        (match_operand 0 "gpc_reg_operand")))
 
-;; Return 1 if op is a constant integer valid for addition with addis,
-;; addi, paddi, or paddis.
+;; Return 1 if op is a constant integer valid for addition with addis, addi.
 (define_predicate "add_cint_operand"
   (and (match_code "const_int")
-       (ior (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)
-			   + (mode == SImode ? 0x80000000 : 0x80008000))
-		    	< (unsigned HOST_WIDE_INT) 0x100000000ll")
-	    (match_operand 0 "cint34_operand")
-	    (match_operand 0 "paddis_operand"))))
+       (match_test "((unsigned HOST_WIDE_INT) INTVAL (op)
+		       + (mode == SImode ? 0x80000000 : 0x80008000))
+		    < (unsigned HOST_WIDE_INT) 0x100000000ll")))
 
 ;; Return 1 if op is a constant integer valid for addition
 ;; or non-special register.
 (define_predicate "reg_or_add_cint_operand"
   (if_then_else (match_code "const_int")
-    (ior (match_operand 0 "add_cint_operand")
-	 (match_operand 0 "paddis_paddi_operand"))
+    (match_operand 0 "add_cint_operand")
     (match_operand 0 "gpc_reg_operand")))
 
 ;; Return 1 if op is a constant integer valid for subtraction
@@ -1189,8 +1123,7 @@
   (if_then_else (match_code "const_int")
     (match_test "satisfies_constraint_I (op)
 		 || satisfies_constraint_L (op)
-		 || satisfies_constraint_eI (op)
-		 || satisfies_constraint_eU (op)")
+		 || satisfies_constraint_eI (op)")
     (match_operand 0 "gpc_reg_operand")))
 
 ;; Return 1 if the operand is either a non-special register, or 0, or -1.
diff --git a/gcc/config/rs6000/rs6000-string.cc b/gcc/config/rs6000/rs6000-string.cc
index 0c14ba4cc3ea..062ff1e2465e 100644
--- a/gcc/config/rs6000/rs6000-string.cc
+++ b/gcc/config/rs6000/rs6000-string.cc
@@ -2786,7 +2786,6 @@ expand_block_move (rtx operands[], bool might_overlap)
 
       if (TARGET_MMA && TARGET_BLOCK_OPS_UNALIGNED_VSX
 	  && TARGET_BLOCK_OPS_VECTOR_PAIR
-	  && TARGET_POWERPC64
 	  && bytes >= 32
 	  && (align >= 256 || !STRICT_ALIGNMENT))
 	{
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 792bb6f5bfaa..995559889130 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -6146,18 +6146,7 @@ num_insns_constant_gpr (HOST_WIDE_INT value)
   else if (TARGET_PREFIXED && SIGNED_INTEGER_34BIT_P (value))
     return 1;
 
-  /* PADDIS support.  */
-  else if (TARGET_PADDIS)
-    {
-      rtx num = GEN_INT (value);
-      if (paddis_operand (num, VOIDmode))
-	return 1;	/* paddis alone.  */
-
-      if (paddis_paddi_operand (num, VOIDmode))
-	return 2;	/* paddis + paddi/addi.  */
-    }
-
-  if (TARGET_POWERPC64)
+  else if (TARGET_POWERPC64)
     {
       int num_insns = 0;
       rs6000_emit_set_long_const (nullptr, value, &num_insns);
@@ -14288,14 +14277,6 @@ print_operand (FILE *file, rtx x, int code)
 	fprintf (file, "%d", (REGNO (x) - FIRST_FPR_REGNO) / 4);
       return;
 
-    case 'B':
-      /* Upper 32-bits of a constant.  */
-      if (!CONST_INT_P (x))
-	output_operand_lossage ("Not a constant.");
-
-      fprintf (file, "%" HOST_LONG_FORMAT "d", INTVAL (x) >> 32);
-      return;
-
     case 'D':
       /* Like 'J' but get to the GT bit only.  */
       if (!REG_P (x) || !CR_REGNO_P (REGNO (x)))
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index b4ec566e5933..bcd4c39d24dc 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -565,14 +565,6 @@ extern int rs6000_vector_align[];
    below.  */
 #define RS6000_FN_TARGET_INFO_HTM 1
 
-/* Whether we have XVRLW support.  */
-#define TARGET_XVRLW			TARGET_FUTURE
-
-/* Whether we have PADDIS support.  */
-#define TARGET_PADDIS			(TARGET_FUTURE			\
-					 && TARGET_PREFIXED		\
-					 && TARGET_POWERPC64)
-
 /* Whether the various reciprocal divide/square root estimate instructions
    exist, and whether we should automatically generate code for the instruction
    by default.  */
@@ -2494,13 +2486,6 @@ typedef struct GTY(()) machine_function
 #define SIGNED_INTEGER_16BIT_P(VALUE)	SIGNED_INTEGER_NBIT_P (VALUE, 16)
 #define SIGNED_INTEGER_34BIT_P(VALUE)	SIGNED_INTEGER_NBIT_P (VALUE, 34)
 
-#if HOST_BITS_PER_WIDE_INT > 64
-#define SIGNED_INTEGER_64BIT_P(VALUE)	SIGNED_INTEGER_NBIT_P (VALUE, 64)
-
-#else
-#define SIGNED_INTEGER_64BIT_P(VALUE)	1
-#endif
-
 /* Like SIGNED_INTEGER_16BIT_P and SIGNED_INTEGER_34BIT_P, but with an extra
    argument that gives a length to validate a range of addresses, to allow for
    splitting insns into several insns, each of which has an offsettable
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index 39792d0c0625..ddfed3b63bc0 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -435,7 +435,6 @@
      (and (eq_attr "isa" "dmf")
 	  (match_test "TARGET_DMF"))
      (const_int 1)
-
     ] (const_int 0)))
 
 ;; If this instruction is microcoded on the CELL processor
@@ -1874,18 +1873,14 @@
 		  (match_operand:SDI 2 "reg_or_add_cint_operand")))]
   ""
 {
-  rtx op0 = operands[0];
-  rtx op1 = operands[1];
-  rtx op2 = operands[2];
-
   if (<MODE>mode == DImode && !TARGET_POWERPC64)
     {
-      rtx lo0 = gen_lowpart (SImode, op0);
-      rtx lo1 = gen_lowpart (SImode, op1);
-      rtx lo2 = gen_lowpart (SImode, op2);
-      rtx hi0 = gen_highpart (SImode, op0);
-      rtx hi1 = gen_highpart (SImode, op1);
-      rtx hi2 = gen_highpart_mode (SImode, DImode, op2);
+      rtx lo0 = gen_lowpart (SImode, operands[0]);
+      rtx lo1 = gen_lowpart (SImode, operands[1]);
+      rtx lo2 = gen_lowpart (SImode, operands[2]);
+      rtx hi0 = gen_highpart (SImode, operands[0]);
+      rtx hi1 = gen_highpart (SImode, operands[1]);
+      rtx hi2 = gen_highpart_mode (SImode, DImode, operands[2]);
 
       if (!reg_or_short_operand (lo2, SImode))
 	lo2 = force_reg (SImode, lo2);
@@ -1897,40 +1892,24 @@
       DONE;
     }
 
-  if (CONST_INT_P (op2) && !add_operand (op2, <MODE>mode))
+  if (CONST_INT_P (operands[2]) && !add_operand (operands[2], <MODE>mode))
     {
-      rtx tmp = ((!can_create_pseudo_p () || rtx_equal_p (op0, op1))
-		 ? op0
-		 : gen_reg_rtx (<MODE>mode));
+      rtx tmp = ((!can_create_pseudo_p ()
+		  || rtx_equal_p (operands[0], operands[1]))
+		 ? operands[0] : gen_reg_rtx (<MODE>mode));
 
       /* Adding a constant to r0 is not a valid insn, so use a different
 	 strategy in that case.  */
-      if (reg_or_subregno (op1) == 0 || reg_or_subregno (tmp) == 0)
+      if (reg_or_subregno (operands[1]) == 0 || reg_or_subregno (tmp) == 0)
 	{
-	  if (op0 == op1)
+	  if (operands[0] == operands[1])
 	    FAIL;
-	  rs6000_emit_move (op0, op2, <MODE>mode);
-	  emit_insn (gen_add<mode>3 (op0, op1, op0));
-	  DONE;
-	}
-
-      HOST_WIDE_INT val = INTVAL (op2);
-
-      /* If we have paddis, split the add into paddis and either addi or
-	 paddi.  However, if we can generate addis and rldicl, do that
-	 instead of doing paddis/paddi.  Emit the paddis first, just
-	 in case this is a memory operation and we could fold the offset
-	 into the memory ooperation.  */
-
-      if (TARGET_PADDIS && paddis_paddi_operand (op2, <MODE>mode))
-	{
-	  const HOST_WIDE_INT mask = HOST_WIDE_INT_C(0xffffffff);
-
-	  emit_insn (gen_add<mode>3 (tmp, op1, GEN_INT (val & ~mask)));
-	  emit_insn (gen_add<mode>3 (op0, tmp, GEN_INT (val & mask)));
+	  rs6000_emit_move (operands[0], operands[2], <MODE>mode);
+	  emit_insn (gen_add<mode>3 (operands[0], operands[1], operands[0]));
 	  DONE;
 	}
 
+      HOST_WIDE_INT val = INTVAL (operands[2]);
       HOST_WIDE_INT low = sext_hwi (val, 16);
       HOST_WIDE_INT rest = trunc_int_for_mode (val - low, <MODE>mode);
 
@@ -1940,28 +1919,24 @@
       /* The ordering here is important for the prolog expander.
 	 When space is allocated from the stack, adding 'low' first may
 	 produce a temporary deallocation (which would be bad).  */
-      emit_insn (gen_add<mode>3 (tmp, op1, GEN_INT (rest)));
-      emit_insn (gen_add<mode>3 (op0, tmp, GEN_INT (low)));
+      emit_insn (gen_add<mode>3 (tmp, operands[1], GEN_INT (rest)));
+      emit_insn (gen_add<mode>3 (operands[0], tmp, GEN_INT (low)));
       DONE;
     }
 })
 
 (define_insn "*add<mode>3"
-  [(set (match_operand:GPR 0 "gpc_reg_operand"           "=r,r,r, r, r")
-	(plus:GPR (match_operand:GPR 1 "gpc_reg_operand" "%r,b,b, b, b")
-		  (match_operand:GPR 2 "add_operand"      "r,I,L,eI,eU")))]
+  [(set (match_operand:GPR 0 "gpc_reg_operand" "=r,r,r,r")
+	(plus:GPR (match_operand:GPR 1 "gpc_reg_operand" "%r,b,b,b")
+		  (match_operand:GPR 2 "add_operand" "r,I,L,eI")))]
   ""
   "@
    add %0,%1,%2
    addi %0,%1,%2
    addis %0,%1,%v2
-   addi %0,%1,%2
-   paddis %0,%1,%B2"
+   addi %0,%1,%2"
   [(set_attr "type" "add")
-   (set_attr "isa" "*,*,*,p10,future")
-   (set_attr "length" "*,*,*,*,12")
-   (set_attr "prefixed" "*,*,*,*,yes")
-   (set_attr "maybe_prefixed" "*,*,*,*,no")])
+   (set_attr "isa" "*,*,*,p10")])
 
 (define_insn "*addsi3_high"
   [(set (match_operand:SI 0 "gpc_reg_operand" "=b")
@@ -2503,20 +2478,6 @@
   ""
 )
 
-;; Saturating subtract
-(define_code_iterator gtu_geu [gtu geu])
-
-(define_insn "*subfus<mode>3_<code>"
-  [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
-	(if_then_else:GPR (gtu_geu (match_operand:GPR 1 "gpc_reg_operand" "r")
-				   (match_operand:GPR 2 "gpc_reg_operand" "r"))
-			  (minus:GPR (match_dup 1)
-				     (match_dup 2))
-			  (const_int 0)))]
-  "TARGET_FUTURE"
-  "sub<wd>us %0,%1,%2"
-  [(set_attr "type" "add")])
-
 (define_insn "@neg<mode>2"
   [(set (match_operand:GPR 0 "gpc_reg_operand" "=r")
 	(neg:GPR (match_operand:GPR 1 "gpc_reg_operand" "r")))]
@@ -9984,7 +9945,7 @@
   DONE;
 })
 
-;;	   GPR store   GPR load    GPR move    GPR paddis   GPR paddis+paddi
+;;	   GPR store   GPR load    GPR move
 ;;	   GPR li      GPR lis     GPR pli     GPR #
 ;;	   FPR store   FPR load    FPR move
 ;;	   AVX store   AVX store   AVX load    AVX load    VSX move
@@ -9994,7 +9955,7 @@
 ;;	   VSX->GPR    GPR->VSX
 (define_insn "*movdi_internal64"
   [(set (match_operand:DI 0 "nonimmediate_operand"
-	  "=YZ,        r,          r,          r,          b,
+	  "=YZ,        r,          r,
 	   r,          r,          r,          r,
 	   m,          ^d,         ^d,
 	   wY,         Z,          $v,         $v,         ^wa,
@@ -10003,7 +9964,7 @@
 	   r,          *h,         *h,
 	   ?r,         ?wa")
 	(match_operand:DI 1 "input_operand"
-	  "r,          YZ,         r,          eU,         eV,
+	  "r,          YZ,         r,
 	   I,          L,          eI,         nF,
 	   ^d,         m,          ^d,
 	   ^v,         $v,         wY,         Z,          ^wa,
@@ -10018,8 +9979,6 @@
    std%U0%X0 %1,%0
    ld%U1%X1 %0,%1
    mr %0,%1
-   paddis %0,0,%B1
-   #
    li %0,%1
    lis %0,%v1
    li %0,%1
@@ -10045,7 +10004,7 @@
    mfvsrd %0,%x1
    mtvsrd %x0,%1"
   [(set_attr "type"
-	  "store,      load,       *,          *,          *,
+	  "store,      load,       *,
 	   *,          *,          *,          *,
 	   fpstore,    fpload,     fpsimple,
 	   fpstore,    fpstore,    fpload,     fpload,     veclogical,
@@ -10055,7 +10014,7 @@
 	   mfvsr,      mtvsr")
    (set_attr "size" "64")
    (set_attr "length"
-	  "*,          *,          *,          12,         24,
+	  "*,          *,          *,
 	   *,          *,          *,          20,
 	   *,          *,          *,
 	   *,          *,          *,          *,          *,
@@ -10064,32 +10023,14 @@
 	   *,          *,          *,
 	   *,          *")
    (set_attr "isa"
-	  "*,          *,          *,          future,     future,
+	  "*,          *,          *,
 	   *,          *,          p10,        *,
 	   *,          *,          *,
 	   p9v,        p7v,        p9v,        p7v,        *,
 	   p9v,        p9v,        p7v,        *,          *,
 	   p7v,        p7v,
 	   *,          *,          *,
-	   p8v,        p8v")
-   (set_attr "prefixed"
-	  "*,          *,          *,          yes,        yes,
-	   *,          *,          *,          *,
-	   *,          *,          *,
-	   *,          *,          *,          *,          *,
-	   *,          *,          *,          *,          *,
-	   *,          *,
-	   *,          *,          *,
-	   *,          *")
-   (set_attr "maybe_prefixed"
-	  "*,          *,          *,          no,         no,
-	   *,          *,          *,          *,
-	   *,          *,          *,
-	   *,          *,          *,          *,          *,
-	   *,          *,          *,          *,          *,
-	   *,          *,
-	   *,          *,          *,
-	   *,          *")])
+	   p8v,        p8v")])
 
 ; Some DImode loads are best done as a load of -1 followed by a mask
 ; instruction.
@@ -10107,32 +10048,6 @@
 		(match_dup 1)))]
   "")
 
-;; Split a constant that can be generated by a paddis and paddi into 2
-;; instructions.  We can't split setting r0 since that would generate:
-;;	paddis r0,0,upper
-;;	paddi  r0,r0,lower
-;;
-;; which gives the wrong value.
-
-(define_split
-  [(set (match_operand:DI 0 "base_reg_operand")
-	(match_operand:DI 1 "paddis_paddi_operand"))]
-  "TARGET_PADDIS"
-  [(set (match_dup 2)
-	(match_dup 3))
-   (set (match_dup 0)
-	(plus:DI (match_dup 2)
-		 (match_dup 4)))]
-{
-  HOST_WIDE_INT value = INTVAL (operands[1]);
-  const HOST_WIDE_INT mask = HOST_WIDE_INT_C (0xffffffff);
-  operands[2] = (can_create_pseudo_p ()
-		 ? gen_reg_rtx (DImode)
-		 : operands[0]);
-  operands[3] = GEN_INT (value & ~mask);
-  operands[4] = GEN_INT (value & mask);
-})
-
 ;; Split a load of a large constant into the appropriate five-instruction
 ;; sequence.  Handle anything in a constant number of insns.
 ;; When non-easy constants can go in the TOC, this should use
diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md
index 599b44fd6243..58318f5bb5e2 100644
--- a/gcc/config/rs6000/vsx.md
+++ b/gcc/config/rs6000/vsx.md
@@ -5761,32 +5761,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"
@@ -5810,34 +5798,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")
@@ -5869,29 +5829,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.
@@ -5936,35 +5885,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/doc/md.texi b/gcc/doc/md.texi
index 368c409b3ac7..c0026c173182 100644
--- a/gcc/doc/md.texi
+++ b/gcc/doc/md.texi
@@ -3367,12 +3367,6 @@ loaded to a VSX register with one prefixed instruction.
 An IEEE 128-bit constant that can be loaded into a VSX register with
 the @code{lxvkq} instruction.
 
-@item eU
-A signed integer constant that can be used with the paddis instruction.
-
-@item eV
-A signed integer constant that paddis and paddi instructions generate.
-
 @ifset INTERNALS
 @item G
 A floating point constant that can be loaded into a register with one
diff --git a/gcc/testsuite/gcc.target/powerpc/lxvrl.c b/gcc/testsuite/gcc.target/powerpc/lxvrl.c
deleted file mode 100644
index 71854c50c911..000000000000
--- a/gcc/testsuite/gcc.target/powerpc/lxvrl.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_future_ok } */
-/* { dg-require-effective-target lp64 } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Test whether the lxvrl and stxvrl instructions are generated for
-   -mcpu=future on memory copy operations.  */
-
-#ifndef VSIZE
-#define VSIZE 2
-#endif
-
-#ifndef LSIZE
-#define LSIZE 5
-#endif
-
-struct foo {
-  vector unsigned char vc[VSIZE];
-  unsigned char leftover[LSIZE];
-};
-
-void memcpy_ptr (struct foo *p, struct foo *q)
-{
-  __builtin_memcpy ((void *) p,		/* lxvrl and stxvrl.  */
-		    (void *) q,
-		    (sizeof (vector unsigned char) * VSIZE) + LSIZE);
-}
-
-/* { dg-final { scan-assembler     {\mlxvrl\M}  } } */
-/* { dg-final { scan-assembler     {\mstxvrl\M} } } */
-/* { dg-final { scan-assembler-not {\mlxvl\M}   } } */
-/* { dg-final { scan-assembler-not {\mstxvl\M}  } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/prefixed-addis.c b/gcc/testsuite/gcc.target/powerpc/prefixed-addis.c
deleted file mode 100644
index d08e3675f94c..000000000000
--- a/gcc/testsuite/gcc.target/powerpc/prefixed-addis.c
+++ /dev/null
@@ -1,24 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_future_ok } */
-/* { dg-require-effective-target lp64 } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Test whether the xvrl (vector word rotate left using VSX registers insead of
-   Altivec registers is generated.  */
-
-#include <stddef.h>
-
-size_t
-prefix_addis_addi (size_t x)
-{
-  return x + 0x123456789ABCDEUL;	/* paddis + paddi.  */
-}
-
-size_t
-prefix_addis (size_t x)
-{
-  return x + 0x12345600000000UL;	/* paddis.  */
-}
-
-/* { dg-final { scan-assembler-times {\mpaddis\M} 2  } } */
-/* { dg-final { scan-assembler-times {\mpaddi\M}  1  } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/saturate-subtract-1.c b/gcc/testsuite/gcc.target/powerpc/saturate-subtract-1.c
deleted file mode 100644
index c32a70a5e898..000000000000
--- a/gcc/testsuite/gcc.target/powerpc/saturate-subtract-1.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* { dg-do compile } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-/* { dg-require-effective-target powerpc_future_ok } */
-
-/* Check that saturating subtract (subfus) is generated.  Check that all
-   combinations of >, >=, <, and <= are optimized.  */
-
-#ifndef TYPE
-#define TYPE	unsigned int
-#endif
-
-void
-saturated_subtract_gt (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a > b) ? a - b : 0;
-}
-
-void
-saturated_subtract_ge (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a >= b) ? a - b : 0;
-}
-
-void
-saturated_subtract_lt (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a < b) ? 0 : a - b;
-}
-
-void
-saturated_subtract_le (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a <= b) ? 0 : a - b;
-}
-
-/* { dg-final { scan-assembler-times {\msubwus\M} 4 } } */
-/* { dg-final { scan-assembler-not   {\mcmplw\M}    } } */
-/* { dg-final { scan-assembler-not   {\misel\M}     } } */
-/* { dg-final { scan-assembler-not   {\msubf\M}     } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/saturate-subtract-2.c b/gcc/testsuite/gcc.target/powerpc/saturate-subtract-2.c
deleted file mode 100644
index 482d7384c172..000000000000
--- a/gcc/testsuite/gcc.target/powerpc/saturate-subtract-2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_future_ok } */
-/* { dg-require-effective-target lp64 } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Check that saturating subtract (subfus) is generated.  Check that all
-   combinations of >, >=, <, and <= are optimized.  */
-
-#ifndef TYPE
-#define TYPE	unsigned long long
-#endif
-
-void
-saturated_subtract_gt (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a > b) ? a - b : 0;
-}
-
-void
-saturated_subtract_ge (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a >= b) ? a - b : 0;
-}
-
-void
-saturated_subtract_lt (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a < b) ? 0 : a - b;
-}
-
-void
-saturated_subtract_le (TYPE a, TYPE b, TYPE *p)
-{
-  *p = (a <= b) ? 0 : a - b;
-}
-
-/* { dg-final { scan-assembler-times {\msubdus\M} 4 } } */
-/* { dg-final { scan-assembler-not   {\mcmpld\M}    } } */
-/* { dg-final { scan-assembler-not   {\misel\M}     } } */
-/* { dg-final { scan-assembler-not   {\msubf\M}     } } */
diff --git a/gcc/testsuite/gcc.target/powerpc/vector-rotate-left.c b/gcc/testsuite/gcc.target/powerpc/vector-rotate-left.c
deleted file mode 100644
index f9e87ad4bfcf..000000000000
--- a/gcc/testsuite/gcc.target/powerpc/vector-rotate-left.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* { dg-do compile } */
-/* { dg-require-effective-target powerpc_future_ok } */
-/* { dg-options "-mdejagnu-cpu=future -O2" } */
-
-/* Test whether the xvrl (vector word rotate left using VSX registers insead of
-   Altivec registers is generated.  */
-
-#include <altivec.h>
-
-typedef vector unsigned int  v4si_t;
-
-v4si_t
-rotl_v4si_scalar (v4si_t x, unsigned long n)
-{
-  __asm__ (" # %x0" : "+f" (x));
-  return (x << n) | (x >> (32 - n));	/* xvrlw.  */
-}
-
-v4si_t
-rotr_v4si_scalar (v4si_t x, unsigned long n)
-{
-  __asm__ (" # %x0" : "+f" (x));
-  return (x >> n) | (x << (32 - n));	/* xvrlw.  */
-}
-
-v4si_t
-rotl_v4si_vector (v4si_t x, v4si_t y)
-{
-  __asm__ (" # %x0" : "+f" (x));	/* xvrlw.  */
-  return vec_rl (x, y);
-}
-
-/* { dg-final { scan-assembler-times {\mxvrlw\M} 3  } } */
-/* { dg-final { scan-assembler-not   {\mvrlw\M}     } } */
diff --git a/gcc/testsuite/lib/target-supports.exp b/gcc/testsuite/lib/target-supports.exp
index 4e47f163638a..99f134e9b691 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -8418,19 +8418,6 @@ proc check_htm_hw_available { } {
 	}
     }]
 }
-
-# Return 1 if this is a PowerPC target supporting -mcpu=future
-
-proc check_effective_target_powerpc_future_ok { } {
-    return [check_no_compiler_messages powerpc_future_ok object {
-	unsigned long a, b, c;
-	int main (void) {
-	    asm ("subdus %0,%1,%2" : "=r" (a) : "r" (b), "r" (c));
-	    return 0;
-	}
-    } "-mcpu=future"]
-}
-
 # Return 1 if this is a PowerPC target supporting -mcpu=cell.
 
 proc check_effective_target_powerpc_ppu_ok { } {
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.