Or, just use LLVM's link time optimization:<p><a href="http://llvm.org/docs/LinkTimeOptimization.html" rel="nofollow">http://llvm.org/docs/LinkTimeOptimization.html</a>
It's not a C compilers, but Mlton is an interesting SML whole program compiler. There's also JHC for Haskell which is nifty but can't quite compile all Haskell programs. I also found the Stalin Scheme compiler very interesting since it seems like a whole program compiler for a dynamically typed language like Scheme should be able to do a lot of interesting things.