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?