We just generate the WHIRL according to what is given to us in GNU
tree/spin. So it is GNU's C front-end that has this discrepancy.
Fred
On 10/06/2010 01:34 AM, "C. Bergström" wrote:
> I'm forwarding this question..
>
> ELSE block removed to shorten the example..
> ----------
>
> when I have code like this:
>
> int i = rand();
> printf("i = %i\n", i);
> if (i)
> printf("i = %i\n", i);
>
> (a subset of ) the generated whirl code is:
>
> U8LDA 0<1,44,(8_bytes)_"i_=_%i\n\000"> T<50,anon_ptr.,8>
> U8PARM 2 T<44,anon_ptr.,8> # by_value
> I4I4LDID 0<2,3,i> T<4,.predef_I4,4>
> I4PARM 2 T<4,.predef_I4,4> # by_value
> VCALL 126<1,43,printf> # flags 0x7e
>
> IF
> I4I4LDID 0<2,3,i> T<4,.predef_I4,4>
> I4INTCONST 0 (0x0)
> I4I4NE
> THEN
> BLOCK
> BLOCK
> U8LDA 0<1,44,(8_bytes)_"i_=_%i\n\000"> T<50,anon_ptr.,8>
> U8PARM 2 T<44,anon_ptr.,8> # by_value
> I4I4LDID 0<2,3,i> T<4,.predef_I4,4>
> I4PARM 2 T<4,.predef_I4,4> # by_value
> I4CALL 126<1,43,printf> # flags 0x7e
> END_BLOCK
> I4I4LDID -1<1,40,.preg_return_val> T<4,.predef_I4,4>
> I4COMMA
> EVAL
> END_BLOCK
>
>
> What I don't understand is why there is a difference between the first and
> second
> printf calls. The second call is loading the return value of the function
> being
> called while the second one ignores that. It also enforces evaluation via
> eval node. Why? What is the difference between plain printf() and printf() in
> if-block ?
>
> ---------
>
> Thanks
>
> ./C
>
> ------------------------------------------------------------------------------
> Beautiful is writing same markup. Internet Explorer 9 supports
> standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2& L3.
> Spend less time writing and rewriting code and more time creating great
> experiences on the web. Be a part of the beta today.
> http://p.sf.net/sfu/beautyoftheweb
> _______________________________________________
> Open64-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/open64-devel
>
------------------------------------------------------------------------------
Beautiful is writing same markup. Internet Explorer 9 supports
standards for HTML5, CSS3, SVG 1.1, ECMAScript5, and DOM L2 & L3.
Spend less time writing and rewriting code and more time creating great
experiences on the web. Be a part of the beta today.
http://p.sf.net/sfu/beautyoftheweb
_______________________________________________
Open64-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/open64-devel