[Bug middle-end/78904] zero-extracts are not effective
ubizjak at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Dec 22 19:48:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78904
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> ---
(In reply to Segher Boessenkool from comment #1)
> ===
> Trying 10, 9 -> 11:
> Failed to match this instruction:
> (parallel [
> (set (reg:QI 88 [ _2 ])
> (plus:QI (subreg:QI (zero_extract:SI (reg/v:SI 94 [ a ])
> (const_int 8 [0x8])
> (const_int 8 [0x8])) 0)
> (subreg:QI (zero_extract:SI (reg/v:SI 95 [ b ])
> (const_int 8 [0x8])
> (const_int 8 [0x8])) 0)))
> (clobber (reg:CC 17 flags))
> ])
> ===
>
> and then it later tries 10, 9 -> 11 and 9, 11 -> 13 etc., but you need
> 11, 10, 9 -> 13 to match your insn pattern.
>
> Maybe you want a pattern for the result of 10, 9 -> 11? It is a valid
> insn for i386 I think?
No, unfortunately the above is not a valid x86 insn. x86 has two-operand
instructions, so output has to match one of the operands.
It looks that combine prefers:
(subreg:SI (plus:QI
and
(subreg:QI (zero_extract:SI (... op ...)
while - according to the existing x86 patterns - in the past the patterns were
seemingly combined into:
(plus:SI
and
(zero_extract:SI (... op ...)
More information about the Gcc-bugs
mailing list