Commit 66b54d88 by Segher Boessenkool Committed by Segher Boessenkool

rs6000: wm -> wa+p8v


	* config/rs6000/constraints.md (define_register_constraint "wm"):
	Delete.
	* config/rs6000/rs6000.h (enum r6000_reg_class_enum): Delete
	RS6000_CONSTRAINT_wm.
	* config/rs6000/rs6000.c (rs6000_debug_reg_global): Adjust.
	(rs6000_init_hard_regno_mode_ok): Adjust.
	* config/rs6000/vsx.md: Replace "wm" constraint by "wa" with "p8v".
	* doc/md.texi (Machine Constraints): Adjust.

From-SVN: r271486
parent c6dd76fa
2019-05-21 Segher Boessenkool <segher@kernel.crashing.org> 2019-05-21 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/constraints.md (define_register_constraint "wm"):
Delete.
* config/rs6000/rs6000.h (enum r6000_reg_class_enum): Delete
RS6000_CONSTRAINT_wm.
* config/rs6000/rs6000.c (rs6000_debug_reg_global): Adjust.
(rs6000_init_hard_regno_mode_ok): Adjust.
* config/rs6000/vsx.md: Replace "wm" constraint by "wa" with "p8v".
* doc/md.texi (Machine Constraints): Adjust.
2019-05-21 Segher Boessenkool <segher@kernel.crashing.org>
* config/rs6000/constraints.md (define_register_constraint "wk"): * config/rs6000/constraints.md (define_register_constraint "wk"):
Delete. Delete.
* config/rs6000/rs6000.h (enum r6000_reg_class_enum): Delete * config/rs6000/rs6000.h (enum r6000_reg_class_enum): Delete
......
...@@ -77,12 +77,9 @@ ...@@ -77,12 +77,9 @@
(define_register_constraint "wl" "rs6000_constraints[RS6000_CONSTRAINT_wl]" (define_register_constraint "wl" "rs6000_constraints[RS6000_CONSTRAINT_wl]"
"Floating point register if the LFIWAX instruction is enabled or NO_REGS.") "Floating point register if the LFIWAX instruction is enabled or NO_REGS.")
(define_register_constraint "wm" "rs6000_constraints[RS6000_CONSTRAINT_wm]"
"VSX register if direct move instructions are enabled, or NO_REGS.")
;; NO_REGs register constraint, used to merge mov{sd,sf}, since movsd can use ;; NO_REGs register constraint, used to merge mov{sd,sf}, since movsd can use
;; direct move directly, and movsf can't to move between the register sets. ;; direct move directly, and movsf can't to move between the register sets.
;; There is a mode_attr that resolves to wm for SDmode and wn for SFmode ;; There is a mode_attr that resolves to wa for SDmode and wn for SFmode
(define_register_constraint "wn" "NO_REGS" "No register (NO_REGS).") (define_register_constraint "wn" "NO_REGS" "No register (NO_REGS).")
(define_register_constraint "wp" "rs6000_constraints[RS6000_CONSTRAINT_wp]" (define_register_constraint "wp" "rs6000_constraints[RS6000_CONSTRAINT_wp]"
......
...@@ -2514,7 +2514,6 @@ rs6000_debug_reg_global (void) ...@@ -2514,7 +2514,6 @@ rs6000_debug_reg_global (void)
"wg reg_class = %s\n" "wg reg_class = %s\n"
"wi reg_class = %s\n" "wi reg_class = %s\n"
"wl reg_class = %s\n" "wl reg_class = %s\n"
"wm reg_class = %s\n"
"wp reg_class = %s\n" "wp reg_class = %s\n"
"wq reg_class = %s\n" "wq reg_class = %s\n"
"wr reg_class = %s\n" "wr reg_class = %s\n"
...@@ -2536,7 +2535,6 @@ rs6000_debug_reg_global (void) ...@@ -2536,7 +2535,6 @@ rs6000_debug_reg_global (void)
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wg]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wg]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wi]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wi]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wl]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wl]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wm]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wp]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wp]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wq]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wq]],
reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wr]], reg_class_names[rs6000_constraints[RS6000_CONSTRAINT_wr]],
...@@ -3159,7 +3157,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p) ...@@ -3159,7 +3157,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
wg - Float register for power6x move insns. wg - Float register for power6x move insns.
wi - FP or VSX register to hold 64-bit integers for VSX insns. wi - FP or VSX register to hold 64-bit integers for VSX insns.
wl - Float register if we can do 32-bit signed int loads. wl - Float register if we can do 32-bit signed int loads.
wm - VSX register for ISA 2.07 direct move operations.
wn - always NO_REGS. wn - always NO_REGS.
wr - GPR if 64-bit mode is permitted. wr - GPR if 64-bit mode is permitted.
ws - Register class to do ISA 2.06 DF operations. ws - Register class to do ISA 2.06 DF operations.
...@@ -3197,9 +3194,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p) ...@@ -3197,9 +3194,6 @@ rs6000_init_hard_regno_mode_ok (bool global_init_p)
if (TARGET_LFIWAX) if (TARGET_LFIWAX)
rs6000_constraints[RS6000_CONSTRAINT_wl] = FLOAT_REGS; /* DImode */ rs6000_constraints[RS6000_CONSTRAINT_wl] = FLOAT_REGS; /* DImode */
if (TARGET_DIRECT_MOVE)
rs6000_constraints[RS6000_CONSTRAINT_wm] = VSX_REGS;
if (TARGET_POWERPC64) if (TARGET_POWERPC64)
{ {
rs6000_constraints[RS6000_CONSTRAINT_wr] = GENERAL_REGS; rs6000_constraints[RS6000_CONSTRAINT_wr] = GENERAL_REGS;
...@@ -1255,7 +1255,6 @@ enum r6000_reg_class_enum { ...@@ -1255,7 +1255,6 @@ enum r6000_reg_class_enum {
RS6000_CONSTRAINT_wg, /* FPR register for -mmfpgpr */ RS6000_CONSTRAINT_wg, /* FPR register for -mmfpgpr */
RS6000_CONSTRAINT_wi, /* FPR/VSX register to hold DImode */ RS6000_CONSTRAINT_wi, /* FPR/VSX register to hold DImode */
RS6000_CONSTRAINT_wl, /* FPR register for LFIWAX */ RS6000_CONSTRAINT_wl, /* FPR register for LFIWAX */
RS6000_CONSTRAINT_wm, /* VSX register for direct move */
RS6000_CONSTRAINT_wp, /* VSX reg for IEEE 128-bit fp TFmode. */ RS6000_CONSTRAINT_wp, /* VSX reg for IEEE 128-bit fp TFmode. */
RS6000_CONSTRAINT_wq, /* VSX reg for IEEE 128-bit fp KFmode. */ RS6000_CONSTRAINT_wq, /* VSX reg for IEEE 128-bit fp KFmode. */
RS6000_CONSTRAINT_wr, /* GPR register if 64-bit */ RS6000_CONSTRAINT_wr, /* GPR register if 64-bit */
......
...@@ -3198,10 +3198,8 @@ ...@@ -3198,10 +3198,8 @@
(define_insn "vsx_extract_<mode>" (define_insn "vsx_extract_<mode>"
[(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=d, d, wr, wr") [(set (match_operand:<VS_scalar> 0 "gpc_reg_operand" "=d, d, wr, wr")
(vec_select:<VS_scalar> (vec_select:<VS_scalar>
(match_operand:VSX_D 1 "gpc_reg_operand" "<VSa>, <VSa>, wm, wa") (match_operand:VSX_D 1 "gpc_reg_operand" "<VSa>, <VSa>, wa, wa")
(parallel (parallel
[(match_operand:QI 2 "const_0_to_1_operand" "wD, n, wD, n")])))] [(match_operand:QI 2 "const_0_to_1_operand" "wD, n, wD, n")])))]
"VECTOR_MEM_VSX_P (<MODE>mode)" "VECTOR_MEM_VSX_P (<MODE>mode)"
...@@ -3250,7 +3248,7 @@ ...@@ -3250,7 +3248,7 @@
gcc_unreachable (); gcc_unreachable ();
} }
[(set_attr "type" "veclogical,mftgpr,mftgpr,vecperm") [(set_attr "type" "veclogical,mftgpr,mftgpr,vecperm")
(set_attr "isa" "*,*,*,p9v")]) (set_attr "isa" "*,*,p8v,p9v")])
;; Optimize extracting a single scalar element from memory. ;; Optimize extracting a single scalar element from memory.
(define_insn_and_split "*vsx_extract_<P:mode>_<VSX_D:mode>_load" (define_insn_and_split "*vsx_extract_<P:mode>_<VSX_D:mode>_load"
......
...@@ -3198,7 +3198,7 @@ Any VSX register if the @option{-mvsx} option was used or NO_REGS. ...@@ -3198,7 +3198,7 @@ Any VSX register if the @option{-mvsx} option was used or NO_REGS.
When using any of the register constraints (@code{wa}, @code{wd}, When using any of the register constraints (@code{wa}, @code{wd},
@code{wf}, @code{wg}, @code{wi}, @code{wf}, @code{wg}, @code{wi},
@code{wl}, @code{wm}, @code{wp}, @code{wq}, @code{ws}, @code{wl}, @code{wp}, @code{wq}, @code{ws},
@code{wt}, @code{wv}, or @code{ww}) @code{wt}, @code{wv}, or @code{ww})
that take VSX registers, you must use @code{%x<n>} in the template so that take VSX registers, you must use @code{%x<n>} in the template so
that the correct register is used. Otherwise the register number that the correct register is used. Otherwise the register number
...@@ -3265,9 +3265,6 @@ FP or VSX register to hold 64-bit integers for VSX insns or NO_REGS. ...@@ -3265,9 +3265,6 @@ FP or VSX register to hold 64-bit integers for VSX insns or NO_REGS.
@item wl @item wl
Floating point register if the LFIWAX instruction is enabled or NO_REGS. Floating point register if the LFIWAX instruction is enabled or NO_REGS.
@item wm
VSX register if direct move instructions are enabled, or NO_REGS.
@item wn @item wn
No register (NO_REGS). No register (NO_REGS).
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment