Tr : [redundency elimination, code motion, commun expression elimination] GCC optimizations

Jeff Kenton jkenton@tilera.com
Fri Sep 23 16:05:00 GMT 2011


On 09/23/2011 11:16 AM, Ian Lance Taylor wrote:
> David Brown<david@westcontrol.com>  writes:
>
>>> It's the same for
>>>
>>>     if (x == 1)      { a=b; c=d; e=f; foo(); }
>>>     else if (x == 2) { a=b; c=d; e=f; foo(); }
>>>
>>> GCC don't factor out the common part
>>>
>> You are right - which is odd, since there is no reason why it could
>> not (unlike the original case where there is no "else").  Surely this
>> would count as a significant missed optimisation, especially for big
>> switch() code.
> I don't think it is a significant missed optimization, as people rarely
> write code like that.  They normally write
>
>    if (x == 1 || x == 2) { a=b; c=d; e=f; foo(); }
>
> The proposed optimization only applies when somebody has laboriously
> written out the exact same sequence of code twice.
>
> I'm not opposed to such an optimization if it works reliably and is not
> too expensive.  I just don't think it will make much difference on
> ordinary code.
>
> Ian

People don't write that kind of code (we hope), but machine generated 
code can have all kinds of weirdness.  Still not a big deal, but it 
might be more common than you think.

--jeff



More information about the Gcc-help mailing list