diff options
author | Michael Meissner <meissner@linux.vnet.ibm.com> | 2016-02-18 19:36:39 +0000 |
---|---|---|
committer | Michael Meissner <meissner@gcc.gnu.org> | 2016-02-18 19:36:39 +0000 |
commit | 2bf2078afba9bd0d5e4874d90c1124c7991069bc (patch) | |
tree | 2c735bed397542fe34492919b23f86b13a02c208 /gcc | |
parent | c461d26383f5e7999b3e02c965d8289f2c22f7fe (diff) | |
download | gcc-2bf2078afba9bd0d5e4874d90c1124c7991069bc.zip gcc-2bf2078afba9bd0d5e4874d90c1124c7991069bc.tar.gz gcc-2bf2078afba9bd0d5e4874d90c1124c7991069bc.tar.bz2 |
re PR bootstrap/68404 (PGO/LTO bootstrap failure on ppc64le)
[gcc]
2016-02-18 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/68404
* config/rs6000/predicates.md (fusion_gpr_addis): Revert
2016-02-09 change.
* config/rs6000/rs6000.md (fusion_gpr_load_<mode>): Remove
earlyclobber from target. Use wF constraint for fused memory
address.
(fusion_gpr_<P:mode>_<GPR_FUSION:mode>_load): Likewise.
[gcc/testsuites]
2016-02-18 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/68404
* gcc.target/powerpc/fusion.c: Revert the 2016-02-09 change.
* gcc.target/powerpc/fusion3.c: Likewise.
From-SVN: r233532
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/rs6000/predicates.md | 13 | ||||
-rw-r--r-- | gcc/config/rs6000/rs6000.md | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/fusion.c | 29 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/fusion3.c | 27 |
6 files changed, 49 insertions, 43 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 029e8ef..69195f7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2016-02-18 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/68404 + * config/rs6000/predicates.md (fusion_gpr_addis): Revert + 2016-02-09 change. + + * config/rs6000/rs6000.md (fusion_gpr_load_<mode>): Remove + earlyclobber from target. Use wF constraint for fused memory + address. + (fusion_gpr_<P:mode>_<GPR_FUSION:mode>_load): Likewise. + 2016-02-18 Jakub Jelinek <jakub@redhat.com> Martin Liska <mliska@suse.cz> diff --git a/gcc/config/rs6000/predicates.md b/gcc/config/rs6000/predicates.md index b0ab1d5..072291e 100644 --- a/gcc/config/rs6000/predicates.md +++ b/gcc/config/rs6000/predicates.md @@ -1708,14 +1708,23 @@ (match_code "const_int,high,plus") { HOST_WIDE_INT value; + rtx int_const; if (GET_CODE (op) == HIGH) return 1; - if (!CONST_INT_P (op)) + if (CONST_INT_P (op)) + int_const = op; + + else if (GET_CODE (op) == PLUS + && base_reg_operand (XEXP (op, 0), Pmode) + && CONST_INT_P (XEXP (op, 1))) + int_const = XEXP (op, 1); + + else return 0; - value = INTVAL (op); + value = INTVAL (int_const); if ((value & (HOST_WIDE_INT)0xffff) != 0) return 0; diff --git a/gcc/config/rs6000/rs6000.md b/gcc/config/rs6000/rs6000.md index 952617c..365bc5e 100644 --- a/gcc/config/rs6000/rs6000.md +++ b/gcc/config/rs6000/rs6000.md @@ -12906,8 +12906,8 @@ ;; reload) (define_insn "fusion_gpr_load_<mode>" - [(set (match_operand:INT1 0 "base_reg_operand" "=&b") - (unspec:INT1 [(match_operand:INT1 1 "fusion_addis_mem_combo_load" "")] + [(set (match_operand:INT1 0 "base_reg_operand" "=b") + (unspec:INT1 [(match_operand:INT1 1 "fusion_addis_mem_combo_load" "wF")] UNSPEC_FUSION_GPR))] "TARGET_P8_FUSION" { @@ -12978,7 +12978,7 @@ (unspec:GPR_FUSION [(match_operand:GPR_FUSION 1 "fusion_addis_mem_combo_load" "wF")] UNSPEC_FUSION_P9)) - (clobber (match_operand:P 2 "base_reg_operand" "=&b"))] + (clobber (match_operand:P 2 "base_reg_operand" "=b"))] "TARGET_P9_FUSION" { /* This insn is a secondary reload insn, which cannot have alternatives. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 90ed5de..fb5f686 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2016-02-18 Michael Meissner <meissner@linux.vnet.ibm.com> + + PR target/68404 + * gcc.target/powerpc/fusion.c: Revert the 2016-02-09 change. + * gcc.target/powerpc/fusion3.c: Likewise. + 2016-02-18 Richard Biener <rguenther@suse.de> PR middle-end/69553 diff --git a/gcc/testsuite/gcc.target/powerpc/fusion.c b/gcc/testsuite/gcc.target/powerpc/fusion.c index 6f11c50..ed35006 100644 --- a/gcc/testsuite/gcc.target/powerpc/fusion.c +++ b/gcc/testsuite/gcc.target/powerpc/fusion.c @@ -1,28 +1,17 @@ -/* { dg-do compile { target { powerpc*-*-* && lp64 } } } */ +/* { dg-do compile { target { powerpc*-*-* } } } */ /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */ /* { dg-require-effective-target powerpc_p8vector_ok } */ /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ -/* { dg-options "-mcpu=power7 -mtune=power8 -O3 -mcmodel=medium" } */ +/* { dg-options "-mcpu=power7 -mtune=power8 -O3" } */ -#define SIZE 4 -struct foo { - unsigned char uc; - signed char sc; - unsigned short us; - short ss; - int i; - unsigned u; -}; +#define LARGE 0x12345 -static struct foo st[SIZE]; -struct foo *ptr_st = &st[0]; - -int fusion_uchar (void){ return st[SIZE-1].uc; } -int fusion_schar (void){ return st[SIZE-1].sc; } -int fusion_ushort (void){ return st[SIZE-1].us; } -int fusion_short (void){ return st[SIZE-1].ss; } -int fusion_int (void){ return st[SIZE-1].i; } -unsigned fusion_uns (void){ return st[SIZE-1].u; } +int fusion_uchar (unsigned char *p){ return p[LARGE]; } +int fusion_schar (signed char *p){ return p[LARGE]; } +int fusion_ushort (unsigned short *p){ return p[LARGE]; } +int fusion_short (short *p){ return p[LARGE]; } +int fusion_int (int *p){ return p[LARGE]; } +unsigned fusion_uns (unsigned *p){ return p[LARGE]; } /* { dg-final { scan-assembler-times "gpr load fusion" 6 } } */ /* { dg-final { scan-assembler-times "lbz" 2 } } */ diff --git a/gcc/testsuite/gcc.target/powerpc/fusion3.c b/gcc/testsuite/gcc.target/powerpc/fusion3.c index 2a8135d..8eca640 100644 --- a/gcc/testsuite/gcc.target/powerpc/fusion3.c +++ b/gcc/testsuite/gcc.target/powerpc/fusion3.c @@ -4,24 +4,15 @@ /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */ /* { dg-options "-mcpu=power7 -mtune=power9 -O3" } */ -#define SIZE 4 -struct foo { - float f; - double d; -}; +#define LARGE 0x12345 -static struct foo st[SIZE]; -struct foo *ptr_st = &st[0]; +int fusion_float_read (float *p){ return p[LARGE]; } +int fusion_double_read (double *p){ return p[LARGE]; } -float fusion_float_read (void){ return st[SIZE].f; } -double fusion_float_extend (void){ return (double)st[SIZE].f; } -double fusion_double_read (void){ return st[SIZE].d; } +void fusion_float_write (float *p, float f){ p[LARGE] = f; } +void fusion_double_write (double *p, double d){ p[LARGE] = d; } -void fusion_float_write (float f){ st[SIZE].f = f; } -void fusion_float_truncate (double d){ st[SIZE].f = (float)d; } -void fusion_double_write (double d){ st[SIZE].d = d; } - -/* { dg-final { scan-assembler-times "load fusion, type SF" 2 } } */ -/* { dg-final { scan-assembler-times "load fusion, type DF" 1 } } */ -/* { dg-final { scan-assembler-times "store fusion, type SF" 2 } } */ -/* { dg-final { scan-assembler-times "store fusion, type DF" 1 } } */ +/* { dg-final { scan-assembler "load fusion, type SF" } } */ +/* { dg-final { scan-assembler "load fusion, type DF" } } */ +/* { dg-final { scan-assembler "store fusion, type SF" } } */ +/* { dg-final { scan-assembler "store fusion, type DF" } } */ |