v0.1.0
highlights:
- llgo/ssa: It's an implementation of go ssa semantics based on llvm ssa. See details below.
features:
- llgo/ssa (#1 #2 #3 #4 #5 #6 #7 #8 #9 #10 #11 #12 #13 #22 #24 #25 #26 #30 #31 #32)
- llgo/cl (#23 #24 #26 #27 #28 #29 #30 #31 #32 #33)
tools:
- ardump (#14 #15)
- nmdump (#16 #17)
- nmindex: A tool that retrieves which .a/.so/.dll/.dylib/.lib definitions a symbol appears in (#18 #19 #20 #21)
- llgen: A tool to convert a single Go file into an llvm ir file (#32 #33)
llgo/ssa
Although llvm ssa and go ssa are both ir language, they work at completely different levels. llvm ssa is closer to machine code, which abstracts different instruction sets. While go ssa is closer to a high-level language. We can think of it as the instruction set of the Go computer. github.com/goplus/llgo/ssa (we call it llgo/ssa for short) is an implementation of go ssa semantics based on llvm ssa. This makes the llgo compiler (which is responsible for translating Go code into llvm ssa) extremely simple to implement (currently v0.1.0 is only about 300 lines).
But llgo/ssa is not just for the llgo compiler. If we think of it as llvm's higher-order expressive capabilities, you will find it very useful. Before llgo/ssa you had to use machine code semantics to operate llvm ir. But now there is a high-level ssa that can use llvm very conveniently. Isn't this a very meaningful thing? It may be a crucial by-product of the llgo project.