https://gcc.gnu.org/bugzilla/show_bug.cgi?id=31178
--- Comment #16 from Richard Biener <rguenth at gcc dot gnu.org> --- (In reply to Andrew Macleod from comment #15) > no... we won't process ranges for anything unless it passes supports_type_p > (): > > (INTEGRAL_TYPE_P (type) || POINTER_TYPE_P (type))) > > oh oh oh. > Never mind. I see. we are generating a range for i_2, and I'm now using the > type of op1... we probably are NOT generating ranges for x_1... but I am > looking at its type in this case. > Doh! my bad. > I shall use element_precision. problem solved. Thanks Note for shifts the precision of the shift operand does not have to match that of the shifted operand. In your case you have vector << scalar, so you definitely want to look at scalars precision when deriving a range for scalar, _not_ at element_precision of vector (or the LHS)!