https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #10 from Segher Boessenkool ---
Not even an alternative SELECT_CC_MODE; just add an argument to it, giving
the original mode? We already have that in combine, so we can trivially
pass it. Will that work for x86 here?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #9 from Jakub Jelinek ---
I don't think it is really possible, because there is nothing magic about the
operands of the comparison, it can be done in both CCmode or CCCmode. The
problem is that during simplification combiner takes th
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #8 from Segher Boessenkool ---
So is that something than can/should be improved in ix86_cc_mode?
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #7 from Jakub Jelinek ---
(In reply to Segher Boessenkool from comment #5)
> Trying 7 -> 9:
> 7: r97:SI=0x2a
> 9: {flags:CCC=cmp(r97:SI+r98:SI,r97:SI);r99:SI=r97:SI+r98:SI;}
> REG_DEAD r98:SI
> REG_DEAD r97:SI
> Fa
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #6 from Segher Boessenkool ---
I forgot to add: subtract immediate is the same as add immediate for us,
we don't change the sense of the carry bit to a "borrow bit" (and instead,
we have a subtract-from-immediate). But this doesn't c
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #5 from Segher Boessenkool ---
Trying 7 -> 9:
7: r97:SI=0x2a
9: {flags:CCC=cmp(r97:SI+r98:SI,r97:SI);r99:SI=r97:SI+r98:SI;}
REG_DEAD r98:SI
REG_DEAD r97:SI
Failed to match this instruction:
(parallel [
(set
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #4 from fdlbxtqi ---
(In reply to Jakub Jelinek from comment #1)
> I don't see anything undesirable on that. The 0 aka %rax is used in 7
> different instructions later on besides the move, so either we just clear
> %ecx (can't use xo
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #3 from Jakub Jelinek ---
And fwprop that perhaps wouldn't "simplify" them that much punts on these
because the instructions are multiple sets. It is unclear why, I mean, sure,
it can't be adding REG_EQUAL notes in that case, but oth
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #2 from Jakub Jelinek ---
Anyway,
#include
void
foo (unsigned int a[4], unsigned int b[4])
{
unsigned char carry = 0;
carry = _addcarry_u32 (carry, 42, b[0], &a[0]);
carry = _addcarry_u32 (carry, b[1], 43, &a[1]);
carry = _a
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97437
--- Comment #1 from Jakub Jelinek ---
I don't see anything undesirable on that. The 0 aka %rax is used in 7
different instructions later on besides the move, so either we just clear %ecx
(can't use xorl for that as the flags register needs to be
10 matches
Mail list logo