It's not as clean as clang/llvm, but you can see the intermediate steps of GCC with the -fdump-tree-alland -fdump-rtl-all options. The GIMPLE IR is not so hard to follow (not as hardcore as the gcc docs...). Can be interesting to see the effect of front- or back-end compiler options on your code and track down how an optimization work.
You can also write compiler plugins in GCC. Not as fun as clang/llvm, but manageable.
You can also write compiler plugins in GCC. Not as fun as clang/llvm, but manageable.