regrename.h (regrename_do_replace): Change to return bool.
2015-06-28 Chung-Lin Tang <cltang@codesourcery.com> Sandra Loosemore <sandra@codesourcery.com> gcc/ * regrename.h (regrename_do_replace): Change to return bool. * regrename.c (rename_chains): Check return value of regname_do_replace. (regrename_do_replace): Re-validate the modified insns and return bool status. * config/aarch64/cortex-a57-fma-steering.c (rename_single_chain): Update to match rename_chains changes. * config/c6x/c6x.c (try_rename_operands): Assert that regrename_do_replace returns true. Co-Authored-By: Sandra Loosemore <sandra@codesourcery.com> From-SVN: r225106
This commit is contained in:
parent
2aee355b5a
commit
17369fbf51
@ -1,3 +1,16 @@
|
||||
2015-06-28 Chung-Lin Tang <cltang@codesourcery.com>
|
||||
Sandra Loosemore <sandra@codesourcery.com>
|
||||
|
||||
* regrename.h (regrename_do_replace): Change to return bool.
|
||||
* regrename.c (rename_chains): Check return value of
|
||||
regname_do_replace.
|
||||
(regrename_do_replace): Re-validate the modified insns and
|
||||
return bool status.
|
||||
* config/aarch64/cortex-a57-fma-steering.c (rename_single_chain):
|
||||
Update to match rename_chains changes.
|
||||
* config/c6x/c6x.c (try_rename_operands): Assert that
|
||||
regrename_do_replace returns true.
|
||||
|
||||
2015-06-27 Patrick Palka <ppalka@gcc.gnu.org>
|
||||
|
||||
* print-tree.c (print_node) [TREE_VEC]: Print its length.
|
||||
|
@ -289,11 +289,19 @@ rename_single_chain (du_head_p head, HARD_REG_SET *unavailable)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dump_file)
|
||||
fprintf (dump_file, ", renamed as %s\n", reg_names[best_new_reg]);
|
||||
|
||||
regrename_do_replace (head, best_new_reg);
|
||||
df_set_regs_ever_live (best_new_reg, true);
|
||||
if (regrename_do_replace (head, best_new_reg))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, ", renamed as %s\n", reg_names[best_new_reg]);
|
||||
df_set_regs_ever_live (best_new_reg, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, ", renaming as %s failed\n",
|
||||
reg_names[best_new_reg]);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -3516,7 +3516,7 @@ try_rename_operands (rtx_insn *head, rtx_insn *tail, unit_req_table reqs,
|
||||
best_reg =
|
||||
find_rename_reg (this_head, super_class, &unavailable, old_reg, true);
|
||||
|
||||
regrename_do_replace (this_head, best_reg);
|
||||
gcc_assert (regrename_do_replace (this_head, best_reg));
|
||||
|
||||
count_unit_reqs (new_reqs, head, PREV_INSN (tail));
|
||||
merge_unit_reqs (new_reqs);
|
||||
@ -3529,7 +3529,7 @@ try_rename_operands (rtx_insn *head, rtx_insn *tail, unit_req_table reqs,
|
||||
unit_req_imbalance (reqs), unit_req_imbalance (new_reqs));
|
||||
}
|
||||
if (unit_req_imbalance (new_reqs) > unit_req_imbalance (reqs))
|
||||
regrename_do_replace (this_head, old_reg);
|
||||
gcc_assert (regrename_do_replace (this_head, old_reg));
|
||||
else
|
||||
memcpy (reqs, new_reqs, sizeof (unit_req_table));
|
||||
|
||||
|
@ -496,12 +496,20 @@ rename_chains (void)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (dump_file)
|
||||
fprintf (dump_file, ", renamed as %s\n", reg_names[best_new_reg]);
|
||||
|
||||
regrename_do_replace (this_head, best_new_reg);
|
||||
tick[best_new_reg] = ++this_tick;
|
||||
df_set_regs_ever_live (best_new_reg, true);
|
||||
if (regrename_do_replace (this_head, best_new_reg))
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, ", renamed as %s\n", reg_names[best_new_reg]);
|
||||
tick[best_new_reg] = ++this_tick;
|
||||
df_set_regs_ever_live (best_new_reg, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dump_file)
|
||||
fprintf (dump_file, ", renaming as %s failed\n",
|
||||
reg_names[best_new_reg]);
|
||||
tick[reg] = ++this_tick;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -927,7 +935,13 @@ regrename_analyze (bitmap bb_mask)
|
||||
bb->aux = NULL;
|
||||
}
|
||||
|
||||
void
|
||||
/* Attempt to replace all uses of the register in the chain beginning with
|
||||
HEAD with REG. Returns true on success and false if the replacement is
|
||||
rejected because the insns would not validate. The latter can happen
|
||||
e.g. if a match_parallel predicate enforces restrictions on register
|
||||
numbering in its subpatterns. */
|
||||
|
||||
bool
|
||||
regrename_do_replace (struct du_head *head, int reg)
|
||||
{
|
||||
struct du_chain *chain;
|
||||
@ -941,22 +955,26 @@ regrename_do_replace (struct du_head *head, int reg)
|
||||
int reg_ptr = REG_POINTER (*chain->loc);
|
||||
|
||||
if (DEBUG_INSN_P (chain->insn) && REGNO (*chain->loc) != base_regno)
|
||||
INSN_VAR_LOCATION_LOC (chain->insn) = gen_rtx_UNKNOWN_VAR_LOC ();
|
||||
validate_change (chain->insn, &(INSN_VAR_LOCATION_LOC (chain->insn)),
|
||||
gen_rtx_UNKNOWN_VAR_LOC (), true);
|
||||
else
|
||||
{
|
||||
*chain->loc = gen_raw_REG (GET_MODE (*chain->loc), reg);
|
||||
validate_change (chain->insn, chain->loc,
|
||||
gen_raw_REG (GET_MODE (*chain->loc), reg), true);
|
||||
if (regno >= FIRST_PSEUDO_REGISTER)
|
||||
ORIGINAL_REGNO (*chain->loc) = regno;
|
||||
REG_ATTRS (*chain->loc) = attr;
|
||||
REG_POINTER (*chain->loc) = reg_ptr;
|
||||
}
|
||||
|
||||
df_insn_rescan (chain->insn);
|
||||
}
|
||||
|
||||
if (!apply_change_group ())
|
||||
return false;
|
||||
|
||||
mode = GET_MODE (*head->first->loc);
|
||||
head->regno = reg;
|
||||
head->nregs = hard_regno_nregs[reg][mode];
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
@ -91,6 +91,6 @@ extern void regrename_analyze (bitmap);
|
||||
extern du_head_p regrename_chain_from_id (unsigned int);
|
||||
extern int find_rename_reg (du_head_p, enum reg_class, HARD_REG_SET *, int,
|
||||
bool);
|
||||
extern void regrename_do_replace (du_head_p, int);
|
||||
extern bool regrename_do_replace (du_head_p, int);
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user