aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2016-02-04 23:10:56 +0100
committerUros Bizjak <uros@gcc.gnu.org>2016-02-04 23:10:56 +0100
commitcfca2d6deb1cd30215a58c389af4b11c00b72373 (patch)
treec17595f63c3ed0b2a4c345eb886ff786bf2cc044
parent15ebf37974104b7ddc77a91111664446239eadf8 (diff)
downloadgcc-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
-rw-r--r--gcc/ChangeLog11
-rw-r--r--gcc/config/i386/i386.c15
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;
}