------- Comment #3 from pinskia at gcc dot gnu dot org 2008-03-31 06:30 ------- retmeN is being miscompiled by SRA, at least for powerpc-darwin with a changed MOVE_RATIO. retmeN (x) { <unnamed-unsigned:29> x$i; <unnamed-unsigned:23> x$j; long long unsigned int SR.21;
<bb 2>: x$j = x.j; x$i = x.i; x.j = x$j; x.i = x$i; SR.21 = VIEW_CONVERT_EXPR<long long unsigned int>(x); <retval>.i = x$i; <retval>.j = x$j; <retval> = VIEW_CONVERT_EXPR<struct N>((long long unsigned int) ((<unnamed-unsigned:12>) (SR.21 >> 52) >> 4) << 52 | VIEW_CONVERT_EXPR<long long unsigned int>(<retval>) & 4503599627370495); return <retval>; } This also produces way crappy code rather just doing a non bit-field copy. I don't know what SRA is trying to prove here. The Move ratio value I changed rs6000 to is 5 and this is definitely more than 5 words. -- pinskia at gcc dot gnu dot org changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW Component|middle-end |tree-optimization Ever Confirmed|0 |1 Last reconfirmed|0000-00-00 00:00:00 |2008-03-31 06:30:07 date| | http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35518