Previously, during the search, all values had to have the same 'TypeSize', which is equal to number of bits of the integer type of the icmp operand. All values in the tree had to match this size; meaning that, if we searched from i16, we wouldn't accept i8s. A change in type size requires zext and truncs to perform the casts so, to allow mixed narrow types, the handling of these instructions is now different:
- zexts are sinks if the result is larger than TypeSize.
- truncs are sinks if their result is less or equal to TypeSize.
- truncs are sources if their incoming value is greater or equal than TypeSize.
I don't really understand the 'Equal' part in the GreaterOrEqual comparison. Can these types be equal, and is that what we want?