Partial static single information form
a day ago
- SSI extends SSA by discovering facts from the program and reifying them as path-dependent/flow-sensitive IR nodes, such as refining types based on conditionals.
- Partial SSI can be built during SSA construction with low complexity, leveraging conditionals and branches in the source bytecode.
- Guards introduced by JIT optimization can be de-duplicated via GVN, but canonicalization is needed to rewrite operands to use the latest refined values.
- The approach offers a trade-off between compile-time and run-time, and does not insert new phi nodes or re-merge values in some implementations.
- Examples include implementations in ZJIT, TruffleRuby, Cinder, Luau, and Android ART, each using different strategies for type refinement.