This commit extends the patterns recognised by InstSimplify to also handle (x >> y) <= x in the same way as (x /u y) <= x.
The missing optimisation was found investigating why LLVM did not optimise away bound checks in a binary search: https://github.com/rust-lang/rust/pull/30917
I was did not like duplicating the code for udiv and lshr, so I tried to replicate the pattern match as in ValueTracking.cpp:1803.