]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR rtl-optimization/69577
authoruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Feb 2016 22:10:56 +0000 (22:10 +0000)
committeruros <uros@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 4 Feb 2016 22:10:56 +0000 (22:10 +0000)
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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@233152 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.c

index f6f727fb7f7ce735e7b74e45f9691afd57ab9410..647ccb7afa1d595cb7747a9e03a16612026cb13a 100644 (file)
@@ -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
index 366325441f93789e59068ff3a0e72d430660d2e6..47808c4969f8cb04d0f0de1d303d99d19e34925c 100644 (file)
@@ -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;
     }