http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50176
Richard Guenther <rguenth at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |missed-optimization
--- Comment #6 from Richard Guenther <rguenth at gcc dot gnu.org> 2011-08-29
13:50:56 UTC ---
It performs perfectly sensible optimizations:
@@ -91,11 +83,9 @@
y_33 = (int) D.2055_32;
D.2056_34 = inptr1_19 + col_5;
D.2057_35 = *D.2056_34;
- cb_36 = (int) D.2057_35;
D.2058_37 = inptr2_24 + col_5;
D.2059_38 = *D.2058_37;
- cr_39 = (int) D.2059_38;
- cr.0_40 = (unsigned int) cr_39;
+ cr.0_40 = (unsigned int) D.2059_38;
...
@@ -104,12 +94,11 @@
D.2066_48 = range_limit_47(D) + D.2065_46;
D.2067_49 = *D.2066_48;
*outptr_4 = D.2067_49;
- D.2068_50 = outptr_4 + 1;
- cb.1_51 = (unsigned int) cb_36;
+ cb.1_51 = (unsigned int) D.2057_35;
D.2070_52 = cb.1_51 * 4;
D.2071_54 = Cbgtab_53(D) + D.2070_52;
D.2072_55 = *D.2071_54;
- cr.0_56 = (unsigned int) cr_39;
+ cr.0_56 = (unsigned int) D.2059_38;
D.2061_57 = cr.0_56 * 4;
D.2073_59 = Crgtab_58(D) + D.2061_57;
D.2074_60 = *D.2073_59;
This seems to be at most a register allocation or target issue.
What it does is change (unsinged)(int)*load to (unsigned)*load,
eventually enlarging life-ranges (didn't double-check that).