https://gcc.gnu.org/bugzilla/show_bug.cgi?id=126257
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- x * 2 and x << 1 are the same thing in the end, just that x * 2 better preserves the UB on overflow. What exactly the compiler emits for that depends on the architecture. E.g. on x86_64 lea, but e.g. on aarch64 left shift by 1. I think _BitInt(2) x + x is not worth bothering with, having a different case for it and turning it into x << 1 because x * 2 isn't representable? IMHO not worth that.
