This patch fixes PR middle-end/56382 on hppa64-hp-hpux11.11. The patch prevents moving a complex float by parts if we can't create pseudos. On a big endian 64-bit target, we need a psuedo to move a complex float and this fails during reload.

OK for trunk?

Dave
--
John David Anglin       dave.ang...@bell.net


2013-07-28  John David Anglin  <dang...@gcc.gnu.org>

        PR middle-end/56382
        * expr.c (emit_move_complex): Only move mode MODE_COMPLEX_FLOAT by
        parts if we can create pseudos.

Index: expr.c
===================================================================
--- expr.c      (revision 201248)
+++ expr.c      (working copy)
@@ -3236,6 +3236,7 @@
 
   /* Move floating point as parts.  */
   if (GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT
+      && can_create_pseudo_p ()
       && optab_handler (mov_optab, GET_MODE_INNER (mode)) != CODE_FOR_nothing)
     try_int = false;
   /* Not possible if the values are inherently not adjacent.  */

Reply via email to