The proofs shouldn't only be for 32. It should use param C that you setup with assumes
|2 ↗||(On Diff #546294)|
Should the tests be in a different place? At the very least please precommit change of pass so we can more accurately see what's the result of the code change vs the pass change.
You can either drop the !Neg here (my opinion) or drop the OtherMax.ule(Max...) in Neg definition.
If OtherMax.ugt(...) is true, Neg will always be false.
thanks for your comment.
the **OtherMax.ule(Max.abs()...)** in Neg definition has extra **abs()**, so this is different from the origin **OtherMax.ugt(...)** ?
For example, if the Max type is i8, then -1 is 255, so Max.countl_zero() is 0, so the negative value Max will return getFull(), and the Neg condition is used to skip this blockage.
I revert to use the previous change because there is an failure case Clang :: CodeGenOpenCL/shifts.cl
showed that the check getSingleElement() && isAllNegative() && OtherMax.ugt(Max.abs().countl_zero()) is necessary