Swiftc – SIL and its not-so-basic blocks
swiftc.io
swiftc.io
One, passes have to special case BB arguments whether they are phi nodes or not ;)
IE this doesn't actually make something like constant propagation easier. You still have to perform the meet operations. You still have to go and look what arguments were passed to your basic block.
In the phi node case, they are right there. I assume they link the basic block parameters to things passing those parameters, in which case: they are essentially phi nodes.
Second. It's really easy to create phi nodes. Creating basic blocks is a heavyweight thing (maybe not in SIL, but in general).
For most compilers, creating basic blocks requires messing with the CFG, update dominator info, etc.
However, if want to put something in loop closed SSA form, i can just drop in a bunch of phi nodes without messing with the CFG. In their form, i'd have to add basic block arguments to a bunch of blocks.
Additionally, phi nodes have natural analogues, like in SSI form, etc.
It's harder to represent the splitting operating sigma nodes perform in a basic block form. ;-)
http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.34.3...
The original pass was called RNN - right number of names.
http://mlton.org/pipermail/mlton/2007-February/029597.html
http://mlton.org/pipermail/mlton/2003-January/023061.html