diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2016-02-04 23:10:56 +0100 |
---|---|---|
committer | Uros Bizjak <uros@gcc.gnu.org> | 2016-02-04 23:10:56 +0100 |
commit | cfca2d6deb1cd30215a58c389af4b11c00b72373 (patch) | |
tree | c17595f63c3ed0b2a4c345eb886ff786bf2cc044 /gcc | |
parent | 15ebf37974104b7ddc77a91111664446239eadf8 (diff) | |
download | gcc-cfca2d6deb1cd30215a58c389af4b11c00b72373.zip gcc-cfca2d6deb1cd30215a58c389af4b11c00b72373.tar.gz gcc-cfca2d6deb1cd30215a58c389af4b11c00b72373.tar.bz2 |
re PR target/69577 (wrong code with -fno-forward-propagate -mavx and 128bit arithmetics since r215450)
PR rtl-optimization/69577
Revert:
2015-10-29 Richard Henderson <rth@redhat.com>
PR target/68124
PR rtl-opt/67609
* config/i386/i386.c (ix86_cannot_change_mode_class): Tighten
sse check to the exact conditions of PR 67609.
From-SVN: r233152
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/config/i386/i386.c | 15 |
2 files changed, 12 insertions, 14 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f6f727f..647ccb7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2016-02-04 Uros Bizjak <ubizjak@gmail.com> + + PR rtl-optimization/69577 + Revert: + 2015-10-29 Richard Henderson <rth@redhat.com> + + PR target/68124 + PR rtl-opt/67609 + * config/i386/i386.c (ix86_cannot_change_mode_class): Tighten + sse check to the exact conditions of PR 67609. + 2016-02-04 Michael Meissner <meissner@linux.vnet.ibm.com> PR target/69667 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 3663254..47808c4 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -43283,24 +43283,11 @@ ix86_cannot_change_mode_class (machine_mode from, machine_mode to, if (MAYBE_SSE_CLASS_P (regclass) || MAYBE_MMX_CLASS_P (regclass)) { - int from_size = GET_MODE_SIZE (from); - int to_size = GET_MODE_SIZE (to); - /* Vector registers do not support QI or HImode loads. If we don't disallow a change to these modes, reload will assume it's ok to drop the subreg from (subreg:SI (reg:HI 100) 0). This affects the vec_dupv4hi pattern. */ - if (from_size < 4) - return true; - - /* Further, we cannot allow word_mode subregs of full vector modes. - Otherwise the middle-end will assume it's ok to store to - (subreg:DI (reg:TI 100) 0) in order to modify only the low 64 bits - of the 128-bit register. However, after reload the subreg will - be dropped leaving a plain DImode store. This is indistinguishable - from a "normal" DImode move, and so we're justified to use movsd, - which modifies the entire 128-bit register. */ - if (to_size == UNITS_PER_WORD && from_size > UNITS_PER_WORD) + if (GET_MODE_SIZE (from) < 4) return true; } |