Thanx for ur reply.I have a few more questions below:

Paolo Bonzini-2 wrote: 
> 
> Darthrader (sent by Nabble.com) wrote:
>> Is the AST[Abstract Syntax Tree] machine dependent?
> 
> The nodes that are generated for the program as it is parsed are machine 
> independent.  However:
> 
> 1) this can only be true if your source code is already preprocessed. 
> Otherwise, the source code that GCC really sees it is different.  If you 
> use the "--save-temps" option, you will find a .i file which is what GCC 
> has built the parse tree from.
> --------------------
> I saw the .i file but i could not make any sense out of it.Its the program 
> code (mine was a very simple 4 line code) but in the part before main() it 
> contains :
> 
> # 1 "test.c"
> # 1 " "
> # 1 " "
> # 1 "test.c"
> 
> What do these represent?
> --------------------
> 
> 2) Some tree nodes are implicit in the compiler, and are always created 
> even if the program does not mention them.  You can imagine that every 
> program had on top of it something like:
> 
>     typedef void __attribute__ ((mode (QI))) char;
>     typedef void __attribute__ ((mode (HI))) short;
>     typedef void __attribute__ ((mode (SI))) int;
>     typedef void __attribute__ ((mode (__word__))) long;
>     typedef void __attribute__ ((mode (DI))) long long;
> 
> (which is not really valid C code, of course!) and so on.  GCC's
> syntax tree nodes are heavily annotated with information on the nodes, 
> and the information for these implicit nodes can be machine dependent: 
> for example, long may have 4 bytes on some machines and 8 bytes on 
> others.  In your case, "algn" was the alignment required by the type.
> 
> -----------------
> Kindly elaborate on algn.The alignment required by the type relative to what 
> and why?
> -----------------
> 
> 3) Some of the information percolates from the types to other tree 
> nodes, such as the variables.  So your "original" dump could contain 
> some differences in the tree nodes for variables: these come from the 
> machine dependent nodes I just described.
> 
> 4) Finally, some minor optimizations in fold-const.c that are performed 
> before the ".original" dump is emitted, so you could see differences 
> because of that.
> 
> You probably know that a compiler is roughly divided in front-ends 
> (reads source code), middle-end (works on an intermediate 
> representation), and back-end (uses the intermediate representation to 
> emit assembly).
> 
> Very roughly speaking, GCC's middle-end starts in fold-const.c.  GCC's 
> middle-end uses more or less four intermediate representation: GENERIC 
> (a standardized form of syntax trees), GIMPLE (an even more standardized 
> and simplified form of syntax trees), RTL, and "strict" RTL (where each 
> instruction and each operand has an almost 1-1 mapping with the assembly 
> language instructions and operands).  In practice it is a bit more 
> complicated because GENERIC is transformed to GIMPLE "slowly" and gradually.
> 
> GCC's syntax trees are pretty well machine independent, enough 
> independent that they work well as a machine independent intermediate 
> representation for many optimization passes at the beginning in the 
> compiler pipeline.  As GCC switches from tree nodes to RTL and to strict 
> RTL, more and more machine dependent pieces creep into its intermediate 
> representation.  In the end, things are so machine dependent that most 
> non-trivial changes to the RTL middle-end had better be tested on more 
> than one machine: they can work like a charm on i686 and break, say, 
> powerpc or arm or s390 or all of these.
> 
> Paolo
> 
> 
>
--
View this message in context: 
http://www.nabble.com/Machine-Dependance-t1047440.html#a2725013
Sent from the gcc - Dev forum at Nabble.com.

Reply via email to