Re : Re : Re : OR in Generic or Gimple

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 






----- Message d'origine ----
De : Andrew Haley <aph@xxxxxxxxxx>
À : gcc-help@xxxxxxxxxxx
Envoyé le : Mer 20 avril 2011, 10h 55min 15s
Objet : Re: Re : Re : OR in Generic or Gimple

On 20/04/11 09:40, charfi asma wrote:
> 

>> int y =x+10;
>> if ((y > 1) || (y < 9)) ....
>>
>> I get this:
>>
>> int main() ()
>> {
>>   int D.2071;
>>
>>   {
>>     int x;
>>     int y;
>>
>>     x = 6;
>>     y = x + 10;
>>     if (1 != 0) goto <D.2069>; else goto <D.2070>;
>>     <D.2069>:
>>     D.2071 = 10;
>>     return D.2071;
>>     <D.2070>:
>>     D.2071 = 0;
>>     return D.2071;
>>   }
>>   D.2071 = 0;
>>   return D.2071;
>> }
>>
>> Any way, did so know which generic tree code or gimple statement used to 
>> generate this ? why if ((y > 1) || (y < 9)) is translated to if (1!=0) ??
> 
> Well, we know that x == 6, so y == 6 + 10.  Therefore we know that
> (y == 1) || (y==0) is false.
> 
> So, the expression (y == 1) || (y==0) can be replaced with 1 != 0 .
> 
> Andrew.
> 
> Andrew, 1!=0 is true ;) and the OR expression is if ((y > 1) || (y < 9)) that 
>is 
>
> also true. I did not say that gcc make a mistake in evaluating this but I would 
>
> like to know how it is translated in gimple which generic tree code are used, 
> where it does this transfo from if ((y > 1) || (y < 9)) to (1!=0) ? in the 
> gimplify function or when it builds generic if it builds it ....

It looks like constant folding.
Hard to say, because no gcc version I have does it.

With 4.6 I get:

    x = 6;
    y = x + 10;
    if (y == 1) goto <D.2069>; else goto <D.2071>;
    <D.2071>:
    if (y == 0) goto <D.2069>; else goto <D.2070>;
    <D.2069>:
    D.2072 = 10;
    return D.2072;
    <D.2070>:
    D.2072 = 0;
    return D.2072;

Are you using optimization?

Andrew.


Ah!! that's it Andrew, thank you very much, In fact I used -Os :) when I remove 
this flag I get the same gimple than yours :) but I thought that gcc does its 
optimizations in the SSA and only early optimizations (Inter procedural 
optimizations IPA) are done in early stages. Did this mean that gcc also perform 
optimizations in gimple ?? like constant propagation ?

thank you very much

Asma




[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux