[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