On Tue, Nov 06, 2007 at 07:40:00PM +0100, Ulrich Weigand wrote:
> H.J. Lu wrote:
> 
> > Yes, it works for me. I tested it on Linux/ia32, Linux/intel64
> > and linux/ia64. There are no regressions.
> 
> Thanks for testing!
> 
> > gcc/
> > 
> > 2007-11-06  Ulrich Weigand  <[EMAIL PROTECTED]>
> > 
> >     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  <[EMAIL PROTECTED]>
> > 
> >     PR target/30961
> >     * gcc.target/i386/pr30961-1.c: New.
> 
> This is OK, please check it in.
> 

There was a typo in the patch. This is the one I checked in.

Thanks.


H.J.
---
gcc/

2007-11-06  Ulrich Weigand  <[EMAIL PROTECTED]>

        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  <[EMAIL PROTECTED]>

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

--- gcc/reload.c.second 2007-10-03 06:23:52.000000000 -0700
+++ gcc/reload.c        2007-11-06 07:38:33.000000000 -0800
@@ -4462,7 +4462,8 @@ find_reloads (rtx insn, int replace, int
     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));
--- gcc/testsuite/gcc.target/i386/pr30961-1.c.second    2007-11-06 
07:38:33.000000000 -0800
+++ gcc/testsuite/gcc.target/i386/pr30961-1.c   2007-11-06 07:38:33.000000000 
-0800
@@ -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" } } */

Reply via email to