https://gcc.gnu.org/bugzilla/show_bug.cgi?id=94567
--- Comment #13 from Jeffrey A. Law <law at redhat dot com> --- Sigh. That code is good in that it's rejecting matching the pattern for the SImode sign bit that we can't implement. For some dumb reason I was thinking it was changing how we split, but it's actually the main condition. So calling it a "hack" was a mistake. The only time we have to widen is when the pos + len exactly hits the sign bit in the operand's mode, which is what I thought my patch did. Certainly we don't want to be changing sizes unnecessarily, that's a given. I guess what I did could be refined to allow that case for CCZmode. Your test of: + || (INTVAL (operands[3]) + INTVAL (operands[4]) + == GET_MODE (operands[2])) Looks wrong. Didn't you mean to get the precision of the mode of operand2?