Interface that overrides properties of a node, such as the node's stamp.
This interface allows richer canonicalizations when the current compilation context can provide a
narrower stamp than the one stored in the node itself. One such example is performing
canonicalization late in the compilation, when the nodes are already scheduled, and benefit from
additional stamp information from conditional checks in branches.
For example, in the following code,
offset + i can be canonicalized once it is
scheduled into the branch:
public void update(int offset, int i) {
if (i == 0) {
array[offset + i];
}
}