In select c, x, y the condition c dominates the resulting x or
y chosen by the select. This adds logic to isKnownNonZero to try
and use the icmp for the c condition to see if it implies the
select x or y are known non-zero.
For example in:
%c = icmp ugt i8 %x, %C %r = select i1 %c, i8 %x, i8 %y ``` The true arm of select `%x` is non-zero (when "returned" by the `select`) because `%c` being true implies `%x` is non-zero.
Alive2 Links (with x {pred} C):
- EQ iff C != 0:
- NE iff C == 0:
- UGT [always]:
- UGE iff C != 0:
- SGT iff C s>= 0:
- SGE iff C s> 0:
- SLT iff C s<= 0:
- SLE iff C s< 0:
possible -> possibly