How to learn compilers: LLVM Edition
lowlevelbits.org
How to learn compilers: LLVM Edition
1–10 of 28 posts
Re: How to learn compilers: LLVM Edition
#2Re: How to learn compilers: LLVM Edition
#3 clang -emit-llvm -S sample.cpp
The article mentions Clang's AST, which can also be emitted: clang -Xclang -ast-dump -fsyntax-only sample.cpp
And for checking compiler outputs across lots of languages and implementations, there's always Matt Godbolt's Compiler Explorer: https://godbolt.orgRe: How to learn compilers: LLVM Edition
#4How do you distribute your frontend with LLVM?
Let's say that I have lexer, parser and emitter written in e.g Haskell (random example)
I emit LLVM IR and then I use LLVM to generate something other
but the problem is, that I need to have LLVM binaries and I'd rather avoid telling people that want to contribute to my OSS project to install LLVM because it's painful process as hell
So I thought about just adding "binaries" folder to my repo and put executables there, but the problem is that they're huge as hell! and also when you're on linux, then you don't need windows' binaries
Another problem is that LLVM installer doesnt include all LLVM components that I need (llc and wasm-ld), so I gotta compile it and tell cmake (iirc) to generate those
I thought about creating 2nd repo where there'd be all binaries compiles for all platforms: mac, linux, windows and after cloning my_repo1, then instruction would point to download specific binaries
How you people do it?
Re: How to learn compilers: LLVM Edition
#5since here's many compiler hackers then I'd want to ask question: How do you distribute your frontend with LLVM? Let's say that I have lexer, parser and emitter written in e.g Haskell (random example) I emit LLVM IR and then I use LLVM to generate something other but the problem is, that I need to have LLVM binaries and I'd rather avoid telling people that want to contribute to my OSS project to install LLVM because…
Re: How to learn compilers: LLVM Edition
#6since here's many compiler hackers then I'd want to ask question: How do you distribute your frontend with LLVM? Let's say that I have lexer, parser and emitter written in e.g Haskell (random example) I emit LLVM IR and then I use LLVM to generate something other but the problem is, that I need to have LLVM binaries and I'd rather avoid telling people that want to contribute to my OSS project to install LLVM because…
In fact, you never have to call any binaries specifically; just do it through code and everything should link at compile-time and become one big binary.
Re: How to learn compilers: LLVM Edition
#7since here's many compiler hackers then I'd want to ask question: How do you distribute your frontend with LLVM? Let's say that I have lexer, parser and emitter written in e.g Haskell (random example) I emit LLVM IR and then I use LLVM to generate something other but the problem is, that I need to have LLVM binaries and I'd rather avoid telling people that want to contribute to my OSS project to install LLVM because…
You can statically link LLVM, no problem. In fact, you never have to call any binaries specifically; just do it through code and everything should link at compile-time and become one big binary.
Re: How to learn compilers: LLVM Edition
#8Any pointers to similar courses much appreciated!
Re: How to learn compilers: LLVM Edition
#9since here's many compiler hackers then I'd want to ask question: How do you distribute your frontend with LLVM? Let's say that I have lexer, parser and emitter written in e.g Haskell (random example) I emit LLVM IR and then I use LLVM to generate something other but the problem is, that I need to have LLVM binaries and I'd rather avoid telling people that want to contribute to my OSS project to install LLVM because…
For example, all of the code in clang to do this is located in https://github.com/llvm/llvm-project/blob/main/clang/lib/Cod...
Re: How to learn compilers: LLVM Edition
#10It's a bit dated (covers DAGISel rather than GlobalISel) but it gives a thorough introduction.
2. LLVM Developer Meeting tutorials
These are really good although you'll have to put them in order yourself. They will be out of date, a little. LLVM is a moving target. Also, you don't have to go through every tutorial. For example, MLIR is not for me.
3. LLVM documentation
I spent less time reading this than going through the Developer Meeting tutorials. I generally use it as a reference.
4. Discord, LLVM email list, git blame, LLVM Weekly
... because you will have questions.
5. MyFirstTypoFix (in the docs)
... when it comes time to submit a patch.
6. Mips backend
If you're doing a backend, you will need a place to start. The LLVM documentation points you to the horribly out of date SPARC backend. Don't even touch that. AArch64 and x86 are very full featured and thus very complex (100 kloc+). Don't use those either. RISC-V is ok but concerns itself mostly with supporting new RISC-V features rather than keeping up to date with LLVM compiler services. Don't use that either although definitely work through Alex Bradbury's RISC-V backend tutorials. Read the Mips backend. It is actively maintained. It has good GlobalISel support almost on par with the flagship AArch64 and x86 backends.
BTW, Chris Lattner is a super nice guy.