https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86627
Alexander Monakov <amonakov at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |amonakov at gcc dot gnu.org --- Comment #2 from Alexander Monakov <amonakov at gcc dot gnu.org> --- Division by 2 is very cheap only for unsigned. For possibly-negative operands as in your example, it needs a not-so-trivial sequence (see e.g. gcc-4.9 or llvm output). Division by non-pot constants is very hard to improve. The ISA does not have multiply-high for 128-bit integers, so it's not going to be fast anyway. I wonder what changed between gcc-4.9 and gcc-5 that we stopped RTL-expanding signed 128-bit division by 2 inline (to a 128-bit right shift with a fixup). I suggest to focus only on power-of-two division in this bug.