This is based on the example/comments in:
I tried just lifting the restriction in computeKnownBitsFromShiftOperator() as suggested, but that doesn't catch all of the cases shown here. I didn't step through to see exactly why that happened. But it seems like a reasonable compromise to cheaply check the special-case of shifting a constant.
There's a slight regression on a cmp transform as noted, but I think this is likely the more important/common pattern, so we can fix that icmp pattern later if needed.