GIMPLE is a family of intermediate representations (IR) based on the tree data structure. At present, there are only two kinds of GIMPLE:
High level GIMPLE is what the middle-end produces when it lowers the GENERIC language that is targeted by all the language front ends.
Low_level_GIMPLE is obtained by linearizing all the high-level control flow structures of high level GIMPLE, including nested functions, exception handling, and loops.
SSA GIMPLE is low level GIMPLE rewritten in SSA form.
Almost all tree optimizer passes work on SSA GIMPLE, while some work on normal low level GIMPLE. It is very likely that at one point, GCC will lower low level GIMPLE even further, in order to simplify the GIMPLE to RTL expand pass.
The gcc (or cc1) argument options -fdump-tree-all -fdump-tree-ssa -fdump-tree-optimized etc... might be used to have some GIMPLE intermediate representations dumped (in a simpler textual form). In passes, your C code could call print_gimple_expr or print_gimple_stmt ...
A more compact data representation for GIMPLE and trees has been proposed: tuples