Compilation steps
Parse into tree form
Check for errors
Constant fold
Handle derivatives
Hardware optimization
Eliminate dead code
Allocate
Generate passes