# Alternatives to phi nodes in static single assignment

I have read somewhere about an alternative SSA representation that doesn't use phi nodes but instead uses parameterized basic blocks.

Something like this in an SSA with phi:

block_a:
value_a = ...
jump block_c
block_b:
value_b = ...
jump block_c
block_c:
value_c = phi (block_a: value_a), (block_b: value_b)
...


Would look like this in SSA with parameterized basic blocks:

block_a:
value_a = ...
jump block_c(value_a)
block_b:
value_b = ...
jump block_c(value_b)
block_c(value_c):
...


My two questions are:

1. What is this called?
2. What other alternatives to phi nodes exists in SSA?
• If you look at the connections between ANF/CPS and SSA, how $\varphi$ nodes are represented on the ANF/CPS side is similar to this. I believe Clang or the Swift compiler uses something like what you are talking about. – Derek Elkins Sep 21 '18 at 20:43
• Block parameters, as used in Swift's Intermediate Language, are basically what I want. – oconnor0 Sep 23 '18 at 22:52