Please check code:
Clang surprisingly generates worse code for common pattern
Gcc generates same code.
I checked the InstCombine’s code and tried something to fix it but no success.
So I will leave this here for more skilled developers and maybe the could fix this problem.