https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120805
--- Comment #3 from Tamar Christina <tnfchris at gcc dot gnu.org> --- before the bounds variable didn't have any range attached to it. e.g. bnd.704_180 = _181 - _132; but now it shows # RANGE [irange] unsigned int [1, 2147483647] bnd.704_180 = _181 - _132; For some reason ranges don't seem to be determined on shifts. This causes it to remove some codepaths that are not reachable and results in the removal of instructions, hende the change in asm output. The range above is correct, due to the loop versioning that's happening in the loop. So I think these are testisms, but but the generic change looks correct. I think someone with more PPC knowledge should have a look and say if the changes are resulting in worse code or not. I don't want to blindly update the testcase.