http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54245
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org, | |wschmidt at gcc dot gnu.org Target Milestone|--- |4.8.0 --- Comment #1 from Jakub Jelinek <jakub at gcc dot gnu.org> 2012-08-13 17:19:40 UTC --- Confirmed. slsr replaces: D.2219_3 = *row_2(D); D.2220_4 = (int) D.2219_3; a1_5 = D.2220_4 * 22725; D.2222_6 = MEM[(short int *)row_2(D) + 4B]; D.2223_7 = (int) D.2222_6; D.2224_8 = D.2223_7 * 21407; a0_9 = D.2224_8 + a1_5; D.2225_10 = D.2223_7 * 8867; - a1_11 = a1_5 + D.2225_10; + slsr.4_25 = D.2222_6 * 12540; + slsr.5_26 = (int) slsr.4_25; + a1_11 = a0_9 - slsr.5_26; The multiplication is newly performed in short int, supposedly that is the problem here. Anyway, while the number of multiplications in the end is the same, with slsr the code sequence is also 3 insns/4 bytes longer on x86_64.