http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54315
--- Comment #2 from H.J. Lu <hjl.tools at gmail dot com> 2012-08-18 17:45:43 UTC --- The difference between -m32 and -m64 is - struct S160 D.1692; + struct S160 D.1719; ;; basic block 2, loop depth 0 ;; pred: ENTRY - D.1692 = check160 (); [return slot optimization] - checkx160 (D.1692); + D.1719 = check160 (); + checkx160 (D.1719); return; ;; succ: EXIT "return slot optimization" generates extra copy.