| /* { dg-additional-options "-fcompare-debug" } */ |
| |
| /* PR target/116189 */ |
| |
| /* In the sh backend, we used to create insn in the path of rtx_costs. |
| This means sometimes the max uid for insns would be different between |
| debugging and non debugging which then would cause gcse's hashtable |
| to have different number of slots which would cause a different walk |
| for that hash table. */ |
| |
| extern void ff(void); |
| extern short nn[8][4]; |
| typedef unsigned short move_table[4]; |
| extern signed long long ira_overall_cost; |
| extern signed long long ira_load_cost; |
| extern move_table *x_ira_register_move_cost[1]; |
| struct move { struct move *next; }; |
| unsigned short t; |
| void emit_move_list(struct move * list, int freq, unsigned char mode, int regno) { |
| int cost; |
| for (; list != 0; list = list->next) |
| { |
| ff(); |
| unsigned short aclass = t; |
| cost = (nn)[mode][aclass] ; |
| ira_load_cost = cost; |
| cost = x_ira_register_move_cost[mode][aclass][aclass] * freq ; |
| ira_overall_cost = cost; |
| } |
| } |