[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