https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114810

--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
(In reply to Uroš Bizjak from comment #7)
> (define_insn_and_split "*andn<dwi>3_doubleword_bmi"
>   [(set (match_operand:<DWI> 0 "register_operand" "=&r,r,r")
>       (and:<DWI>
>         (not:<DWI> (match_operand:<DWI> 1 "register_operand" "r,0,r"))
>         (match_operand:<DWI> 2 "nonimmediate_operand" "ro,ro,0")))
>    (clobber (reg:CC FLAGS_REG))]
> 
> where the problematic alternative (=&r,r,ro) allows a memory input in its
> operand 2 constraint. The allocator could spill a DImode value to a stack in
> advance and reload the value from the memory in this particular alternative.

So, given the known ia32 register starvation, can't we split that first
alternative to
=&r,r,o with "nox64" isa and =&r,r,ro with "x64" isa?

Reply via email to