llvm is another choice for compiler, but gcc is very much standard.
LLVM in technically the bottom-end of a compiler framework, and as such there's a llvmgcc
project that has some fairly-impressive compiletime speedups (and even results in faster code at times due to a wider frame in which to optimize).
LLVM works on a model that describes your program, so in theory it can be used to compile from any language with an appropriate language-to-model adapter layer, for example the company that I work for uses LLVM under the hood
to convert graphical "programs" to the graph representation on which LLVM operates (and therefore makes it easier to target various different architectures)