OSDN Git Service

* expr.c (emit_group_load_1): Return the source if the move
authorebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 21 Dec 2004 07:49:58 +0000 (07:49 +0000)
committerebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 21 Dec 2004 07:49:58 +0000 (07:49 +0000)
is a regular move between complex values.

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

gcc/ChangeLog
gcc/expr.c

index cbcd64f..188b7ec 100644 (file)
@@ -1,3 +1,8 @@
+2004-12-21  Eric Botcazou  <ebotcazou@libertysurf.fr>
+
+       * expr.c (emit_group_load_1): Return the source if the move
+       is a regular move between complex values.
+
 2004-12-20  Roger Sayle  <roger@eyesopen.com>
 
        PR middle-end/18683
index bfc6b68..3a09222 100644 (file)
@@ -1650,6 +1650,11 @@ emit_group_load_1 (rtx *tmps, rtx dst, rtx orig_src, tree type, int ssize)
          tmps[i] = gen_reg_rtx (mode);
          emit_move_insn (tmps[i], adjust_address (src, mode, bytepos));
        }
+      else if (COMPLEX_MODE_P (mode)
+              && GET_MODE (src) == mode
+              && bytelen == GET_MODE_SIZE (mode))
+       /* Let emit_move_complex do the bulk of the work.  */
+       tmps[i] = src;
       else if (GET_CODE (src) == CONCAT)
        {
          unsigned int slen = GET_MODE_SIZE (GET_MODE (src));