4 ms·
Biggest insight from the article: clang does not need to generate SSA with phi nodes (which can get complicated and subtle). It can simply generate a sort of "d
by sidkshatriya 2y ago
Biggest insight from the article: clang does not need to generate SSA with phi nodes (which can get complicated and subtle). It can simply generate a sort of "degenerate" SSA which avoids phi nodes by storing and loading results to memory. This way the front end can concentrate on converting the front end C/C++ code to something simple.
Many of memory/load stores will be removed later in the pipeline and changed to registers. That is something for the optimization pipeline. Thats when phi nodes etc. will be insert and come into play.
- adonovan 2y agoThanks for the summary. This two-pass approach is the same one I used in Go’s golang.org/x/tools/go/ssa package, because I was at that time unaware that there are more efficient algorithms for constructing full SSA (with phis) in one pass, using the optimistic assumption that control flow graphs are reducible, which is nearly always true. The Go compiler’s SSA construction uses the one pass approach.