The same alternative can produce very different instruction sequences. For example:
if (compare_sign_p (insn)) { if (l) *l = 1; return AS1 (tst,%B0); } if (reg_unused_after (insn, op) && compare_eq_p (insn)) { /* Faster than sbiw if we can clobber the operand. */ if (l) *l = 1; return AS2 (or,%A0,%B0); } if (test_hard_reg_class (ADDW_REGS, op)) { if (l) *l = 1; return AS2 (sbiw,%0,0); } if (l) *l = 2; return (AS2 (cp,%A0,__zero_reg__) CR_TAB AS2 (cpc,%B0,__zero_reg__)); -- Summary: register allocation costs are not well described on AVR Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: bonzini at gnu dot org GCC target triplet: avr-*-* http://gcc.gnu.org/bugzilla/show_bug.cgi?id=39760