https://www.cs.cmu.edu/~fp/courses/15411-f08/lectures/09-ssa...
https://www.cs.cmu.edu/~fp/courses/15411-f08/lectures/09-ssa...
https://groups.google.com/forum/#!topic/golang-dev/zz-gWGXFZ...
I'm interested in why LLVM was disqualified. Was it simply never considered or is it incompatible with the Go type system, calling convention, etc.?
Also LLVM requires you to either write your IR in SSA or add another expensive optimisation pass to make it SSA (mem2reg). Perhaps they thought writing an SSA generator would be too much of a headache.
From the end of
http://llvm.org/docs/tutorial/LangImpl7.html#memory-in-llvm
> Proven and well tested: clang uses this technique for local mutable variables. As such, the most common clients of LLVM are using this to handle a bulk of their variables. You can be sure that bugs are found fast and fixed early.
They simply used what they knew best:
> If step one had been "learn the GCC or LLVM toolchains well enough to add segmented stacks", I'm not sure we'd have gotten to step two.
> Honestly, if we'd built on GCC or LLVM, we'd be moving so slowly I'd probably have left the project years ago.
If we were using LLVM...