the front end
transforms the source code to a machine independent representation, gimple
the second phase
performs several SSA based optimizations on the gimple code
then proforms expasion
conversion of gimple code to what is called the non-strict register transfer language
optimizations are performed over this RTL and given to the next phase
the code generation phase
coverts the non-strict RTL to strict RTL
schedules instructions
performs peephole optimizations
finally generates assembly code
the machine description files
are used in expansion and code generation
in strict RTL
it is made that the patterns that match also satisfies all the operand constraints