https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89536
--- Comment #11 from Jakub Jelinek <jakub at gcc dot gnu.org> --- The [0, 1] range in that case (if not boolean or prec==1) is not the property of the type, but just that optimizations figured out the SSA_NAME will not have other values. In tree-ssa-dom.c it goes in the opposite direction, sees that there is ~x == value comparison, and from that tries to derive what x could be if that comparison is true.