According to Relay’s paper, let scope is a fundamental design compared to data flow graph ir. However, recently I have seen this work, http://compilers.cs.uni-saarland.de/papers/lkh15_cgo.pdf
- An interesting point is the work is a graph based ir (sea of nodes), more compacted and less complication time consumed,
- Besides, without let scope, which is cumbersome to maintain across certain transformations.
“The disadvantage of nesting becomes clear in the example in Figure 3. Assume we want to add a conditional branch in a to b and an additional function z, which in turn branches to c. The original nesting must be repaired since c needs to be visible from both b and z (see Figure 3b). Block/let floating has to be applied to float c into a. The reverse transformation, i.e. sinking c into b, is known as block sinking. Such situations occur, for example, during jump threading.”
The context of this work is to support HOF in LLVM, so I think we may have different consideration when design for AI applications.
- How does sea of nodes ir look like compared to relay ir?
- Do we have the disadvantage of nesting scope in relay or AI application?