https://gcc.gnu.org/bugzilla/show_bug.cgi?id=106415
--- Comment #4 from Undefined Opcode <undefinedopcode2 at gmail dot com> ---
As an experiment, I added the following logic to m68k_rtx_costs():
case PLUS:
// <omitted a few lines related to LEA>
if(TUNE_68000_10 && !(mode == QImode || mode == HImode))
{
*total = 400; // make non-byte/word ADD outrageously expensive
return true;
}
Sure enough, the costs for all non-short IV shot up. However, it's still
choosing candidate 7, same as before:
<Candidate Costs>:
cand cost
force_expr_to_var_cost size costs:
integer 2
symbol 4
address 4
other 16
force_expr_to_var_cost speed costs:
integer 2
symbol 4
address 4
other 16
0 401
1 5
2 5
3 4
4 5
5 5
6 5
7 401
8 401
Later, when we get to group costs, the results aren't what I'd expect:
<Group-candidate Costs>:
Group 0:
cand cost compl. inv.expr. inv.vars
0 400 0 NIL; NIL;
7 0 0 NIL; NIL;
8 400 0 NIL; NIL;
Group 1:
cand cost compl. inv.expr. inv.vars
0 0 0 NIL; NIL;
1 0 0 NIL; NIL;
2 0 0 NIL; NIL;
3 0 0 NIL; NIL;
4 0 0 NIL; NIL;
5 0 0 NIL; NIL;
6 -1 0 NIL; NIL;
7 0 0 NIL; NIL;
8 0 0 NIL; NIL;
I'm not entirely sure what's going on here. Why does candidate 7 suddenly cost
0?