Structure of GCC

Like most portable compilers, the compilation process of a GCC-based compiler can be conceptually split up in three phases:

Neither the AST nor the non-strict RTL representations are completely target independent, but the ["GIMPLE"] language is, and in non-strict ["RTL"] form the representation is still not really machine assembly, so the passes that work on non-strict RTL can still be considered target independent to some extent (even passes like ["combine"] do not have to worry too much about the target machine). The passes working on strict RTL are really assembler optimizers, which clearly need to take into account far more information about the target architecture.

The source file hierarchy is described in its [ documentation].