If a value is known to be non-negative and zexted, that's the same thing as sexted.
So for the purpose of looking past the casts with an icmp, treat it as if it was a sext:
https://alive2.llvm.org/ce/z/_BDsGV
This is necessary, but not enough to solve the motivating problem:
https://github.com/llvm/llvm-project/issues/55013
Isn't the sext handling here redundant due to https://github.com/llvm/llvm-project/blob/76d1f5eaa87b3d1ae5f4c07114313350152c24f2/llvm/lib/Transforms/InstCombine/InstCombineCasts.cpp#L1506-L1508, which will canonicalize to zext?