|
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) |