28 #ifdef ENABLE_CHECKING
29 #define ENABLE_IRA_CHECKING
32 #ifdef ENABLE_IRA_CHECKING
33 #define ira_assert(c) gcc_assert (c)
37 #define ira_assert(c) ((void)(0 && (c)))
45 #define REG_FREQ_FROM_EDGE_FREQ(freq) \
46 (optimize_size || (flag_branch_probabilities && !ENTRY_BLOCK_PTR->count) \
47 ? REG_FREQ_MAX : (freq * REG_FREQ_MAX / BB_FREQ_MAX) \
48 ? (freq * REG_FREQ_MAX / BB_FREQ_MAX) : 1)
151 #if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
152 #define IRA_BB_NODE_BY_INDEX(index) __extension__ \
153 (({ ira_loop_tree_node_t _node = (&ira_bb_nodes[index]); \
154 if (_node->children != NULL || _node->loop != NULL || _node->bb == NULL)\
157 "\n%s: %d: error in %s: it is not a block node\n", \
158 __FILE__, __LINE__, __FUNCTION__); \
159 gcc_unreachable (); \
163 #define IRA_BB_NODE_BY_INDEX(index) (&ira_bb_nodes[index])
166 #define IRA_BB_NODE(bb) IRA_BB_NODE_BY_INDEX ((bb)->index)
173 #if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
174 #define IRA_LOOP_NODE_BY_INDEX(index) __extension__ \
175 (({ ira_loop_tree_node_t const _node = (&ira_loop_nodes[index]); \
176 if (_node->children == NULL || _node->bb != NULL \
177 || (_node->loop == NULL && current_loops != NULL)) \
180 "\n%s: %d: error in %s: it is not a loop node\n", \
181 __FILE__, __LINE__, __FUNCTION__); \
182 gcc_unreachable (); \
186 #define IRA_LOOP_NODE_BY_INDEX(index) (&ira_loop_nodes[index])
189 #define IRA_LOOP_NODE(loop) IRA_LOOP_NODE_BY_INDEX ((loop)->num)
281 ENUM_BITFIELD (machine_mode) mode : 8;
284 ENUM_BITFIELD (reg_class) aclass : 16;
404 #define ALLOCNO_NUM(A) ((A)->num)
405 #define ALLOCNO_REGNO(A) ((A)->regno)
406 #define ALLOCNO_REG(A) ((A)->reg)
407 #define ALLOCNO_NEXT_REGNO_ALLOCNO(A) ((A)->next_regno_allocno)
408 #define ALLOCNO_LOOP_TREE_NODE(A) ((A)->loop_tree_node)
409 #define ALLOCNO_CAP(A) ((A)->cap)
410 #define ALLOCNO_CAP_MEMBER(A) ((A)->cap_member)
411 #define ALLOCNO_NREFS(A) ((A)->nrefs)
412 #define ALLOCNO_FREQ(A) ((A)->freq)
413 #define ALLOCNO_HARD_REGNO(A) ((A)->hard_regno)
414 #define ALLOCNO_CALL_FREQ(A) ((A)->call_freq)
415 #define ALLOCNO_CALLS_CROSSED_NUM(A) ((A)->calls_crossed_num)
416 #define ALLOCNO_CHEAP_CALLS_CROSSED_NUM(A) ((A)->cheap_calls_crossed_num)
417 #define ALLOCNO_MEM_OPTIMIZED_DEST(A) ((A)->mem_optimized_dest)
418 #define ALLOCNO_MEM_OPTIMIZED_DEST_P(A) ((A)->mem_optimized_dest_p)
419 #define ALLOCNO_SOMEWHERE_RENAMED_P(A) ((A)->somewhere_renamed_p)
420 #define ALLOCNO_CHILD_RENAMED_P(A) ((A)->child_renamed_p)
421 #define ALLOCNO_DONT_REASSIGN_P(A) ((A)->dont_reassign_p)
423 #define ALLOCNO_NO_STACK_REG_P(A) ((A)->no_stack_reg_p)
424 #define ALLOCNO_TOTAL_NO_STACK_REG_P(A) ((A)->total_no_stack_reg_p)
426 #define ALLOCNO_BAD_SPILL_P(A) ((A)->bad_spill_p)
427 #define ALLOCNO_ASSIGNED_P(A) ((A)->assigned_p)
428 #define ALLOCNO_MODE(A) ((A)->mode)
429 #define ALLOCNO_COPIES(A) ((A)->allocno_copies)
430 #define ALLOCNO_HARD_REG_COSTS(A) ((A)->hard_reg_costs)
431 #define ALLOCNO_UPDATED_HARD_REG_COSTS(A) ((A)->updated_hard_reg_costs)
432 #define ALLOCNO_CONFLICT_HARD_REG_COSTS(A) \
433 ((A)->conflict_hard_reg_costs)
434 #define ALLOCNO_UPDATED_CONFLICT_HARD_REG_COSTS(A) \
435 ((A)->updated_conflict_hard_reg_costs)
436 #define ALLOCNO_CLASS(A) ((A)->aclass)
437 #define ALLOCNO_CLASS_COST(A) ((A)->class_cost)
438 #define ALLOCNO_UPDATED_CLASS_COST(A) ((A)->updated_class_cost)
439 #define ALLOCNO_MEMORY_COST(A) ((A)->memory_cost)
440 #define ALLOCNO_UPDATED_MEMORY_COST(A) ((A)->updated_memory_cost)
441 #define ALLOCNO_EXCESS_PRESSURE_POINTS_NUM(A) \
442 ((A)->excess_pressure_points_num)
443 #define ALLOCNO_OBJECT(A,N) ((A)->objects[N])
444 #define ALLOCNO_NUM_OBJECTS(A) ((A)->num_objects)
445 #define ALLOCNO_ADD_DATA(A) ((A)->add_data)
474 #define ALLOCNO_EMIT_DATA(a) ((ira_emit_data_t) ALLOCNO_ADD_DATA (a))
483 return ALLOCNO_EMIT_DATA (a)->reg;
486 #define OBJECT_ALLOCNO(O) ((O)->allocno)
487 #define OBJECT_SUBWORD(O) ((O)->subword)
488 #define OBJECT_CONFLICT_ARRAY(O) ((O)->conflicts_array)
489 #define OBJECT_CONFLICT_VEC(O) ((ira_object_t *)(O)->conflicts_array)
490 #define OBJECT_CONFLICT_BITVEC(O) ((IRA_INT_TYPE *)(O)->conflicts_array)
491 #define OBJECT_CONFLICT_ARRAY_SIZE(O) ((O)->conflicts_array_size)
492 #define OBJECT_CONFLICT_VEC_P(O) ((O)->conflict_vec_p)
493 #define OBJECT_NUM_CONFLICTS(O) ((O)->num_accumulated_conflicts)
494 #define OBJECT_CONFLICT_HARD_REGS(O) ((O)->conflict_hard_regs)
495 #define OBJECT_TOTAL_CONFLICT_HARD_REGS(O) ((O)->total_conflict_hard_regs)
496 #define OBJECT_MIN(O) ((O)->min)
497 #define OBJECT_MAX(O) ((O)->max)
498 #define OBJECT_CONFLICT_ID(O) ((O)->id)
499 #define OBJECT_LIVE_RANGES(O) ((O)->live_ranges)
597 #define IRA_INT_BITS HOST_BITS_PER_WIDE_INT
598 #define IRA_INT_TYPE HOST_WIDE_INT
603 #if defined ENABLE_IRA_CHECKING && (GCC_VERSION >= 2007)
605 #define SET_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__ \
606 (({ int _min = (MIN), _max = (MAX), _i = (I); \
607 if (_i < _min || _i > _max) \
610 "\n%s: %d: error in %s: %d not in range [%d,%d]\n", \
611 __FILE__, __LINE__, __FUNCTION__, _i, _min, _max); \
612 gcc_unreachable (); \
614 ((R)[(unsigned) (_i - _min) / IRA_INT_BITS] \
615 |= ((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
618 #define CLEAR_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__ \
619 (({ int _min = (MIN), _max = (MAX), _i = (I); \
620 if (_i < _min || _i > _max) \
623 "\n%s: %d: error in %s: %d not in range [%d,%d]\n", \
624 __FILE__, __LINE__, __FUNCTION__, _i, _min, _max); \
625 gcc_unreachable (); \
627 ((R)[(unsigned) (_i - _min) / IRA_INT_BITS] \
628 &= ~((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
630 #define TEST_MINMAX_SET_BIT(R, I, MIN, MAX) __extension__ \
631 (({ int _min = (MIN), _max = (MAX), _i = (I); \
632 if (_i < _min || _i > _max) \
635 "\n%s: %d: error in %s: %d not in range [%d,%d]\n", \
636 __FILE__, __LINE__, __FUNCTION__, _i, _min, _max); \
637 gcc_unreachable (); \
639 ((R)[(unsigned) (_i - _min) / IRA_INT_BITS] \
640 & ((IRA_INT_TYPE) 1 << ((unsigned) (_i - _min) % IRA_INT_BITS))); }))
644 #define SET_MINMAX_SET_BIT(R, I, MIN, MAX) \
645 ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS] \
646 |= ((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
648 #define CLEAR_MINMAX_SET_BIT(R, I, MIN, MAX) \
649 ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS] \
650 &= ~((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
652 #define TEST_MINMAX_SET_BIT(R, I, MIN, MAX) \
653 ((R)[(unsigned) ((I) - (MIN)) / IRA_INT_BITS] \
654 & ((IRA_INT_TYPE) 1 << ((unsigned) ((I) - (MIN)) % IRA_INT_BITS)))
688 i->
nel = max < min ? 0 : max - min + 1;
691 i->
word = i->
nel == 0 ? 0 : vec[0];
712 for (; (i->
word & 1) == 0; i->
word >>= 1)
732 #define FOR_EACH_BIT_IN_MINMAX_SET(VEC, MIN, MAX, N, ITER) \
733 for (minmax_set_iter_init (&(ITER), (VEC), (MIN), (MAX)); \
734 minmax_set_iter_cond (&(ITER), &(N)); \
735 minmax_set_iter_next (&(ITER)))
760 [FIRST_PSEUDO_REGISTER][NUM_MACHINE_MODES]);
871 #if SWITCHABLE_TARGET
874 #define this_target_ira_int (&default_target_ira_int)
877 #define ira_reg_mode_hard_regset \
878 (this_target_ira_int->x_ira_reg_mode_hard_regset)
879 #define ira_register_move_cost \
880 (this_target_ira_int->x_ira_register_move_cost)
881 #define ira_max_memory_move_cost \
882 (this_target_ira_int->x_ira_max_memory_move_cost)
883 #define ira_may_move_in_cost \
884 (this_target_ira_int->x_ira_may_move_in_cost)
885 #define ira_may_move_out_cost \
886 (this_target_ira_int->x_ira_may_move_out_cost)
887 #define ira_reg_allocno_class_p \
888 (this_target_ira_int->x_ira_reg_allocno_class_p)
889 #define ira_reg_pressure_class_p \
890 (this_target_ira_int->x_ira_reg_pressure_class_p)
891 #define ira_non_ordered_class_hard_regs \
892 (this_target_ira_int->x_ira_non_ordered_class_hard_regs)
893 #define ira_class_hard_reg_index \
894 (this_target_ira_int->x_ira_class_hard_reg_index)
895 #define ira_prohibited_class_mode_regs \
896 (this_target_ira_int->x_ira_prohibited_class_mode_regs)
897 #define ira_useful_class_mode_regs \
898 (this_target_ira_int->x_ira_useful_class_mode_regs)
899 #define ira_important_classes_num \
900 (this_target_ira_int->x_ira_important_classes_num)
901 #define ira_important_classes \
902 (this_target_ira_int->x_ira_important_classes)
903 #define ira_important_class_nums \
904 (this_target_ira_int->x_ira_important_class_nums)
905 #define ira_uniform_class_p \
906 (this_target_ira_int->x_ira_uniform_class_p)
907 #define ira_reg_class_intersect \
908 (this_target_ira_int->x_ira_reg_class_intersect)
909 #define ira_reg_class_super_classes \
910 (this_target_ira_int->x_ira_reg_class_super_classes)
911 #define ira_reg_class_subunion \
912 (this_target_ira_int->x_ira_reg_class_subunion)
913 #define ira_reg_class_superunion \
914 (this_target_ira_int->x_ira_reg_class_superunion)
915 #define ira_prohibited_mode_move_regs \
916 (this_target_ira_int->x_ira_prohibited_mode_move_regs)
945 void (*) (ira_loop_tree_node_t),
946 void (*) (ira_loop_tree_node_t));
967 int,
bool,
rtx, ira_loop_tree_node_t);
971 bool,
rtx, ira_loop_tree_node_t);
1037 if (ira_register_move_cost[mode] == NULL)
1063 for (n = i->
n; n < ira_allocnos_num; n++)
1064 if (ira_allocnos[n] != NULL)
1066 *a = ira_allocnos[n];
1076 #define FOR_EACH_ALLOCNO(A, ITER) \
1077 for (ira_allocno_iter_init (&(ITER)); \
1078 ira_allocno_iter_cond (&(ITER), &(A));)
1100 for (n = i->
n; n < ira_objects_num; n++)
1101 if (ira_object_id_map[n] != NULL)
1103 *obj = ira_object_id_map[n];
1113 #define FOR_EACH_OBJECT(OBJ, ITER) \
1114 for (ira_object_iter_init (&(ITER)); \
1115 ira_object_iter_cond (&(ITER), &(OBJ));)
1138 if (n < ALLOCNO_NUM_OBJECTS (a))
1140 *o = ALLOCNO_OBJECT (a, n);
1149 #define FOR_EACH_ALLOCNO_OBJECT(A, O, ITER) \
1150 for (ira_allocno_object_iter_init (&(ITER)); \
1151 ira_allocno_object_iter_cond (&(ITER), (A), &(O));)
1174 for (n = i->
n; n < ira_copies_num; n++)
1175 if (ira_copies[n] != NULL)
1177 *cp = ira_copies[n];
1187 #define FOR_EACH_COPY(C, ITER) \
1188 for (ira_copy_iter_init (&(ITER)); \
1189 ira_copy_iter_cond (&(ITER), &(C));)
1227 i->
vec = OBJECT_CONFLICT_ARRAY (obj);
1233 if (OBJECT_MIN (obj) > OBJECT_MAX (obj))
1236 i->
size = ((OBJECT_MAX (obj) - OBJECT_MIN (obj)
1238 / IRA_INT_BITS) *
sizeof (IRA_INT_TYPE);
1241 i->
word = (i->
size == 0 ? 0 : ((IRA_INT_TYPE *) i->
vec)[0]);
1262 unsigned IRA_INT_TYPE word = i->
word;
1263 unsigned int bit_num = i->
bit_num;
1266 for (; word == 0; word = ((IRA_INT_TYPE *) i->
vec)[i->
word_num])
1274 bit_num = i->
word_num * IRA_INT_BITS;
1278 for (; (word & 1) == 0; word >>= 1)
1283 i->
word = word >> 1;
1293 #define FOR_EACH_OBJECT_CONFLICT(OBJ, CONF, ITER) \
1294 for (ira_object_conflict_iter_init (&(ITER), (OBJ)); \
1295 ira_object_conflict_iter_cond (&(ITER), &(CONF));)
1308 gcc_assert (hard_regno >= 0);
1309 for (i = hard_regno_nregs[hard_regno][mode] - 1; i >= 0; i--)
1310 if (TEST_HARD_REG_BIT (hard_regset, hard_regno + i))
1321 for (size = i = 0; i < FIRST_PSEUDO_REGISTER; i++)
1322 if (TEST_HARD_REG_BIT (
set, i))
1336 ira_assert (hard_regno >= 0);
1337 for (i = hard_regno_nregs[hard_regno][mode] - 1; i >= 0; i--)
1338 if (!TEST_HARD_REG_BIT (hard_regset, hard_regno + i))
1360 len = ira_class_hard_regs_num[(int) aclass];
1361 for (i = 0; i <
len; i++)
1372 if (*vec != NULL || src == NULL)
1375 len = ira_class_hard_regs_num[aclass];
1376 memcpy (*vec, src,
sizeof (
int) * len);
1388 len = ira_class_hard_regs_num[aclass];
1392 memset (*vec, 0,
sizeof (
int) * len);
1394 for (i = 0; i <
len; i++)
1395 (*vec)[i] += src[i];
1411 len = ira_class_hard_regs_num[aclass];
1413 memcpy (reg_costs, src,
sizeof (
int) * len);
1416 for (i = 0; i <
len; i++)