https://gcc.gnu.org/g:606690dd44ff3eb4f0b1f0103823c325a92d3e80

commit 606690dd44ff3eb4f0b1f0103823c325a92d3e80
Author: Michael Meissner <meiss...@linux.ibm.com>
Date:   Fri Nov 15 09:07:24 2024 -0500

    Revert changes

Diff:
---
 gcc/config.gcc                                  |   4 +-
 gcc/config/rs6000/aix71.h                       |   1 -
 gcc/config/rs6000/aix72.h                       |   1 -
 gcc/config/rs6000/aix73.h                       |   1 -
 gcc/config/rs6000/default64.h                   |  11 -
 gcc/config/rs6000/driver-rs6000.cc              |   2 -
 gcc/config/rs6000/power10.md                    | 144 ++++-----
 gcc/config/rs6000/rs6000-arch.def               |  49 ---
 gcc/config/rs6000/rs6000-c.cc                   |  29 +-
 gcc/config/rs6000/rs6000-cpus.def               |  11 +-
 gcc/config/rs6000/rs6000-opts.h                 |   1 -
 gcc/config/rs6000/rs6000-protos.h               |   5 +-
 gcc/config/rs6000/rs6000-tables.opt             |  11 +-
 gcc/config/rs6000/rs6000.cc                     | 397 ++++++------------------
 gcc/config/rs6000/rs6000.h                      |  44 +--
 gcc/config/rs6000/rs6000.md                     |   2 +-
 gcc/config/rs6000/rs6000.opt                    |  19 +-
 gcc/testsuite/gcc.target/powerpc/ppc-target-4.c |  38 +--
 gcc/testsuite/gcc.target/powerpc/pr115688.c     |   3 +-
 gcc/testsuite/gcc.target/powerpc/pr87496-1.c    |   2 +-
 20 files changed, 228 insertions(+), 547 deletions(-)

diff --git a/gcc/config.gcc b/gcc/config.gcc
index d45d1faba7a0..9b616bd6e1f8 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -541,7 +541,7 @@ powerpc*-*-*)
        extra_headers="${extra_headers} ppu_intrinsics.h spu2vmx.h vec_types.h 
si2vmx.h"
        extra_headers="${extra_headers} amo.h"
        case x$with_cpu in
-           
xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[3456789]|xpower1[01]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|xe6500|xfuture)
+           
xpowerpc64|xdefault64|x6[23]0|x970|xG5|xpower[3456789]|xpower1[01]|xpower6x|xrs64a|xcell|xa2|xe500mc64|xe5500|xe6500)
                cpu_is_64bit=yes
                ;;
        esac
@@ -5649,7 +5649,7 @@ case "${target}" in
                                tm_defines="${tm_defines} CONFIG_PPC405CR"
                                eval "with_$which=405"
                                ;;
-                       "" | common | native | future \
+                       "" | common | native \
                        | power[3456789] | power1[01] | power5+ | power6x \
                        | powerpc | powerpc64 | powerpc64le \
                        | rs64 \
diff --git a/gcc/config/rs6000/aix71.h b/gcc/config/rs6000/aix71.h
index 505986b33d63..4350dcd89524 100644
--- a/gcc/config/rs6000/aix71.h
+++ b/gcc/config/rs6000/aix71.h
@@ -79,7 +79,6 @@ do {                                                          
        \
 #undef ASM_CPU_SPEC
 #define ASM_CPU_SPEC \
 "%{mcpu=native: %(asm_cpu_native); \
-  mcpu=future: -mfuture; \
   mcpu=power11: -mpwr11; \
   mcpu=power10: -mpwr10; \
   mcpu=power9: -mpwr9; \
diff --git a/gcc/config/rs6000/aix72.h b/gcc/config/rs6000/aix72.h
index 242ca94bd065..fe59f8319b48 100644
--- a/gcc/config/rs6000/aix72.h
+++ b/gcc/config/rs6000/aix72.h
@@ -79,7 +79,6 @@ do {                                                          
        \
 #undef ASM_CPU_SPEC
 #define ASM_CPU_SPEC \
 "%{mcpu=native: %(asm_cpu_native); \
-  mcpu=future: -mfuture; \
   mcpu=power11: -mpwr11; \
   mcpu=power10: -mpwr10; \
   mcpu=power9: -mpwr9; \
diff --git a/gcc/config/rs6000/aix73.h b/gcc/config/rs6000/aix73.h
index 2bd6b4bb3c4f..1318b0b3662d 100644
--- a/gcc/config/rs6000/aix73.h
+++ b/gcc/config/rs6000/aix73.h
@@ -79,7 +79,6 @@ do {                                                          
        \
 #undef ASM_CPU_SPEC
 #define ASM_CPU_SPEC \
 "%{mcpu=native: %(asm_cpu_native); \
-  mcpu=future: -mfuture; \
   mcpu=power11: -mpwr11; \
   mcpu=power10: -mpwr10; \
   mcpu=power9: -mpwr9; \
diff --git a/gcc/config/rs6000/default64.h b/gcc/config/rs6000/default64.h
index afa6542e040c..10e3dec78aca 100644
--- a/gcc/config/rs6000/default64.h
+++ b/gcc/config/rs6000/default64.h
@@ -21,7 +21,6 @@ along with GCC; see the file COPYING3.  If not see
 #define RS6000_CPU(NAME, CPU, FLAGS)
 #include "rs6000-cpus.def"
 #undef RS6000_CPU
-#undef TARGET_CPU_DEFAULT
 
 #if (TARGET_DEFAULT & MASK_LITTLE_ENDIAN)
 #undef TARGET_DEFAULT
@@ -29,20 +28,10 @@ along with GCC; see the file COPYING3.  If not see
                        | MASK_LITTLE_ENDIAN)
 #undef ASM_DEFAULT_SPEC
 #define ASM_DEFAULT_SPEC "-mpower8"
-#define TARGET_CPU_DEFAULT "power8"
-
 #else
 #undef TARGET_DEFAULT
 #define TARGET_DEFAULT (OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT \
                        | OPTION_MASK_MFCRF | MASK_POWERPC64 | MASK_64BIT)
 #undef ASM_DEFAULT_SPEC
 #define ASM_DEFAULT_SPEC "-mpower4"
-
-#if (TARGET_DEFAULT & MASK_POWERPC64)
-#define TARGET_CPU_DEFAULT "powerpc64"
-
-#else
-#define TARGET_CPU_DEFAULT "powerpc"
-#endif
-
 #endif
diff --git a/gcc/config/rs6000/driver-rs6000.cc 
b/gcc/config/rs6000/driver-rs6000.cc
index 57199b3172f1..a054827b2e03 100644
--- a/gcc/config/rs6000/driver-rs6000.cc
+++ b/gcc/config/rs6000/driver-rs6000.cc
@@ -453,7 +453,6 @@ static const struct asm_name asm_names[] = {
   { "power9",  "-mpwr9" },
   { "power10", "-mpwr10" },
   { "power11", "-mpwr11" },
-  { "future",  "-mfuture" },
   { "powerpc", "-mppc" },
   { "rs64",    "-mppc" },
   { "603",     "-m603" },
@@ -483,7 +482,6 @@ static const struct asm_name asm_names[] = {
   { "power9",  "-mpower9" },
   { "power10", "-mpower10" },
   { "power11", "-mpower11" },
-  { "future",  "-mfuture" },
   { "a2",      "-ma2" },
   { "powerpc", "-mppc" },
   { "powerpc64", "-mppc64" },
diff --git a/gcc/config/rs6000/power10.md b/gcc/config/rs6000/power10.md
index e42b057dc45b..2310c4603457 100644
--- a/gcc/config/rs6000/power10.md
+++ b/gcc/config/rs6000/power10.md
@@ -1,4 +1,4 @@
-;; Scheduling description for the IBM Power10, Power11, and Future processors.
+;; Scheduling description for the IBM Power10 and Power11 processors.
 ;; Copyright (C) 2020-2024 Free Software Foundation, Inc.
 ;;
 ;; Contributed by Pat Haugen (pthau...@us.ibm.com).
@@ -97,12 +97,12 @@
        (eq_attr "update" "no")
        (eq_attr "size" "!128")
        (eq_attr "prefixed" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,LU_power10")
 
 (define_insn_reservation "power10-fused-load" 4
   (and (eq_attr "type" "fused_load_cmpi,fused_addis_load,fused_load_load")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10")
 
 (define_insn_reservation "power10-prefixed-load" 4
@@ -110,13 +110,13 @@
        (eq_attr "update" "no")
        (eq_attr "size" "!128")
        (eq_attr "prefixed" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10")
 
 (define_insn_reservation "power10-load-update" 4
   (and (eq_attr "type" "load")
        (eq_attr "update" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10+SXU_power10")
 
 (define_insn_reservation "power10-fpload-double" 4
@@ -124,7 +124,7 @@
        (eq_attr "update" "no")
        (eq_attr "size" "64")
        (eq_attr "prefixed" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,LU_power10")
 
 (define_insn_reservation "power10-prefixed-fpload-double" 4
@@ -132,14 +132,14 @@
        (eq_attr "update" "no")
        (eq_attr "size" "64")
        (eq_attr "prefixed" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10")
 
 (define_insn_reservation "power10-fpload-update-double" 4
   (and (eq_attr "type" "fpload")
        (eq_attr "update" "yes")
        (eq_attr "size" "64")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10+SXU_power10")
 
 ; SFmode loads are cracked and have additional 3 cycles over DFmode
@@ -148,27 +148,27 @@
   (and (eq_attr "type" "fpload")
        (eq_attr "update" "no")
        (eq_attr "size" "32")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10")
 
 (define_insn_reservation "power10-fpload-update-single" 7
   (and (eq_attr "type" "fpload")
        (eq_attr "update" "yes")
        (eq_attr "size" "32")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10+SXU_power10")
 
 (define_insn_reservation "power10-vecload" 4
   (and (eq_attr "type" "vecload")
        (eq_attr "size" "!256")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,LU_power10")
 
 ; lxvp
 (define_insn_reservation "power10-vecload-pair" 4
   (and (eq_attr "type" "vecload")
        (eq_attr "size" "256")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10+SXU_power10")
 
 ; Store Unit
@@ -178,12 +178,12 @@
        (eq_attr "prefixed" "no")
        (eq_attr "size" "!128")
        (eq_attr "size" "!256")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,STU_power10")
 
 (define_insn_reservation "power10-fused-store" 0
   (and (eq_attr "type" "fused_store_store")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,STU_power10")
 
 (define_insn_reservation "power10-prefixed-store" 0
@@ -191,52 +191,52 @@
        (eq_attr "prefixed" "yes")
        (eq_attr "size" "!128")
        (eq_attr "size" "!256")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,STU_power10")
 
 ; Update forms have 2 cycle latency for updated addr reg
 (define_insn_reservation "power10-store-update" 2
   (and (eq_attr "type" "store,fpstore")
        (eq_attr "update" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,STU_power10")
 
 ; stxvp
 (define_insn_reservation "power10-vecstore-pair" 0
   (and (eq_attr "type" "vecstore")
        (eq_attr "size" "256")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,stu0_power10+stu1_power10")
 
 (define_insn_reservation "power10-larx" 4
   (and (eq_attr "type" "load_l")
        (eq_attr "size" "!128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,LU_power10")
 
 ; All load quad forms
 (define_insn_reservation "power10-lq" 4
   (and (eq_attr "type" "load,load_l")
        (eq_attr "size" "128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,LU_power10+SXU_power10")
 
 (define_insn_reservation "power10-stcx" 0
   (and (eq_attr "type" "store_c")
        (eq_attr "size" "!128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,STU_power10")
 
 ; All store quad forms
 (define_insn_reservation "power10-stq" 0
   (and (eq_attr "type" "store,store_c")
        (eq_attr "size" "128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,stu0_power10+stu1_power10")
 
 (define_insn_reservation "power10-sync" 1
   (and (eq_attr "type" "sync,isync")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,STU_power10")
 
 
@@ -248,7 +248,7 @@
 (define_insn_reservation "power10-alu" 2
   (and (eq_attr "type" "add,exts,integer,logical,isel")
        (eq_attr "prefixed" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 ; 4 cycle CR latency
 (define_bypass 4 "power10-alu"
@@ -256,28 +256,28 @@
 
 (define_insn_reservation "power10-fused_alu" 2
   (and (eq_attr "type" "fused_arith_logical,fused_cmp_isel,fused_carry")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 ; paddi
 (define_insn_reservation "power10-paddi" 2
   (and (eq_attr "type" "add")
        (eq_attr "prefixed" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 ; Rotate/shift (non-record form)
 (define_insn_reservation "power10-rot" 2
   (and (eq_attr "type" "insert,shift")
        (eq_attr "dot" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 ; Record form rotate/shift
 (define_insn_reservation "power10-rot-compare" 3
   (and (eq_attr "type" "insert,shift")
        (eq_attr "dot" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 ; 5 cycle CR latency
 (define_bypass 5 "power10-rot-compare"
@@ -285,7 +285,7 @@
 
 (define_insn_reservation "power10-alu2" 3
   (and (eq_attr "type" "cntlz,popcnt,trap")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 ; 5 cycle CR latency
 (define_bypass 5 "power10-alu2"
@@ -293,24 +293,24 @@
 
 (define_insn_reservation "power10-cmp" 2
   (and (eq_attr "type" "cmp")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 ; Treat 'two' and 'three' types as 2 or 3 way cracked
 (define_insn_reservation "power10-two" 4
   (and (eq_attr "type" "two")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 (define_insn_reservation "power10-three" 6
   (and (eq_attr "type" "three")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_all_power10,EXU_power10")
 
 (define_insn_reservation "power10-mul" 5
   (and (eq_attr "type" "mul")
        (eq_attr "dot" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 ; 4 cycle MUL->MUL latency
 (define_bypass 4 "power10-mul"
@@ -319,7 +319,7 @@
 (define_insn_reservation "power10-mul-compare" 5
   (and (eq_attr "type" "mul")
        (eq_attr "dot" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 ; 4 cycle MUL->MUL latency
 (define_bypass 4 "power10-mul-compare"
@@ -331,13 +331,13 @@
 (define_insn_reservation "power10-div" 12
   (and (eq_attr "type" "div")
        (eq_attr "dot" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-div-compare" 12
   (and (eq_attr "type" "div")
        (eq_attr "dot" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 ; 14 cycle CR latency
 (define_bypass 14 "power10-div-compare"
@@ -345,34 +345,34 @@
 
 (define_insn_reservation "power10-crlogical" 2
   (and (eq_attr "type" "cr_logical")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-mfcrf" 2
   (and (eq_attr "type" "mfcrf")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-mfcr" 3
   (and (eq_attr "type" "mfcr")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 ; Should differentiate between 1 cr field and > 1 since target of > 1 cr
 ; is cracked
 (define_insn_reservation "power10-mtcr" 3
   (and (eq_attr "type" "mtcr")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-mtjmpr" 3
   (and (eq_attr "type" "mtjmpr")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-mfjmpr" 2
   (and (eq_attr "type" "mfjmpr")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 
@@ -380,126 +380,126 @@
 
 (define_insn_reservation "power10-fpsimple" 3
   (and (eq_attr "type" "fpsimple")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-fp" 5
   (and (eq_attr "type" "fp,dmul")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-fpcompare" 3
   (and (eq_attr "type" "fpcompare")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-sdiv" 22
   (and (eq_attr "type" "sdiv")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-ddiv" 27
   (and (eq_attr "type" "ddiv")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-sqrt" 26
   (and (eq_attr "type" "ssqrt")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-dsqrt" 36
   (and (eq_attr "type" "dsqrt")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-vec-2cyc" 2
   (and (eq_attr "type" "vecmove,veclogical,vecexts,veccmpfx")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-fused-vec" 2
   (and (eq_attr "type" "fused_vector")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 (define_insn_reservation "power10-veccmp" 3
   (and (eq_attr "type" "veccmp")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-vecsimple" 2
   (and (eq_attr "type" "vecsimple")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-vecnormal" 5
   (and (eq_attr "type" "vecfloat,vecdouble")
        (eq_attr "size" "!128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-qp" 12
   (and (eq_attr "type" "vecfloat,vecdouble")
        (eq_attr "size" "128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-vecperm" 3
   (and (eq_attr "type" "vecperm")
        (eq_attr "prefixed" "no")
        (eq_attr "dot" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-vecperm-compare" 3
   (and (eq_attr "type" "vecperm")
        (eq_attr "dot" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 (define_insn_reservation "power10-prefixed-vecperm" 3
   (and (eq_attr "type" "vecperm")
        (eq_attr "prefixed" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 (define_insn_reservation "power10-veccomplex" 6
   (and (eq_attr "type" "veccomplex")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-vecfdiv" 24
   (and (eq_attr "type" "vecfdiv")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-vecdiv" 27
   (and (eq_attr "type" "vecdiv")
        (eq_attr "size" "!128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-qpdiv" 56
   (and (eq_attr "type" "vecdiv")
        (eq_attr "size" "128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-qpmul" 24
   (and (eq_attr "type" "qmul")
        (eq_attr "size" "128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-mtvsr" 2
   (and (eq_attr "type" "mtvsr")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-mfvsr" 2
   (and (eq_attr "type" "mfvsr")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 
@@ -507,26 +507,26 @@
 ; Branch is 2 cycles, grouped with STU for issue
 (define_insn_reservation "power10-branch" 2
   (and (eq_attr "type" "jmpreg,branch")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,STU_power10")
 
 (define_insn_reservation "power10-fused-branch" 3
   (and (eq_attr "type" "fused_mtbc")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,STU_power10")
 
 
 ; Crypto
 (define_insn_reservation "power10-crypto" 4
   (and (eq_attr "type" "crypto")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 
 ; HTM
 (define_insn_reservation "power10-htm" 2
   (and (eq_attr "type" "htmsimple,htm")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 
@@ -535,26 +535,26 @@
 (define_insn_reservation "power10-dfp" 12
   (and (eq_attr "type" "dfp")
        (eq_attr "size" "!128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_power10")
 
 (define_insn_reservation "power10-dfpq" 12
   (and (eq_attr "type" "dfp")
        (eq_attr "size" "128")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_power10")
 
 ; MMA
 (define_insn_reservation "power10-mma" 9
   (and (eq_attr "type" "mma")
        (eq_attr "prefixed" "no")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_any_power10,EXU_super_power10")
 
 (define_insn_reservation "power10-prefixed-mma" 9
   (and (eq_attr "type" "mma")
        (eq_attr "prefixed" "yes")
-       (eq_attr "cpu" "power10,power11,future"))
+       (eq_attr "cpu" "power10,power11"))
   "DU_even_power10,EXU_super_power10")
 ; 4 cycle MMA->MMA latency
 (define_bypass 4 "power10-mma,power10-prefixed-mma"
diff --git a/gcc/config/rs6000/rs6000-arch.def 
b/gcc/config/rs6000/rs6000-arch.def
deleted file mode 100644
index c0dbc5834333..000000000000
--- a/gcc/config/rs6000/rs6000-arch.def
+++ /dev/null
@@ -1,49 +0,0 @@
-/* IBM RS/6000 CPU architecture features by processor type.
-   Copyright (C) 2024 Free Software Foundation, Inc.
-   Contributed by Michael Meissner (meiss...@linux.ibm.com)
-
-   This file is part of GCC.
-
-   GCC is free software; you can redistribute it and/or modify it
-   under the terms of the GNU General Public License as published
-   by the Free Software Foundation; either version 3, or (at your
-   option) any later version.
-
-   GCC is distributed in the hope that it will be useful, but WITHOUT
-   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-   or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public
-   License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with GCC; see the file COPYING3.  If not see
-   <http://www.gnu.org/licenses/>.  */
-
-/* This file defines architecture features that are based on the -mcpu=<proc>
-   option, and not on user options that can be turned on or off.  The intention
-   is for newer processors (power7 and above) to not add new ISA bits for the
-   particular processor, but add these bits.  Otherwise we have to add a bunch
-   of hidden options, just so we have the proper ISA bits.
-
-   For example, in the past we added -mpower8-internal, so that on power8,
-   power9, and power10 would inherit the option, but we had to mark the option
-   generate a warning if the user actually used it.  These options have been
-   moved from the ISA flags to the arch flags.
-
-   To use this, define the macro ARCH_EXPAND which takes 2 arguments.  The
-   first argument is the processor name in upper case, and the second argument
-   is a text name for the processor.
-
-   The function get_arch_flags when passed a processor index number will set up
-   the appropriate architecture flags based on the actual processor
-   enumeration.  */
-
-ARCH_EXPAND(POWER4,  "power4")
-ARCH_EXPAND(POWER5,  "power5")
-ARCH_EXPAND(POWER5X, "power5+")
-ARCH_EXPAND(POWER6,  "power6")
-ARCH_EXPAND(POWER7,  "power7")
-ARCH_EXPAND(POWER8,  "power8")
-ARCH_EXPAND(POWER9,  "power9")
-ARCH_EXPAND(POWER10, "power10")
-ARCH_EXPAND(POWER11, "power11")
-ARCH_EXPAND(FUTURE,  "future")
diff --git a/gcc/config/rs6000/rs6000-c.cc b/gcc/config/rs6000/rs6000-c.cc
index 30ea1d64326e..4dc80e598fa4 100644
--- a/gcc/config/rs6000/rs6000-c.cc
+++ b/gcc/config/rs6000/rs6000-c.cc
@@ -339,8 +339,7 @@ rs6000_define_or_undefine_macro (bool define_p, const char 
*name)
    #pragma GCC target, we need to adjust the macros dynamically.  */
 
 void
-rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags,
-                            HOST_WIDE_INT arch_flags)
+rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT flags)
 {
   if (TARGET_DEBUG_BUILTIN || TARGET_DEBUG_TARGET)
     fprintf (stderr,
@@ -413,7 +412,7 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT 
flags,
        summary of the flags associated with particular cpu
        definitions.  */
 
-  /* rs6000_isa_flags and rs6000_arch_flags based options.  */
+  /* rs6000_isa_flags based options.  */
   rs6000_define_or_undefine_macro (define_p, "_ARCH_PPC");
   if ((flags & OPTION_MASK_PPC_GPOPT) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PPCSQ");
@@ -421,28 +420,24 @@ rs6000_target_modify_macros (bool define_p, HOST_WIDE_INT 
flags,
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PPCGR");
   if ((flags & OPTION_MASK_POWERPC64) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PPC64");
-  if ((flags & OPTION_MASK_POWERPC64) != 0)
-    rs6000_define_or_undefine_macro (define_p, "_ARCH_PPC64");
-  if ((arch_flags & ARCH_MASK_POWER4) != 0)
+  if ((flags & OPTION_MASK_MFCRF) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR4");
-  if ((arch_flags & ARCH_MASK_POWER5) != 0)
+  if ((flags & OPTION_MASK_POPCNTB) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR5");
-  if ((arch_flags & ARCH_MASK_POWER5X) != 0)
+  if ((flags & OPTION_MASK_FPRND) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR5X");
-  if ((arch_flags & ARCH_MASK_POWER6) != 0)
+  if ((flags & OPTION_MASK_CMPB) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR6");
-  if ((arch_flags & ARCH_MASK_POWER7) != 0)
+  if ((flags & OPTION_MASK_POPCNTD) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR7");
-  if ((arch_flags & ARCH_MASK_POWER8) != 0)
+  if ((flags & OPTION_MASK_POWER8) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR8");
-  if ((arch_flags & ARCH_MASK_POWER9) != 0)
+  if ((flags & OPTION_MASK_MODULO) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR9");
-  if ((arch_flags & ARCH_MASK_POWER10) != 0)
+  if ((flags & OPTION_MASK_POWER10) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR10");
-  if ((arch_flags & ARCH_MASK_POWER11) != 0)
+  if ((flags & OPTION_MASK_POWER11) != 0)
     rs6000_define_or_undefine_macro (define_p, "_ARCH_PWR11");
-  if ((arch_flags & ARCH_MASK_FUTURE) != 0)
-    rs6000_define_or_undefine_macro (define_p, "_ARCH_FUTURE");
   if ((flags & OPTION_MASK_SOFT_FLOAT) != 0)
     rs6000_define_or_undefine_macro (define_p, "_SOFT_FLOAT");
   if ((flags & OPTION_MASK_RECIP_PRECISION) != 0)
@@ -611,7 +606,7 @@ void
 rs6000_cpu_cpp_builtins (cpp_reader *pfile)
 {
   /* Define all of the common macros.  */
-  rs6000_target_modify_macros (true, rs6000_isa_flags, rs6000_arch_flags);
+  rs6000_target_modify_macros (true, rs6000_isa_flags);
 
   if (TARGET_FRE)
     builtin_define ("__RECIP__");
diff --git a/gcc/config/rs6000/rs6000-cpus.def 
b/gcc/config/rs6000/rs6000-cpus.def
index e73d9ef51f8d..84fac8bdac1d 100644
--- a/gcc/config/rs6000/rs6000-cpus.def
+++ b/gcc/config/rs6000/rs6000-cpus.def
@@ -47,6 +47,7 @@
    fusion here, instead set it in rs6000.cc if we are tuning for a power8
    system.  */
 #define ISA_2_7_MASKS_SERVER   (ISA_2_6_MASKS_SERVER                   \
+                                | OPTION_MASK_POWER8                   \
                                 | OPTION_MASK_P8_VECTOR                \
                                 | OPTION_MASK_CRYPTO                   \
                                 | OPTION_MASK_EFFICIENT_UNALIGNED_VSX  \
@@ -82,11 +83,11 @@
                                 | OPTION_MASK_PREFIXED)
 
 #define ISA_3_1_MASKS_SERVER   (ISA_3_0_MASKS_SERVER                   \
+                                | OPTION_MASK_POWER10                  \
                                 | OTHER_POWER10_MASKS)
 
-#define POWER11_MASKS_SERVER   ISA_3_1_MASKS_SERVER
-
-#define FUTURE_MASKS_SERVER    POWER11_MASKS_SERVER
+#define POWER11_MASKS_SERVER (ISA_3_1_MASKS_SERVER                     \
+                             | OPTION_MASK_POWER11)
 
 /* Flags that need to be turned off if -mno-vsx.  */
 #define OTHER_VSX_VECTOR_MASKS (OPTION_MASK_EFFICIENT_UNALIGNED_VSX    \
@@ -124,6 +125,8 @@
                                 | OPTION_MASK_FLOAT128_HW              \
                                 | OPTION_MASK_FLOAT128_KEYWORD         \
                                 | OPTION_MASK_FPRND                    \
+                                | OPTION_MASK_POWER10                  \
+                                | OPTION_MASK_POWER11                  \
                                 | OPTION_MASK_P10_FUSION               \
                                 | OPTION_MASK_HTM                      \
                                 | OPTION_MASK_ISEL                     \
@@ -132,6 +135,7 @@
                                 | OPTION_MASK_MODULO                   \
                                 | OPTION_MASK_MULHW                    \
                                 | OPTION_MASK_NO_UPDATE                \
+                                | OPTION_MASK_POWER8                   \
                                 | OPTION_MASK_P8_FUSION                \
                                 | OPTION_MASK_P8_VECTOR                \
                                 | OPTION_MASK_P9_MINMAX                \
@@ -251,7 +255,6 @@ RS6000_CPU ("power9", PROCESSOR_POWER9, MASK_POWERPC64 | 
ISA_3_0_MASKS_SERVER
            | OPTION_MASK_HTM)
 RS6000_CPU ("power10", PROCESSOR_POWER10, MASK_POWERPC64 | 
ISA_3_1_MASKS_SERVER)
 RS6000_CPU ("power11", PROCESSOR_POWER11, MASK_POWERPC64 | 
POWER11_MASKS_SERVER)
-RS6000_CPU ("future", PROCESSOR_FUTURE, MASK_POWERPC64 | FUTURE_MASKS_SERVER)
 RS6000_CPU ("powerpc", PROCESSOR_POWERPC, 0)
 RS6000_CPU ("powerpc64", PROCESSOR_POWERPC64, OPTION_MASK_PPC_GFXOPT
            | MASK_POWERPC64)
diff --git a/gcc/config/rs6000/rs6000-opts.h b/gcc/config/rs6000/rs6000-opts.h
index c25ddf92858c..88e357835a5c 100644
--- a/gcc/config/rs6000/rs6000-opts.h
+++ b/gcc/config/rs6000/rs6000-opts.h
@@ -63,7 +63,6 @@ enum processor_type
    PROCESSOR_POWER9,
    PROCESSOR_POWER10,
    PROCESSOR_POWER11,
-   PROCESSOR_FUTURE,
 
    PROCESSOR_RS64A,
    PROCESSOR_MPCCORE,
diff --git a/gcc/config/rs6000/rs6000-protos.h 
b/gcc/config/rs6000/rs6000-protos.h
index da658cd5ab2e..b40557a85577 100644
--- a/gcc/config/rs6000/rs6000-protos.h
+++ b/gcc/config/rs6000/rs6000-protos.h
@@ -323,9 +323,8 @@ extern void rs6000_cpu_cpp_builtins (struct cpp_reader *);
 extern bool rs6000_pragma_target_parse (tree, tree);
 #endif
 extern void rs6000_activate_target_options (tree new_tree);
-extern void rs6000_target_modify_macros (bool, HOST_WIDE_INT, HOST_WIDE_INT);
-extern void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT,
-                                               HOST_WIDE_INT);
+extern void rs6000_target_modify_macros (bool, HOST_WIDE_INT);
+extern void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT);
 
 #ifdef NO_DOLLAR_IN_LABEL
 const char * rs6000_xcoff_strip_dollar (const char *);
diff --git a/gcc/config/rs6000/rs6000-tables.opt 
b/gcc/config/rs6000/rs6000-tables.opt
index fc187c641f8d..a5649fef1ece 100644
--- a/gcc/config/rs6000/rs6000-tables.opt
+++ b/gcc/config/rs6000/rs6000-tables.opt
@@ -189,17 +189,14 @@ EnumValue
 Enum(rs6000_cpu_opt_value) String(power11) Value(53)
 
 EnumValue
-Enum(rs6000_cpu_opt_value) String(future) Value(54)
+Enum(rs6000_cpu_opt_value) String(powerpc) Value(54)
 
 EnumValue
-Enum(rs6000_cpu_opt_value) String(powerpc) Value(55)
+Enum(rs6000_cpu_opt_value) String(powerpc64) Value(55)
 
 EnumValue
-Enum(rs6000_cpu_opt_value) String(powerpc64) Value(56)
+Enum(rs6000_cpu_opt_value) String(powerpc64le) Value(56)
 
 EnumValue
-Enum(rs6000_cpu_opt_value) String(powerpc64le) Value(57)
-
-EnumValue
-Enum(rs6000_cpu_opt_value) String(rs64) Value(58)
+Enum(rs6000_cpu_opt_value) String(rs64) Value(57)
 
diff --git a/gcc/config/rs6000/rs6000.cc b/gcc/config/rs6000/rs6000.cc
index 96603ca61d84..6b58c060f539 100644
--- a/gcc/config/rs6000/rs6000.cc
+++ b/gcc/config/rs6000/rs6000.cc
@@ -252,17 +252,17 @@ enum {
 
 /* Map compiler ISA bits into HWCAP names.  */
 struct clone_map {
-  HOST_WIDE_INT arch_mask;     /* rs6000_arch_mask.  */
+  HOST_WIDE_INT isa_mask;      /* rs6000_isa mask */
   const char *name;            /* name to use in __builtin_cpu_supports.  */
 };
 
 static const struct clone_map rs6000_clone_map[CLONE_MAX] = {
-  { 0,                 "" },           /* Default options.  */
-  { ARCH_MASK_POWER6,  "arch_2_05" },  /* ISA 2.05 (power6).  */
-  { ARCH_MASK_POWER7,  "arch_2_06" },  /* ISA 2.06 (power7).  */
-  { ARCH_MASK_POWER8,  "arch_2_07" },  /* ISA 2.07 (power8).  */
-  { ARCH_MASK_POWER9,  "arch_3_00" },  /* ISA 3.0 (power9).  */
-  { ARCH_MASK_POWER10, "arch_3_1" },   /* ISA 3.1 (power10).  */
+  { 0,                         "" },           /* Default options.  */
+  { OPTION_MASK_CMPB,          "arch_2_05" },  /* ISA 2.05 (power6).  */
+  { OPTION_MASK_POPCNTD,       "arch_2_06" },  /* ISA 2.06 (power7).  */
+  { OPTION_MASK_P8_VECTOR,     "arch_2_07" },  /* ISA 2.07 (power8).  */
+  { OPTION_MASK_P9_VECTOR,     "arch_3_00" },  /* ISA 3.0 (power9).  */
+  { OPTION_MASK_POWER10,       "arch_3_1" },   /* ISA 3.1 (power10).  */
 };
 
 
@@ -278,7 +278,7 @@ bool cpu_builtin_p = false;
 /* Pointer to function (in rs6000-c.cc) that can define or undefine target
    macros that have changed.  Languages that don't support the preprocessor
    don't link in rs6000-c.cc, so we can't call it directly.  */
-void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT, HOST_WIDE_INT);
+void (*rs6000_target_modify_macros_ptr) (bool, HOST_WIDE_INT);
 
 /* Simplfy register classes into simpler classifications.  We assume
    GPR_REG_TYPE - FPR_REG_TYPE are ordered so that we can use a simple range
@@ -1068,7 +1068,7 @@ struct processor_costs power9_cost = {
   COSTS_N_INSNS (3),   /* SF->DF convert */
 };
 
-/* Instruction costs on Power10/Power11/future processors.  */
+/* Instruction costs on Power10/Power11 processors.  */
 static const
 struct processor_costs power10_cost = {
   COSTS_N_INSNS (2),   /* mulsi */
@@ -1171,9 +1171,8 @@ enum reg_class (*rs6000_preferred_reload_class_ptr) (rtx, 
enum reg_class)
 const int INSN_NOT_AVAILABLE = -1;
 
 static void rs6000_print_isa_options (FILE *, int, const char *,
-                                     HOST_WIDE_INT, HOST_WIDE_INT);
+                                     HOST_WIDE_INT);
 static HOST_WIDE_INT rs6000_disable_incompatible_switches (void);
-static void report_architecture_mismatch (void);
 
 static enum rs6000_reg_type register_to_reg_type (rtx, bool *);
 static bool rs6000_secondary_reload_move (enum rs6000_reg_type,
@@ -1819,87 +1818,6 @@ rs6000_cpu_name_lookup (const char *name)
   return -1;
 }
 
-
-/* Map the processor into the arch bits that are set off of -mcpu=<xxx> instead
-   of having an internal -m<foo> option.  */
-
-static HOST_WIDE_INT
-get_arch_flags (int cpu_index)
-{
-  HOST_WIDE_INT ret = 0;
-
-  const HOST_WIDE_INT ARCH_COMBO_POWER4  = ARCH_MASK_POWER4;
-  const HOST_WIDE_INT ARCH_COMBO_POWER5  = ARCH_MASK_POWER5  | 
ARCH_COMBO_POWER4;
-  const HOST_WIDE_INT ARCH_COMBO_POWER5X = ARCH_MASK_POWER5X | 
ARCH_COMBO_POWER5;
-  const HOST_WIDE_INT ARCH_COMBO_POWER6  = ARCH_MASK_POWER6  | 
ARCH_COMBO_POWER5X;
-  const HOST_WIDE_INT ARCH_COMBO_POWER7  = ARCH_MASK_POWER7  | 
ARCH_COMBO_POWER6;
-  const HOST_WIDE_INT ARCH_COMBO_POWER8  = ARCH_MASK_POWER8  | 
ARCH_COMBO_POWER7;
-  const HOST_WIDE_INT ARCH_COMBO_POWER9  = ARCH_MASK_POWER9  | 
ARCH_COMBO_POWER8;
-  const HOST_WIDE_INT ARCH_COMBO_POWER10 = ARCH_MASK_POWER10 | 
ARCH_COMBO_POWER9;
-  const HOST_WIDE_INT ARCH_COMBO_POWER11 = ARCH_MASK_POWER11 | 
ARCH_COMBO_POWER10;
-  const HOST_WIDE_INT ARCH_COMBO_FUTURE  = ARCH_MASK_FUTURE  | 
ARCH_COMBO_POWER11;
-
-  if (cpu_index >= 0)
-    switch (processor_target_table[cpu_index].processor)
-      {
-      case PROCESSOR_FUTURE:
-       ret = ARCH_COMBO_FUTURE;
-       break;
-
-      case PROCESSOR_POWER11:
-       ret = ARCH_COMBO_POWER11;
-       break;
-
-      case PROCESSOR_POWER10:
-       ret = ARCH_COMBO_POWER10;
-       break;
-
-      case PROCESSOR_POWER9:
-       ret = ARCH_COMBO_POWER9;
-       break;
-
-      case PROCESSOR_POWER8:
-       ret = ARCH_COMBO_POWER8;
-       break;
-
-      case PROCESSOR_POWER7:
-       ret = ARCH_COMBO_POWER7;
-       break;
-
-      case PROCESSOR_PPCA2:
-      case PROCESSOR_POWER6:
-       ret = ARCH_COMBO_POWER6;
-       break;
-
-      case PROCESSOR_POWER5:
-       ret = ARCH_COMBO_POWER5;
-       if (TARGET_FPRND)
-         ret |= ARCH_MASK_POWER5X;
-       break;
-
-      case PROCESSOR_POWER4:
-       ret = ARCH_COMBO_POWER4;
-       break;
-
-      default:
-       /* For other processors, set the arch flags based on the ISA bits.  */
-       if (TARGET_MFCRF)
-         ret |= ARCH_MASK_POWER4;
-
-       if (TARGET_POPCNTB)
-         ret |= ARCH_MASK_POWER5;
-
-       if (TARGET_FPRND)
-         ret |= ARCH_MASK_POWER5X;
-
-       if (TARGET_CMPB)
-         ret |= ARCH_MASK_POWER6;
-       break;
-      }
-
-  return ret;
-}
-
 
 /* Return number of consecutive hard regs needed starting at reg REGNO
    to hold something of mode MODE.
@@ -2481,10 +2399,9 @@ rs6000_debug_reg_global (void)
       const char *name = processor_target_table[rs6000_cpu_index].name;
       HOST_WIDE_INT flags
        = processor_target_table[rs6000_cpu_index].target_enable;
-      HOST_WIDE_INT arch_flags = get_arch_flags (rs6000_cpu_index);
 
       sprintf (flags_buffer, "-mcpu=%s flags", name);
-      rs6000_print_isa_options (stderr, 0, flags_buffer, flags, arch_flags);
+      rs6000_print_isa_options (stderr, 0, flags_buffer, flags);
     }
   else
     fprintf (stderr, DEBUG_FMT_S, "cpu", "<none>");
@@ -2494,26 +2411,21 @@ rs6000_debug_reg_global (void)
       const char *name = processor_target_table[rs6000_tune_index].name;
       HOST_WIDE_INT flags
        = processor_target_table[rs6000_tune_index].target_enable;
-      HOST_WIDE_INT arch_flags = get_arch_flags (rs6000_tune_index);
 
       sprintf (flags_buffer, "-mtune=%s flags", name);
-      rs6000_print_isa_options (stderr, 0, flags_buffer, flags, arch_flags);
+      rs6000_print_isa_options (stderr, 0, flags_buffer, flags);
     }
   else
     fprintf (stderr, DEBUG_FMT_S, "tune", "<none>");
 
   cl_target_option_save (&cl_opts, &global_options, &global_options_set);
   rs6000_print_isa_options (stderr, 0, "rs6000_isa_flags",
-                           rs6000_isa_flags, 0);
+                           rs6000_isa_flags);
 
   rs6000_print_isa_options (stderr, 0, "rs6000_isa_flags_explicit",
-                           rs6000_isa_flags_explicit, 0);
+                           rs6000_isa_flags_explicit);
 
-  if (rs6000_arch_flags)
-    rs6000_print_isa_options (stderr, 0, "rs6000_arch_flags", 0,
-                             rs6000_arch_flags);
-
-  rs6000_print_isa_options (stderr, 0, "TARGET_DEFAULT", TARGET_DEFAULT, 0);
+  rs6000_print_isa_options (stderr, 0, "TARGET_DEFAULT", TARGET_DEFAULT);
 
   fprintf (stderr, DEBUG_FMT_S, "--with-cpu default",
           OPTION_TARGET_CPU_DEFAULT ? OPTION_TARGET_CPU_DEFAULT : "<none>");
@@ -3701,6 +3613,7 @@ rs6000_option_override_internal (bool global_init_p)
   bool ret = true;
 
   HOST_WIDE_INT set_masks;
+  HOST_WIDE_INT ignore_masks;
   int cpu_index = -1;
   int tune_index;
   struct cl_target_option *main_target_opt
@@ -3709,7 +3622,7 @@ rs6000_option_override_internal (bool global_init_p)
 
   /* Print defaults.  */
   if ((TARGET_DEBUG_REG || TARGET_DEBUG_TARGET) && global_init_p)
-    rs6000_print_isa_options (stderr, 0, "TARGET_DEFAULT", TARGET_DEFAULT, 0);
+    rs6000_print_isa_options (stderr, 0, "TARGET_DEFAULT", TARGET_DEFAULT);
 
   /* Remember the explicit arguments.  */
   if (global_init_p)
@@ -3840,8 +3753,6 @@ rs6000_option_override_internal (bool global_init_p)
       rs6000_isa_flags |= (flags & ~rs6000_isa_flags_explicit);
     }
 
-  rs6000_arch_flags = get_arch_flags (cpu_index);
-
   /* Don't expect powerpc64 enabled on those OSes with OS_MISSING_POWERPC64,
      since they do not save and restore the high half of the GPRs correctly
      in all cases.  If the user explicitly specifies it, we won't interfere
@@ -3909,7 +3820,8 @@ rs6000_option_override_internal (bool global_init_p)
 
   /* If little-endian, default to -mstrict-align on older processors.  */
   if (!BYTES_BIG_ENDIAN
-      && (get_arch_flags (tune_index) & ARCH_MASK_POWER8) == 0)
+      && !(processor_target_table[tune_index].target_enable
+          & OPTION_MASK_POWER8))
     rs6000_isa_flags |= ~rs6000_isa_flags_explicit & OPTION_MASK_STRICT_ALIGN;
 
   /* Add some warnings for VSX.  */
@@ -3960,8 +3872,7 @@ rs6000_option_override_internal (bool global_init_p)
                         & ~rs6000_isa_flags_explicit);
 
   if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
-    rs6000_print_isa_options (stderr, 0, "before defaults", rs6000_isa_flags,
-                             rs6000_arch_flags);
+    rs6000_print_isa_options (stderr, 0, "before defaults", rs6000_isa_flags);
 
 #ifdef XCOFF_DEBUGGING_INFO
   /* For AIX default to 64-bit DWARF.  */
@@ -3969,13 +3880,59 @@ rs6000_option_override_internal (bool global_init_p)
     dwarf_offset_size = POINTER_SIZE_UNITS;
 #endif
 
-  /* Report trying to use things like -mmodulo to imply -mcpu=power9.  */
-  report_architecture_mismatch ();
+  /* Handle explicit -mno-{altivec,vsx} and turn off all of
+     the options that depend on those flags.  */
+  ignore_masks = rs6000_disable_incompatible_switches ();
+
+  /* For the newer switches (vsx, dfp, etc.) set some of the older options,
+     unless the user explicitly used the -mno-<option> to disable the code.  */
+  if (TARGET_P9_VECTOR || TARGET_POWER9 || TARGET_P9_MISC)
+    rs6000_isa_flags |= (ISA_3_0_MASKS_SERVER & ~ignore_masks);
+  else if (TARGET_P9_MINMAX)
+    {
+      if (cpu_index >= 0)
+       {
+         if (cpu_index == PROCESSOR_POWER9)
+           {
+             /* legacy behavior: allow -mcpu=power9 with certain
+                capabilities explicitly disabled.  */
+             rs6000_isa_flags |= (ISA_3_0_MASKS_SERVER & ~ignore_masks);
+           }
+         else
+           error ("power9 target option is incompatible with %<%s=<xxx>%> "
+                  "for <xxx> less than power9", "-mcpu");
+       }
+      else if ((ISA_3_0_MASKS_SERVER & rs6000_isa_flags_explicit)
+              != (ISA_3_0_MASKS_SERVER & rs6000_isa_flags
+                  & rs6000_isa_flags_explicit))
+       /* Enforce that none of the ISA_3_0_MASKS_SERVER flags
+          were explicitly cleared.  */
+       error ("%qs incompatible with explicitly disabled options",
+              "-mpower9-minmax");
+      else
+       rs6000_isa_flags |= ISA_3_0_MASKS_SERVER;
+    }
+  else if (TARGET_P8_VECTOR || TARGET_POWER8 || TARGET_CRYPTO)
+    rs6000_isa_flags |= (ISA_2_7_MASKS_SERVER & ~ignore_masks);
+  else if (TARGET_VSX)
+    rs6000_isa_flags |= (ISA_2_6_MASKS_SERVER & ~ignore_masks);
+  else if (TARGET_POWER7)
+    rs6000_isa_flags |= (ISA_2_6_MASKS_EMBEDDED & ~ignore_masks);
+  else if (TARGET_DFP)
+    rs6000_isa_flags |= (ISA_2_5_MASKS_SERVER & ~ignore_masks);
+  else if (TARGET_POWER6)
+    rs6000_isa_flags |= (ISA_2_5_MASKS_EMBEDDED & ~ignore_masks);
+  else if (TARGET_POWER5X)
+    rs6000_isa_flags |= (ISA_2_4_MASKS & ~ignore_masks);
+  else if (TARGET_POWER5)
+    rs6000_isa_flags |= (ISA_2_2_MASKS & ~ignore_masks);
+  else if (TARGET_ALTIVEC)
+    rs6000_isa_flags |= (OPTION_MASK_PPC_GFXOPT & ~ignore_masks);
 
   /* Disable VSX and Altivec silently if the user switched cpus to power7 in a
      target attribute or pragma which automatically enables both options,
      unless the altivec ABI was set.  This is set by default for 64-bit, but
-     not for 32-bit.  Don't move this before report_architecture_mismatch
+     not for 32-bit.  Don't move this before the above code using ignore_masks,
      since it can reset the cleared VSX/ALTIVEC flag again.  */
   if (main_target_opt && !main_target_opt->x_rs6000_altivec_abi)
     {
@@ -4277,8 +4234,7 @@ rs6000_option_override_internal (bool global_init_p)
 
   /* Print the options after updating the defaults.  */
   if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
-    rs6000_print_isa_options (stderr, 0, "after defaults", rs6000_isa_flags,
-                             rs6000_arch_flags);
+    rs6000_print_isa_options (stderr, 0, "after defaults", rs6000_isa_flags);
 
   /* E500mc does "better" if we inline more aggressively.  Respect the
      user's opinion, though.  */
@@ -4385,8 +4341,7 @@ rs6000_option_override_internal (bool global_init_p)
     TARGET_NO_FP_IN_TOC = 1;
 
   if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
-    rs6000_print_isa_options (stderr, 0, "before subtarget", rs6000_isa_flags,
-                             rs6000_arch_flags);
+    rs6000_print_isa_options (stderr, 0, "before subtarget", rs6000_isa_flags);
 
 #ifdef SUBTARGET_OVERRIDE_OPTIONS
   SUBTARGET_OVERRIDE_OPTIONS;
@@ -4433,8 +4388,7 @@ rs6000_option_override_internal (bool global_init_p)
   if (!(rs6000_isa_flags_explicit & OPTION_MASK_P10_FUSION))
     {
       if (rs6000_tune == PROCESSOR_POWER10
-         || rs6000_tune == PROCESSOR_POWER11
-         || rs6000_tune == PROCESSOR_FUTURE)
+         || rs6000_tune == PROCESSOR_POWER11)
        rs6000_isa_flags |= OPTION_MASK_P10_FUSION;
       else
        rs6000_isa_flags &= ~OPTION_MASK_P10_FUSION;
@@ -4454,8 +4408,7 @@ rs6000_option_override_internal (bool global_init_p)
     rs6000_isa_flags &= ~OPTION_MASK_PCREL_OPT;
 
   if (TARGET_DEBUG_REG || TARGET_DEBUG_TARGET)
-    rs6000_print_isa_options (stderr, 0, "after subtarget", rs6000_isa_flags,
-                             rs6000_arch_flags);
+    rs6000_print_isa_options (stderr, 0, "after subtarget", rs6000_isa_flags);
 
   rs6000_always_hint = (rs6000_tune != PROCESSOR_POWER4
                        && rs6000_tune != PROCESSOR_POWER5
@@ -4465,7 +4418,6 @@ rs6000_option_override_internal (bool global_init_p)
                        && rs6000_tune != PROCESSOR_POWER9
                        && rs6000_tune != PROCESSOR_POWER10
                        && rs6000_tune != PROCESSOR_POWER11
-                       && rs6000_tune != PROCESSOR_FUTURE
                        && rs6000_tune != PROCESSOR_PPCA2
                        && rs6000_tune != PROCESSOR_CELL
                        && rs6000_tune != PROCESSOR_PPC476);
@@ -4481,7 +4433,6 @@ rs6000_option_override_internal (bool global_init_p)
                                 || rs6000_tune == PROCESSOR_POWER9
                                 || rs6000_tune == PROCESSOR_POWER10
                                 || rs6000_tune == PROCESSOR_POWER11
-                                || rs6000_tune == PROCESSOR_FUTURE
                                 || rs6000_tune == PROCESSOR_PPCE500MC
                                 || rs6000_tune == PROCESSOR_PPCE500MC64
                                 || rs6000_tune == PROCESSOR_PPCE5500
@@ -4782,7 +4733,6 @@ rs6000_option_override_internal (bool global_init_p)
 
       case PROCESSOR_POWER10:
       case PROCESSOR_POWER11:
-      case PROCESSOR_FUTURE:
        rs6000_cost = &power10_cost;
        break;
 
@@ -5949,30 +5899,27 @@ rs6000_machine_from_flags (void)
     return "ppc64";
 #endif
 
-  HOST_WIDE_INT arch_flags = rs6000_arch_flags;
   HOST_WIDE_INT flags = rs6000_isa_flags;
 
   /* Disable the flags that should never influence the .machine selection.  */
   flags &= ~(OPTION_MASK_PPC_GFXOPT | OPTION_MASK_PPC_GPOPT | OPTION_MASK_ISEL
             | OPTION_MASK_ALTIVEC);
 
-  if ((arch_flags & ARCH_MASK_FUTURE) != 0)
-    return "future";
-  if ((arch_flags & ARCH_MASK_POWER11) != 0)
+  if ((flags & (POWER11_MASKS_SERVER & ~ISA_3_1_MASKS_SERVER)) != 0)
     return "power11";
-  if ((arch_flags & ARCH_MASK_POWER10) != 0)
+  if ((flags & (ISA_3_1_MASKS_SERVER & ~ISA_3_0_MASKS_SERVER)) != 0)
     return "power10";
-  if ((arch_flags & ARCH_MASK_POWER9) != 0)
+  if ((flags & (ISA_3_0_MASKS_SERVER & ~ISA_2_7_MASKS_SERVER)) != 0)
     return "power9";
-  if ((arch_flags & ARCH_MASK_POWER8) != 0)
+  if ((flags & (ISA_2_7_MASKS_SERVER & ~ISA_2_6_MASKS_SERVER)) != 0)
     return "power8";
-  if ((arch_flags & ARCH_MASK_POWER7) != 0)
+  if ((flags & (ISA_2_6_MASKS_SERVER & ~ISA_2_5_MASKS_SERVER)) != 0)
     return "power7";
-  if ((arch_flags & ARCH_MASK_POWER6) != 0)
+  if ((flags & (ISA_2_5_MASKS_SERVER & ~ISA_2_4_MASKS)) != 0)
     return "power6";
-  if ((arch_flags & ARCH_MASK_POWER5) != 0)
+  if ((flags & (ISA_2_4_MASKS & ~ISA_2_1_MASKS)) != 0)
     return "power5";
-  if ((arch_flags & ARCH_MASK_POWER4) != 0)
+  if ((flags & ISA_2_1_MASKS) != 0)
     return "power4";
   if ((flags & OPTION_MASK_POWERPC64) != 0)
     return "ppc64";
@@ -10209,7 +10156,6 @@ rs6000_reassociation_width (unsigned int opc 
ATTRIBUTE_UNUSED,
     case PROCESSOR_POWER9:
     case PROCESSOR_POWER10:
     case PROCESSOR_POWER11:
-    case PROCESSOR_FUTURE:
       if (DECIMAL_FLOAT_MODE_P (mode))
        return 1;
       if (VECTOR_MODE_P (mode))
@@ -18297,8 +18243,7 @@ rs6000_adjust_cost (rtx_insn *insn, int dep_type, 
rtx_insn *dep_insn, int cost,
        /* Separate a load from a narrower, dependent store.  */
        if ((rs6000_sched_groups || rs6000_tune == PROCESSOR_POWER9
             || rs6000_tune == PROCESSOR_POWER10
-            || rs6000_tune == PROCESSOR_POWER11
-            || rs6000_tune == PROCESSOR_FUTURE)
+            || rs6000_tune == PROCESSOR_POWER11)
            && GET_CODE (PATTERN (insn)) == SET
            && GET_CODE (PATTERN (dep_insn)) == SET
            && MEM_P (XEXP (PATTERN (insn), 1))
@@ -18338,7 +18283,6 @@ rs6000_adjust_cost (rtx_insn *insn, int dep_type, 
rtx_insn *dep_insn, int cost,
                 || rs6000_tune == PROCESSOR_POWER9
                 || rs6000_tune == PROCESSOR_POWER10
                 || rs6000_tune == PROCESSOR_POWER11
-                || rs6000_tune == PROCESSOR_FUTURE
                  || rs6000_tune == PROCESSOR_CELL)
                 && recog_memoized (dep_insn)
                 && (INSN_CODE (dep_insn) >= 0))
@@ -18914,7 +18858,6 @@ rs6000_issue_rate (void)
     return 6;
   case PROCESSOR_POWER10:
   case PROCESSOR_POWER11:
-  case PROCESSOR_FUTURE:
     return 8;
   default:
     return 1;
@@ -19630,11 +19573,10 @@ rs6000_sched_reorder (FILE *dump ATTRIBUTE_UNUSED, 
int sched_verbose,
   if (rs6000_tune == PROCESSOR_POWER6)
     load_store_pendulum = 0;
 
-  /* Do Power10/Power11/future dependent reordering.  */
+  /* Do Power10/Power11 dependent reordering.  */
   if (last_scheduled_insn
       && (rs6000_tune == PROCESSOR_POWER10
-         || rs6000_tune == PROCESSOR_POWER11
-         || rs6000_tune == PROCESSOR_FUTURE))
+         || rs6000_tune == PROCESSOR_POWER11))
     power10_sched_reorder (ready, n_ready - 1);
 
   return rs6000_issue_rate ();
@@ -19658,11 +19600,10 @@ rs6000_sched_reorder2 (FILE *dump, int sched_verbose, 
rtx_insn **ready,
       && recog_memoized (last_scheduled_insn) >= 0)
     return power9_sched_reorder2 (ready, *pn_ready - 1);
 
-  /* Do Power10/Power11/future dependent reordering.  */
+  /* Do Power10/Power11 dependent reordering.  */
   if (last_scheduled_insn
       && (rs6000_tune == PROCESSOR_POWER10
-         || rs6000_tune == PROCESSOR_POWER11
-         || rs6000_tune == PROCESSOR_FUTURE))
+         || rs6000_tune == PROCESSOR_POWER11))
     return power10_sched_reorder (ready, *pn_ready - 1);
 
   return cached_can_issue_more;
@@ -22880,8 +22821,7 @@ rs6000_register_move_cost (machine_mode mode,
                 out to be a nop.  */
              if (rs6000_tune == PROCESSOR_POWER9
                  || rs6000_tune == PROCESSOR_POWER10
-                 || rs6000_tune == PROCESSOR_POWER11
-                 || rs6000_tune == PROCESSOR_FUTURE)
+                 || rs6000_tune == PROCESSOR_POWER11)
                ret = 3 * hard_regno_nregs (FIRST_GPR_REGNO, mode);
              else
                ret = 4 * hard_regno_nregs (FIRST_GPR_REGNO, mode);
@@ -24551,6 +24491,8 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] =
   { "float128",                        OPTION_MASK_FLOAT128_KEYWORD,   false, 
true  },
   { "float128-hardware",       OPTION_MASK_FLOAT128_HW,        false, true  },
   { "fprnd",                   OPTION_MASK_FPRND,              false, true  },
+  { "power10",                 OPTION_MASK_POWER10,            false, true  },
+  { "power11",                 OPTION_MASK_POWER11,            false, false },
   { "hard-dfp",                        OPTION_MASK_DFP,                false, 
true  },
   { "htm",                     OPTION_MASK_HTM,                false, true  },
   { "isel",                    OPTION_MASK_ISEL,               false, true  },
@@ -24607,23 +24549,6 @@ static struct rs6000_opt_mask const rs6000_opt_masks[] 
=
   { "string",                  0,                              false, false },
 };
 
-/* Similar structure for the arch bits that are set via -mcpu=<xxx> and not via
-   a separate -m<yyy> option.  */
-struct rs6000_arch_mask {
-  const char *name;                    /* option name */
-  const HOST_WIDE_INT mask;            /* mask to set */
-};
-
-#undef  ARCH_EXPAND
-#define ARCH_EXPAND(PROC, NAME)        { NAME, ARCH_MASK_ ## PROC },
-
-static struct rs6000_arch_mask const rs6000_arch_masks[] =
-{
-#include "rs6000-arch.def"
-};
-
-#undef ARCH_EXPAND
-
 /* Option variables that we want to support inside attribute((target)) and
    #pragma GCC target operations.  */
 
@@ -24982,7 +24907,6 @@ rs6000_pragma_target_parse (tree args, tree pop_target)
   tree cur_tree;
   struct cl_target_option *prev_opt, *cur_opt;
   HOST_WIDE_INT prev_flags, cur_flags, diff_flags;
-  HOST_WIDE_INT prev_arch, cur_arch, diff_arch;
 
   if (TARGET_DEBUG_TARGET)
     {
@@ -25035,26 +24959,21 @@ rs6000_pragma_target_parse (tree args, tree 
pop_target)
     {
       prev_opt    = TREE_TARGET_OPTION (prev_tree);
       prev_flags  = prev_opt->x_rs6000_isa_flags;
-      prev_arch   = prev_opt->x_rs6000_arch_flags;
 
       cur_opt     = TREE_TARGET_OPTION (cur_tree);
       cur_flags   = cur_opt->x_rs6000_isa_flags;
-      cur_arch    = cur_opt->x_rs6000_arch_flags;
 
       diff_flags  = (prev_flags ^ cur_flags);
-      diff_arch   = (prev_arch  ^ cur_arch);
 
-      if (diff_flags != 0 || diff_arch != 0)
+      if (diff_flags != 0)
        {
          /* Delete old macros.  */
          rs6000_target_modify_macros_ptr (false,
-                                          prev_flags & diff_flags,
-                                          prev_arch  & diff_arch);
+                                          prev_flags & diff_flags);
 
          /* Define new macros.  */
          rs6000_target_modify_macros_ptr (true,
-                                          cur_flags & diff_flags,
-                                          cur_arch  & diff_arch);
+                                          cur_flags & diff_flags);
        }
     }
 
@@ -25168,7 +25087,6 @@ rs6000_function_specific_save (struct cl_target_option 
*ptr,
 {
   ptr->x_rs6000_isa_flags = opts->x_rs6000_isa_flags;
   ptr->x_rs6000_isa_flags_explicit = opts->x_rs6000_isa_flags_explicit;
-  ptr->x_rs6000_arch_flags = opts->x_rs6000_arch_flags;
 }
 
 /* Restore the current options */
@@ -25181,7 +25099,6 @@ rs6000_function_specific_restore (struct gcc_options 
*opts,
 {
   opts->x_rs6000_isa_flags = ptr->x_rs6000_isa_flags;
   opts->x_rs6000_isa_flags_explicit = ptr->x_rs6000_isa_flags_explicit;
-  opts->x_rs6000_arch_flags = ptr->x_rs6000_arch_flags;
   (void) rs6000_option_override_internal (false);
 }
 
@@ -25192,12 +25109,10 @@ rs6000_function_specific_print (FILE *file, int 
indent,
                                struct cl_target_option *ptr)
 {
   rs6000_print_isa_options (file, indent, "Isa options set",
-                           ptr->x_rs6000_isa_flags,
-                           ptr->x_rs6000_arch_flags);
+                           ptr->x_rs6000_isa_flags);
 
   rs6000_print_isa_options (file, indent, "Isa options explicit",
-                           ptr->x_rs6000_isa_flags_explicit,
-                           ptr->x_rs6000_arch_flags);
+                           ptr->x_rs6000_isa_flags_explicit);
 }
 
 /* Helper function to print the current isa or misc options on a line.  */
@@ -25209,18 +25124,13 @@ rs6000_print_options_internal (FILE *file,
                               HOST_WIDE_INT flags,
                               const char *prefix,
                               const struct rs6000_opt_mask *opts,
-                              size_t num_elements,
-                              HOST_WIDE_INT arch_flags,
-                              const char *arch_prefix,
-                              const struct rs6000_arch_mask *arch_masks,
-                              size_t num_arch)
+                              size_t num_elements)
 {
   size_t i;
   size_t start_column = 0;
   size_t cur_column;
   size_t max_column = 120;
   size_t prefix_len = strlen (prefix);
-  size_t arch_prefix_len = strlen (arch_prefix);
   size_t comma_len = 0;
   const char *comma = "";
 
@@ -25280,29 +25190,6 @@ rs6000_print_options_internal (FILE *file,
       comma_len = strlen (", ");
     }
 
-  /* Put out the architecture flag bits that are set via -mcpu=<xxx> and that
-     don't have a -m option.  */
-  for (i = 0; i < num_arch; i++)
-    {
-      if ((arch_flags & arch_masks[i].mask) != 0)
-       {
-         const char *name = arch_masks[i].name;
-         size_t len = comma_len + arch_prefix_len + strlen (name);
-
-         cur_column += len;
-         if (cur_column > max_column)
-           {
-             fprintf (stderr, ", \\\n%*s", (int)start_column, "");
-             cur_column = start_column + len;
-             comma = "";
-           }
-
-         fprintf (file, "%s%s%s", comma, arch_prefix, name);
-         comma = ", ";
-         comma_len = strlen (", ");
-       }
-    }
-
   fputs ("\n", file);
 }
 
@@ -25310,13 +25197,11 @@ rs6000_print_options_internal (FILE *file,
 
 static void
 rs6000_print_isa_options (FILE *file, int indent, const char *string,
-                         HOST_WIDE_INT flags, HOST_WIDE_INT arch_flags)
+                         HOST_WIDE_INT flags)
 {
   rs6000_print_options_internal (file, indent, string, flags, "-m",
                                 &rs6000_opt_masks[0],
-                                ARRAY_SIZE (rs6000_opt_masks),
-                                arch_flags, "arch=", &rs6000_arch_masks[0],
-                                ARRAY_SIZE (rs6000_arch_masks));
+                                ARRAY_SIZE (rs6000_opt_masks));
 }
 
 /* If the user used -mno-vsx, we need turn off all of the implicit ISA 2.06,
@@ -25379,81 +25264,6 @@ rs6000_disable_incompatible_switches (void)
   return ignore_masks;
 }
 
-/* In the past, we would boost up the ISA if you selected an -m<foo> option but
-   did not specify the correct -mcpu=<bar> option.  I.e. if you added -mvsx,
-   GCC implictly would assume that you were building for at least power7.  Now,
-   don't allow the -m<foo> option to boost up the ISA level.  But you can still
-   do -mcpu=power7 -mno-vsx or -mcpu=power5 -mno-vsx.  */
-
-static void
-report_architecture_mismatch (void)
-{
-  HOST_WIDE_INT ignore_masks = rs6000_disable_incompatible_switches ();
-
-  static const struct {
-    const HOST_WIDE_INT isa_flags;             /* -m<foo> optiona.  */
-    const HOST_WIDE_INT arch_flags;            /* -mcpu=<proc> level.  */
-    const char *const arch_name;               /* architecture needed.  */
-  } mismatches[] = {
-    {
-      OPTION_MASK_P9_VECTOR | OPTION_MASK_P9_MISC | OPTION_MASK_P9_MINMAX
-      | OPTION_MASK_MODULO,
-      ARCH_MASK_POWER9,
-      "-mcpu=power9"
-    },
-
-    {
-      OPTION_MASK_P8_VECTOR | OPTION_MASK_CRYPTO,
-      ARCH_MASK_POWER8,
-      "-mcpu=power8"
-    },
-
-    {
-      OPTION_MASK_VSX | OPTION_MASK_POPCNTD,
-      ARCH_MASK_POWER7,
-      "-mcpu=power7"
-    },
-  };
-
-  HOST_WIDE_INT isa_flags  = rs6000_isa_flags;
-  HOST_WIDE_INT arch_flags = rs6000_arch_flags;
-
-  for (size_t i = 0; i < ARRAY_SIZE (mismatches); i++)
-    {
-      HOST_WIDE_INT mismatch_isa_flags  = mismatches[i].isa_flags  & isa_flags;
-      HOST_WIDE_INT mismatch_arch_flags = mismatches[i].arch_flags & 
arch_flags;
-
-      if (mismatch_isa_flags != 0 && mismatch_arch_flags == 0)
-       {
-         for (size_t j = 0; j < ARRAY_SIZE (rs6000_opt_masks); j++)
-           {
-             HOST_WIDE_INT mask = rs6000_opt_masks[j].mask;
-
-             if ((mask & mismatch_isa_flags) != 0
-                 && (mask & rs6000_isa_flags_explicit) != 0)
-               error ("%qs needs at least %qs",
-                      rs6000_opt_masks[j].name,
-                      mismatches[i].arch_name);
-           }
-
-         rs6000_isa_flags &= ~mismatch_isa_flags;
-       }
-    }
-
-  /* The following old options are used in multiple processors, so silently
-     enable the appropriate ISA options as previous GCC revisions did.  */
-  if (TARGET_DFP)
-    rs6000_isa_flags |= (ISA_2_5_MASKS_SERVER & ~ignore_masks);
-  else if (TARGET_CMPB)
-    rs6000_isa_flags |= (ISA_2_5_MASKS_EMBEDDED & ~ignore_masks);
-  else if (TARGET_POWER5X)
-    rs6000_isa_flags |= (ISA_2_4_MASKS & ~ignore_masks);
-  else if (TARGET_POPCNTB)
-    rs6000_isa_flags |= (ISA_2_2_MASKS & ~ignore_masks);
-  else if (TARGET_ALTIVEC)
-    rs6000_isa_flags |= (OPTION_MASK_PPC_GFXOPT & ~ignore_masks);
-}
-
 
 /* Helper function for printing the function name when debugging.  */
 
@@ -25481,7 +25291,7 @@ static int
 rs6000_clone_priority (tree fndecl)
 {
   tree fn_opts = DECL_FUNCTION_SPECIFIC_TARGET (fndecl);
-  HOST_WIDE_INT arch_masks;
+  HOST_WIDE_INT isa_masks;
   int ret = CLONE_DEFAULT;
   tree attrs = lookup_attribute ("target", DECL_ATTRIBUTES (fndecl));
   const char *attrs_str = NULL;
@@ -25497,12 +25307,12 @@ rs6000_clone_priority (tree fndecl)
        fn_opts = target_option_default_node;
 
       if (!fn_opts || !TREE_TARGET_OPTION (fn_opts))
-       arch_masks = rs6000_arch_flags;
+       isa_masks = rs6000_isa_flags;
       else
-       arch_masks = TREE_TARGET_OPTION (fn_opts)->x_rs6000_arch_flags;
+       isa_masks = TREE_TARGET_OPTION (fn_opts)->x_rs6000_isa_flags;
 
       for (ret = CLONE_MAX - 1; ret != 0; ret--)
-       if ((rs6000_clone_map[ret].arch_mask & arch_masks) != 0)
+       if ((rs6000_clone_map[ret].isa_mask & isa_masks) != 0)
          break;
     }
 
@@ -25982,8 +25792,6 @@ rs6000_can_inline_p (tree caller, tree callee)
   HOST_WIDE_INT callee_isa = callee_opts->x_rs6000_isa_flags;
   HOST_WIDE_INT caller_isa = caller_opts->x_rs6000_isa_flags;
   HOST_WIDE_INT explicit_isa = callee_opts->x_rs6000_isa_flags_explicit;
-  HOST_WIDE_INT callee_arch = callee_opts->x_rs6000_arch_flags;
-  HOST_WIDE_INT caller_arch = caller_opts->x_rs6000_arch_flags;
 
   cgraph_node *callee_node = cgraph_node::get (callee);
   if (ipa_fn_summaries && ipa_fn_summaries->get (callee_node) != NULL)
@@ -26007,8 +25815,7 @@ rs6000_can_inline_p (tree caller, tree callee)
      callee has explicitly enabled or disabled, then we must enforce that
      the callee's and caller's options match exactly; see PR70010.  */
   if (((caller_isa & callee_isa) == callee_isa)
-      && (caller_isa & explicit_isa) == (callee_isa & explicit_isa)
-      && (caller_arch & callee_arch) == callee_arch)
+      && (caller_isa & explicit_isa) == (callee_isa & explicit_isa))
     ret = true;
 
   if (TARGET_DEBUG_TARGET)
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index f95318dd5536..3d55e078df0b 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -101,7 +101,6 @@
    you make changes here, make them also there.  */
 #define ASM_CPU_SPEC \
 "%{mcpu=native: %(asm_cpu_native); \
-  mcpu=future: -mfuture; \
   mcpu=power11: -mpower11; \
   mcpu=power10: -mpower10; \
   mcpu=power9: -mpower9; \
@@ -502,19 +501,12 @@ extern int rs6000_vector_align[];
 #define TARGET_MINMAX  (TARGET_HARD_FLOAT && TARGET_PPC_GFXOPT         \
                         && (TARGET_P9_MINMAX || !flag_trapping_math))
 
-/* In the past we represented the various power cpus (power4, power5, power6,
-   etc.) via ISA bits that highlighted a new instruction or we used an extra
-   option to represent the hardware (i.e. -mpower8-internal or -mpower10).  Now
-   we use architecture flags for this.  */
-#define TARGET_POWER5          ((rs6000_arch_flags & ARCH_MASK_POWER5)  != 0)
-#define TARGET_POWER5X         ((rs6000_arch_flags & ARCH_MASK_POWER5X) != 0)
-#define TARGET_POWER6          ((rs6000_arch_flags & ARCH_MASK_POWER6)  != 0)
-#define TARGET_POWER7          ((rs6000_arch_flags & ARCH_MASK_POWER7)  != 0)
-#define TARGET_POWER8          ((rs6000_arch_flags & ARCH_MASK_POWER8)  != 0)
-#define TARGET_POWER9          ((rs6000_arch_flags & ARCH_MASK_POWER9)  != 0)
-#define TARGET_POWER10         ((rs6000_arch_flags & ARCH_MASK_POWER10) != 0)
-#define TARGET_POWER11         ((rs6000_arch_flags & ARCH_MASK_POWER11) != 0)
-#define TARGET_FUTURE          ((rs6000_arch_flags & ARCH_MASK_FUTURE)  != 0)
+/* Convert ISA bits like POPCNTB to PowerPC processors like POWER5.  */
+#define TARGET_POWER5          TARGET_POPCNTB
+#define TARGET_POWER5X         TARGET_FPRND
+#define TARGET_POWER6          TARGET_CMPB
+#define TARGET_POWER7          TARGET_POPCNTD
+#define TARGET_POWER9          TARGET_MODULO
 
 /* In switching from using target_flags to using rs6000_isa_flags, the options
    machinery creates OPTION_MASK_<xxx> instead of MASK_<xxx>.  The MASK_<xxxx>
@@ -2498,27 +2490,3 @@ while (0)
    issues have been resolved.  */
 #define RS6000_DISABLE_SCALAR_MODULO 1
 
-
-
-/* Create the architecture flags.  */
-/* Define an enumeration to number the architecture masks.  */
-#ifdef GCC_HWINT_H
-#undef  ARCH_EXPAND
-#define ARCH_EXPAND(PROC, NAME)        ARCH_ENUM_ ## PROC,
-
-enum {
-#include "rs6000-arch.def"
-  ARCH_ENUM_LAST
-};
-
-/* Create an architecture mask for the newer architectures (power6 and
-   up)..  */
-#undef  ARCH_EXPAND
-#define ARCH_EXPAND(PROC, NAME)                                                
\
-  static const HOST_WIDE_INT ARCH_MASK_ ## PROC                                
\
-    = HOST_WIDE_INT_1 << ARCH_ENUM_ ## PROC;
-
-#include "rs6000-arch.def"
-
-#undef ARCH_EXPAND
-#endif /* GCC_HWINT_H.  */
diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md
index f05e65bb2083..bb83e30311e5 100644
--- a/gcc/config/rs6000/rs6000.md
+++ b/gcc/config/rs6000/rs6000.md
@@ -364,7 +364,7 @@
    ppc750,ppc7400,ppc7450,
    ppc403,ppc405,ppc440,ppc476,
    ppc8540,ppc8548,ppce300c2,ppce300c3,ppce500mc,ppce500mc64,ppce5500,ppce6500,
-   power4,power5,power6,power7,power8,power9,power10,power11,future,
+   power4,power5,power6,power7,power8,power9,power10,power11,
    rs64a,mpccore,cell,ppca2,titan"
   (const (symbol_ref "(enum attr_cpu) rs6000_tune")))
 
diff --git a/gcc/config/rs6000/rs6000.opt b/gcc/config/rs6000/rs6000.opt
index 0d71dbaf2fc1..94323bd1db26 100644
--- a/gcc/config/rs6000/rs6000.opt
+++ b/gcc/config/rs6000/rs6000.opt
@@ -36,14 +36,6 @@ HOST_WIDE_INT rs6000_isa_flags_explicit
 TargetSave
 HOST_WIDE_INT x_rs6000_isa_flags_explicit
 
-;; Arch bits that are set via -mcpu=<xxx> but don't have a user -m<processor>
-;; option
-Variable
-HOST_WIDE_INT rs6000_arch_flags = 0
-
-TargetSave
-HOST_WIDE_INT x_rs6000_arch_flags
-
 ;; Current processor
 TargetVariable
 enum processor_type rs6000_cpu = PROCESSOR_PPC603
@@ -478,8 +470,9 @@ Save the TOC in the prologue for indirect calls rather than 
inline.
 mvsx-timode
 Target RejectNegative Undocumented Ignore
 
+;; This option exists only to create its MASK.  It is not intended for users.
 mpower8-internal
-Target Undocumented WarnRemoved
+Target Undocumented Mask(POWER8) Var(rs6000_isa_flags) Warn(Do not use 
%<-mpower8-internal%>; use %<-mcpu=power8%> instead)
 
 mpower8-fusion
 Target Mask(P8_FUSION) Var(rs6000_isa_flags)
@@ -590,7 +583,13 @@ mspeculate-indirect-jumps
 Target Undocumented Var(rs6000_speculate_indirect_jumps) Init(1) Save
 
 mpower10
-Target Undocumented WarnRemoved
+Target Undocumented Mask(POWER10) Var(rs6000_isa_flags) WarnRemoved
+
+;; Users should not use -mpower11, but we need to use a bit to identify when
+;; the user changes the default cpu via  #pragma GCC target("cpu=power11")
+;; and then resets it later.
+mpower11
+Target Undocumented Mask(POWER11) Var(rs6000_isa_flags) WarnRemoved
 
 mprefixed
 Target Mask(PREFIXED) Var(rs6000_isa_flags)
diff --git a/gcc/testsuite/gcc.target/powerpc/ppc-target-4.c 
b/gcc/testsuite/gcc.target/powerpc/ppc-target-4.c
index 5e2ecf34f249..feef76db4618 100644
--- a/gcc/testsuite/gcc.target/powerpc/ppc-target-4.c
+++ b/gcc/testsuite/gcc.target/powerpc/ppc-target-4.c
@@ -2,7 +2,7 @@
 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
 /* { dg-require-effective-target powerpc_fprs } */
 /* { dg-options "-O2 -ffast-math -mdejagnu-cpu=power5 -mno-altivec 
-mabi=altivec -fno-unroll-loops" } */
-/* { dg-final { scan-assembler-times "vaddfp" 2 } } */
+/* { dg-final { scan-assembler-times "vaddfp" 1 } } */
 /* { dg-final { scan-assembler-times "xvaddsp" 1 } } */
 /* { dg-final { scan-assembler-times "fadds" 1 } } */
 
@@ -18,6 +18,10 @@
 #error "__VSX__ should not be defined."
 #endif
 
+#pragma GCC target("altivec,vsx")
+#include <altivec.h>
+#pragma GCC reset_options
+
 #pragma GCC push_options
 #pragma GCC target("altivec,no-vsx")
 
@@ -29,7 +33,6 @@
 #error "__VSX__ should not be defined."
 #endif
 
-/* Altivec build, generate vaddfp.  */
 void
 av_add (vector float *a, vector float *b, vector float *c)
 {
@@ -37,11 +40,10 @@ av_add (vector float *a, vector float *b, vector float *c)
   unsigned long n = SIZE / 4;
 
   for (i = 0; i < n; i++)
-    a[i] = b[i] + c[i];
+    a[i] = vec_add (b[i], c[i]);
 }
 
-/* cpu=power7 must be used to enable VSX.  */
-#pragma GCC target("cpu=power7,vsx")
+#pragma GCC target("vsx")
 
 #ifndef __ALTIVEC__
 #error "__ALTIVEC__ should be defined."
@@ -51,7 +53,6 @@ av_add (vector float *a, vector float *b, vector float *c)
 #error "__VSX__ should be defined."
 #endif
 
-/* VSX build on power7, generate xsaddsp.  */
 void
 vsx_add (vector float *a, vector float *b, vector float *c)
 {
@@ -59,31 +60,11 @@ vsx_add (vector float *a, vector float *b, vector float *c)
   unsigned long n = SIZE / 4;
 
   for (i = 0; i < n; i++)
-    a[i] = b[i] + c[i];
-}
-
-#pragma GCC target("cpu=power7,no-vsx")
-
-#ifndef __ALTIVEC__
-#error "__ALTIVEC__ should be defined."
-#endif
-
-#ifdef __VSX__
-#error "__VSX__ should not be defined."
-#endif
-
-/* Altivec build on power7 with no VSX, generate vaddfp.  */
-void
-av2_add (vector float *a, vector float *b, vector float *c)
-{
-  unsigned long i;
-  unsigned long n = SIZE / 4;
-
-  for (i = 0; i < n; i++)
-    a[i] = b[i] + c[i];
+    a[i] = vec_add (b[i], c[i]);
 }
 
 #pragma GCC pop_options
+#pragma GCC target("no-vsx,no-altivec")
 
 #ifdef __ALTIVEC__
 #error "__ALTIVEC__ should not be defined."
@@ -93,7 +74,6 @@ av2_add (vector float *a, vector float *b, vector float *c)
 #error "__VSX__ should not be defined."
 #endif
 
-/* Default power5 build, generate scalar fadds.  */
 void
 norm_add (float *a, float *b, float *c)
 {
diff --git a/gcc/testsuite/gcc.target/powerpc/pr115688.c 
b/gcc/testsuite/gcc.target/powerpc/pr115688.c
index 00c7c301436a..5222e66ef170 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr115688.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr115688.c
@@ -7,8 +7,7 @@
 
 /* Verify there is no ICE under 32 bit env.  */
 
-/* cpu=power7 must be used to enable VSX.  */
-__attribute__((target("cpu=power7,vsx")))
+__attribute__((target("vsx")))
 int test (void)
 {
   return 0;
diff --git a/gcc/testsuite/gcc.target/powerpc/pr87496-1.c 
b/gcc/testsuite/gcc.target/powerpc/pr87496-1.c
index 2029ecacaf9b..b8d00286256a 100644
--- a/gcc/testsuite/gcc.target/powerpc/pr87496-1.c
+++ b/gcc/testsuite/gcc.target/powerpc/pr87496-1.c
@@ -2,7 +2,7 @@
 /* { dg-do compile { target { powerpc*-*-* && lp64 } } } */
 /* { dg-skip-if "" { powerpc*-*-darwin* } } */
 /* { dg-require-effective-target longdouble128 } */
-/* { dg-options "-O2 -mdejagnu-cpu=power6 -mabi=ieeelongdouble -Wno-psabi" } */
+/* { dg-options "-O2 -mdejagnu-cpu=power7 -mabi=ieeelongdouble -mno-popcntd 
-Wno-psabi" } */
 
 int i;

Reply via email to