[Bug target/94567] [10 Regression] wrong code at -O2 and -O3 on x86_64-linux-gnu

law at redhat dot com gcc-bugzilla@gcc.gnu.org
Wed Apr 15 23:12:47 GMT 2020


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?


More information about the Gcc-bugs mailing list