Lines 446-458
init_insn_regs (void)
Link Here
|
446 |
= create_alloc_pool ("insn regs", sizeof (struct lra_insn_reg), 100); |
446 |
= create_alloc_pool ("insn regs", sizeof (struct lra_insn_reg), 100); |
447 |
} |
447 |
} |
448 |
|
448 |
|
449 |
/* Create LRA insn related info about referenced REGNO with TYPE |
449 |
/* Create LRA insn related info about a reference to REGNO in INSN with |
450 |
(in/out/inout), biggest reference mode MODE, flag that it is |
450 |
TYPE (in/out/inout), biggest reference mode MODE, flag that it is |
451 |
reference through subreg (SUBREG_P), flag that is early clobbered |
451 |
reference through subreg (SUBREG_P), flag that is early clobbered |
452 |
in the insn (EARLY_CLOBBER), and reference to the next insn reg |
452 |
in the insn (EARLY_CLOBBER), and reference to the next insn reg |
453 |
info (NEXT). */ |
453 |
info (NEXT). */ |
454 |
static struct lra_insn_reg * |
454 |
static struct lra_insn_reg * |
455 |
new_insn_reg (int regno, enum op_type type, enum machine_mode mode, |
455 |
new_insn_reg (rtx insn, int regno, enum op_type type, enum machine_mode mode, |
456 |
bool subreg_p, bool early_clobber, struct lra_insn_reg *next) |
456 |
bool subreg_p, bool early_clobber, struct lra_insn_reg *next) |
457 |
{ |
457 |
{ |
458 |
struct lra_insn_reg *ir; |
458 |
struct lra_insn_reg *ir; |
Lines 460-466
new_insn_reg (int regno, enum op_type type, enum machine_mode mode,
Link Here
|
460 |
ir = (struct lra_insn_reg *) pool_alloc (insn_reg_pool); |
460 |
ir = (struct lra_insn_reg *) pool_alloc (insn_reg_pool); |
461 |
ir->type = type; |
461 |
ir->type = type; |
462 |
ir->biggest_mode = mode; |
462 |
ir->biggest_mode = mode; |
463 |
if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (lra_reg_info[regno].biggest_mode)) |
463 |
if (GET_MODE_SIZE (mode) > GET_MODE_SIZE (lra_reg_info[regno].biggest_mode) |
|
|
464 |
&& NONDEBUG_INSN_P (insn)) |
464 |
lra_reg_info[regno].biggest_mode = mode; |
465 |
lra_reg_info[regno].biggest_mode = mode; |
465 |
ir->subreg_p = subreg_p; |
466 |
ir->subreg_p = subreg_p; |
466 |
ir->early_clobber = early_clobber; |
467 |
ir->early_clobber = early_clobber; |
Lines 942-948
collect_non_operand_hard_regs (rtx *x, lra_insn_recog_data_t data,
Link Here
|
942 |
&& ! (FIRST_STACK_REG <= regno |
943 |
&& ! (FIRST_STACK_REG <= regno |
943 |
&& regno <= LAST_STACK_REG)); |
944 |
&& regno <= LAST_STACK_REG)); |
944 |
#endif |
945 |
#endif |
945 |
list = new_insn_reg (regno, type, mode, subreg_p, |
946 |
list = new_insn_reg (data->insn, regno, type, mode, subreg_p, |
946 |
early_clobber, list); |
947 |
early_clobber, list); |
947 |
} |
948 |
} |
948 |
} |
949 |
} |
Lines 1540-1546
add_regs_to_insn_regno_info (lra_insn_recog_data_t data, rtx x, int uid,
Link Here
|
1540 |
expand_reg_info (); |
1541 |
expand_reg_info (); |
1541 |
if (bitmap_set_bit (&lra_reg_info[regno].insn_bitmap, uid)) |
1542 |
if (bitmap_set_bit (&lra_reg_info[regno].insn_bitmap, uid)) |
1542 |
{ |
1543 |
{ |
1543 |
data->regs = new_insn_reg (regno, type, mode, subreg_p, |
1544 |
data->regs = new_insn_reg (data->insn, regno, type, mode, subreg_p, |
1544 |
early_clobber, data->regs); |
1545 |
early_clobber, data->regs); |
1545 |
return; |
1546 |
return; |
1546 |
} |
1547 |
} |
Lines 1552-1559
add_regs_to_insn_regno_info (lra_insn_recog_data_t data, rtx x, int uid,
Link Here
|
1552 |
if (curr->subreg_p != subreg_p || curr->biggest_mode != mode) |
1553 |
if (curr->subreg_p != subreg_p || curr->biggest_mode != mode) |
1553 |
/* The info can not be integrated into the found |
1554 |
/* The info can not be integrated into the found |
1554 |
structure. */ |
1555 |
structure. */ |
1555 |
data->regs = new_insn_reg (regno, type, mode, subreg_p, |
1556 |
data->regs = new_insn_reg (data->insn, regno, type, mode, |
1556 |
early_clobber, data->regs); |
1557 |
subreg_p, early_clobber, |
|
|
1558 |
data->regs); |
1557 |
else |
1559 |
else |
1558 |
{ |
1560 |
{ |
1559 |
if (curr->type != type) |
1561 |
if (curr->type != type) |