OSDN Git Service

gcc/
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Nov 2007 19:19:23 +0000 (19:19 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Nov 2007 19:19:23 +0000 (19:19 +0000)
2007-11-06  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>

PR target/30961
* reload1.c (find_reloads): Also check in_reg when handling a
simple move with an input reload and a destination of a hard
register.

gcc/testsuite/

2007-11-06  H.J. Lu  <hongjiu.lu@intel.com>

PR target/30961
* gcc.target/i386/pr30961-1.c: New.

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

gcc/ChangeLog
gcc/reload.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/pr30961-1.c [new file with mode: 0644]

index 96f7129..c576ae9 100644 (file)
@@ -1,3 +1,10 @@
+2007-11-06  Ulrich Weigand  <Ulrich.Weigand@de.ibm.com>
+
+       PR target/30961
+       * reload1.c (find_reloads): Also check in_reg when handling a
+       simple move with an input reload and a destination of a hard
+       register.
+
 2007-11-06  Maxim Kuvyrkov  <maxim@codesourcery.com>
 
        * config/m68k/m68k.c (sched-int.h, insn-codes.h): New includes.
index c9c5fc5..871f171 100644 (file)
@@ -4462,7 +4462,8 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known,
     if (rld[i].when_needed == RELOAD_FOR_INPUT
        && GET_CODE (PATTERN (insn)) == SET
        && REG_P (SET_DEST (PATTERN (insn)))
-       && SET_SRC (PATTERN (insn)) == rld[i].in
+       && (SET_SRC (PATTERN (insn)) == rld[i].in
+           || SET_SRC (PATTERN (insn)) == rld[i].in_reg)
        && !elimination_target_reg_p (SET_DEST (PATTERN (insn))))
       {
        rtx dest = SET_DEST (PATTERN (insn));
index 405068c..f335533 100644 (file)
@@ -1,3 +1,8 @@
+2007-11-06  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR target/30961
+       * gcc.target/i386/pr30961-1.c: New.
+
 2007-11-06  Tom Tromey  <tromey@redhat.com>
 
        PR c++/32368:
diff --git a/gcc/testsuite/gcc.target/i386/pr30961-1.c b/gcc/testsuite/gcc.target/i386/pr30961-1.c
new file mode 100644 (file)
index 0000000..c225943
--- /dev/null
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-require-effective-target lp64 } */
+/* { dg-options "-O2" } */
+
+double
+convert (long long in)
+{
+  double f;
+  __builtin_memcpy( &f, &in, sizeof( in ) );
+  return f;
+}
+
+/* { dg-final { scan-assembler-not "movapd" } } */