This patch implements initial support for freeze instructions in
[IP]SCCP.
If the operand is known to be undef, exit early and wait until it
changes. If it stays undef until the end of solving, resolvedUndefsIn
will take care of handling it. At the moment, it will be marked as
overdefined.
Otherwise just merge in the value of the operand.
Let's assume %x is poison here, then %and is poison and %and.fr can take any value, while you assume that it must be in [0,3].
Here's an example of how this goes wrong across multiple passes:
As you can see, we both claim that %x != 0 and pass %x == 0 to @use(). This example uses -sccp to make sure SCCP doesn't have a global view.