diff options
author | Alan Modra <amodra@gcc.gnu.org> | 2018-11-13 13:33:10 +1030 |
---|---|---|
committer | Alan Modra <amodra@gcc.gnu.org> | 2018-11-13 13:33:10 +1030 |
commit | ab9503741594c8cfff4dc981970edbcf1ca598d6 (patch) | |
tree | 41acd10a76e15de36f2f883dd8f1db7ab31d39de | |
parent | 37e5eefb92cdc6a7a320eecb5b81bcb3e526c35f (diff) | |
download | gcc-ab9503741594c8cfff4dc981970edbcf1ca598d6.zip gcc-ab9503741594c8cfff4dc981970edbcf1ca598d6.tar.gz gcc-ab9503741594c8cfff4dc981970edbcf1ca598d6.tar.bz2 |
[RS6000] Ignore "c", "l" and "h" for register preference
This catches a few places where move insn patterns don't slightly
disparage CTR, LR and VRSAVE regs. Also fixes the doc for the rs6000
h constraint, and removes an r->cl alternative covered by r->h.
* gcc/doc/md.texi (Machine Constraints): Correct rs6000 h constraint
description.
* config/rs6000/rs6000.md (movsi_internal1): Delete MT%0 case
covered by alternative.
(movcc_internal1): Ignore h for register preference.
(mov<mode>_hardfloat64): Likewise.
(mov<mode>_softfloat): Ignore c, l, h for register preference.
From-SVN: r266044
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 25 | ||||
-rw-r--r-- | gcc/doc/md.texi | 2 |
3 files changed, 24 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 17f8d31..2b8b44a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,9 +1,19 @@ +2018-11-13 Alan Modra <amodra@gmail.com> + + * gcc/doc/md.texi (Machine Constraints): Correct rs6000 h constraint + description. + * config/rs6000/rs6000.md (movsi_internal1): Delete MT%0 case + covered by alternative. + (movcc_internal1): Ignore h for register preference. + (mov<mode>_hardfloat64): Likewise. + (mov<mode>_softfloat): Ignore c, l, h for register preference. + 2018-11-12 Sandra Loosemore <sandra@codesourcery.com> PR preprocessor/47823 * doc/cpp.texi (Alternatives to Wrapper #ifndef): Move #pragma once documentation to... - (Pragmas): ...here. + (Pragmas): ...here. * doc/extend.texi (Pragmas): Note additional pragmas documented in the CPP manual. diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 66742f6..3ed6659 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -6839,21 +6839,21 @@ ;; STW STFIWX STXSIWX LI LIS ;; # XXLOR XXSPLTIB 0 XXSPLTIB -1 VSPLTISW ;; XXLXOR 0 XXLORC -1 P9 const MTVSRWZ MFVSRWZ -;; MF%1 MT%0 MT%0 NOP +;; MF%1 MT%0 NOP (define_insn "*movsi_internal1" [(set (match_operand:SI 0 "nonimmediate_operand" "=r, r, r, ?*wI, ?*wH, m, ?Z, ?Z, r, r, r, ?*wIwH, ?*wJwK, ?*wJwK, ?*wu, ?*wJwK, ?*wH, ?*wK, ?*wIwH, ?r, - r, *c*l, *h, *h") + r, *h, *h") (match_operand:SI 1 "input_operand" "r, U, m, Z, Z, r, wI, wH, I, L, n, wIwH, O, wM, wB, O, wM, wS, r, wIwH, - *h, r, r, 0"))] + *h, r, 0"))] "gpc_reg_operand (operands[0], SImode) || gpc_reg_operand (operands[1], SImode)" @@ -6880,21 +6880,20 @@ mfvsrwz %0,%x1 mf%1 %0 mt%0 %1 - mt%0 %1 nop" [(set_attr "type" "*, *, load, fpload, fpload, store, fpstore, fpstore, *, *, *, veclogical, vecsimple, vecsimple, vecsimple, veclogical, veclogical, vecsimple, mffgpr, mftgpr, - *, *, *, *") + *, *, *") (set_attr "length" "4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 4, 4, 4, 4, 8, 4, 4, - 4, 4, 4, 4")]) + 4, 4, 4")]) ;; Like movsi, but adjust a SF value to be used in a SI context, i.e. ;; (set (reg:SI ...) (subreg:SI (reg:SF ...) 0)) @@ -7172,9 +7171,9 @@ (define_insn "*movcc_internal1" [(set (match_operand:CC 0 "nonimmediate_operand" - "=y,x,?y,y,r,r,r,r,r,*c*l,r,m") + "=y,x,?y,y,r,r,r,r, r,*c*l,r,m") (match_operand:CC 1 "general_operand" - " y,r, r,O,x,y,r,I,h, r,m,r"))] + " y,r, r,O,x,y,r,I,*h, r,m,r"))] "register_operand (operands[0], CCmode) || register_operand (operands[1], CCmode)" "@ @@ -7326,11 +7325,11 @@ ;; LIS G-const. F/n-const NOP (define_insn "*mov<mode>_softfloat" [(set (match_operand:FMOVE32 0 "nonimmediate_operand" - "=r, cl, r, r, m, r, + "=r, *c*l, r, r, m, r, r, r, r, *h") (match_operand:FMOVE32 1 "input_operand" - "r, r, h, m, r, I, + "r, r, *h, m, r, I, L, G, Fn, 0"))] "(gpc_reg_operand (operands[0], <MODE>mode) @@ -7597,7 +7596,7 @@ (match_operand:FMOVE64 1 "input_operand" "d, m, d, wY, <f64_p9>, Z, <f64_av>, <f64_vsx>, <zero_fp>, <zero_fp>, - r, YZ, r, r, h, + r, YZ, r, r, *h, 0, wg, r, <f64_dm>, r"))] "TARGET_POWERPC64 && TARGET_HARD_FLOAT @@ -7638,11 +7637,11 @@ (define_insn "*mov<mode>_softfloat64" [(set (match_operand:FMOVE64 0 "nonimmediate_operand" - "=Y, r, r, cl, r, r, + "=Y, r, r, *c*l, r, r, r, r, *h") (match_operand:FMOVE64 1 "input_operand" - "r, Y, r, r, h, G, + "r, Y, r, r, *h, G, H, F, 0"))] "TARGET_POWERPC64 && TARGET_SOFT_FLOAT diff --git a/gcc/doc/md.texi b/gcc/doc/md.texi index e5002e2..1c37a05 100644 --- a/gcc/doc/md.texi +++ b/gcc/doc/md.texi @@ -3273,7 +3273,7 @@ instructions. Vector constant that can be loaded with XXSPLTIB & sign extension. @item h -@samp{MQ}, @samp{CTR}, or @samp{LINK} register +@samp{VRSAVE}, @samp{CTR}, or @samp{LINK} register @item c @samp{CTR} register |