aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorEric Botcazou <ebotcazou@libertysurf.fr>2004-12-21 08:49:58 +0100
committerEric Botcazou <ebotcazou@gcc.gnu.org>2004-12-21 07:49:58 +0000
commitd20b11909f9014b4fb2988efbbde83bae0de3f56 (patch)
tree3badf38ecf51207fae3960ad1b6aa8eef4aefaf2 /gcc
parentbd340349092b1d189d798f8d3654244b4141da45 (diff)
downloadgcc-d20b11909f9014b4fb2988efbbde83bae0de3f56.zip
gcc-d20b11909f9014b4fb2988efbbde83bae0de3f56.tar.gz
gcc-d20b11909f9014b4fb2988efbbde83bae0de3f56.tar.bz2
expr.c (emit_group_load_1): Return the source if the move is a regular move between complex values.
* expr.c (emit_group_load_1): Return the source if the move is a regular move between complex values. From-SVN: r92455
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/expr.c5
2 files changed, 10 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index cbcd64f..188b7ec 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -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
diff --git a/gcc/expr.c b/gcc/expr.c
index bfc6b68..3a09222 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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));