[EMAIL PROTECTED] prev-gcc]$ cat /tmp/x.c
#include <ia64intrin.h>

int
foo (int *p)
{
  return __sync_lock_test_and_set (p, 0);
}
[EMAIL PROTECTED] prev-gcc]$ ./xgcc -B./ -O2 -S /tmp/x.c 
[EMAIL PROTECTED] prev-gcc]$ cat x.s
        .file   "x.c"
        .pred.safe_across_calls p1-p5,p16-p63
        .text
        .align 16
        .align 64
        .global foo#
        .type   foo#, @function
        .proc foo#
foo:
        .prologue
        .body
        .mmi
        nop 0
        mov r8 = r0
        nop 0
        ;;
        .mib
        xchg4 r8 = [r32], r8
        nop 0
        br.ret.sptk.many b0
        .endp foo#
        .ident  "GCC: (GNU) 4.4.0 20081106 (experimental) [trunk revision
141649]"
[EMAIL PROTECTED] prev-gcc]$ 

We don't need

mov r8 = r0

We should generate

xchg4 r8 = [r32], r0


-- 
           Summary: Unnecssary register move
           Product: gcc
           Version: 4.4.0
            Status: UNCONFIRMED
          Keywords: ra
          Severity: normal
          Priority: P3
         Component: rtl-optimization
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: hjl dot tools at gmail dot com
GCC target triplet: ia64-unknown-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=38034

Reply via email to