Psi-SSA Form - de Ferrière, François (SSA-based Compiler Design, 2022)
In the SSA representation, each definition of a variable is given a unique name, and new pseudo-definitions are introduced on PHI-functions to merge values coming from different control-flow paths. Each definition is an unconditional definition, and the value of a variable is the value of the expression on the unique assignment to this variable. This essential property of the SSA representation no longer holds in the presence of conditionally executed, or predicated, code. When an operation is conditionally executed, the variable defined by this operation will or will not be modified depending on the value of a guard register. As a result, the value of the variable after the predicated operation is either the result of the operation if the predicate is true, or the value the variable had before this operation if the predicate is false. The goal of the PSI-SSA form advocated in this chapter is to express these conditional definitions while keeping the static single assignment property.