http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48678

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |ubizjak at gmail dot com

--- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> 2011-04-19 
07:57:37 UTC ---
Having (strict_low_part (subreg:HI (reg:V2DI ...) 0)) on the LHS doesn't sound
like a good idea to me (and this is created already during expansion).  Maybe
reload should be supposed to handle that (it could copy the V2DI reg into a
general reg, then do the movstrict on the general reg and then copy it back),
but IMHO it is never going to lead to efficient code.  The following patch
fixes the ICE for me, but dunno if that is how we want to fix it.
Before the r161655 change arbitrary VCEs (in form of MEM_EXPR) weren't allowed
on
the LHS, so this wasn't a problem.

--- gcc/config/i386/i386.md.jj    2011-04-08 13:40:40.000000000 +0200
+++ gcc/config/i386/i386.md    2011-04-19 09:43:39.000000000 +0200
@@ -2408,6 +2408,9 @@ (define_expand "movstrict<mode>"
 {
   if (TARGET_PARTIAL_REG_STALL && optimize_function_for_speed_p (cfun))
     FAIL;
+  if (GET_CODE (operands[0]) == SUBREG
+      && GET_MODE_CLASS (GET_MODE (SUBREG_REG (operands[0]))) != MODE_INT)
+    FAIL;
   /* Don't generate memory->memory moves, go through a register */
   if (MEM_P (operands[0]) && MEM_P (operands[1]))
     operands[1] = force_reg (<MODE>mode, operands[1]);

Reply via email to