re PR rtl-optimization/88317 (ICE: Segmentation fault (in split_reg -> bitmap_set_bit -> bitmap_list_link_element))

2018-12-04  Vladimir Makarov  <vmakarov@redhat.com>

	PR rtl-optimization/88317
	* lra-constraints.c (split_reg): Don't set up check_only_regs if
	we are outside the inheritance pass.

From-SVN: r266803
This commit is contained in:
Vladimir Makarov 2018-12-04 22:50:14 +00:00 committed by Vladimir Makarov
parent 7b377b2210
commit 037586ddda
2 changed files with 13 additions and 3 deletions

View File

@ -1,3 +1,9 @@
2018-12-04 Vladimir Makarov <vmakarov@redhat.com>
PR rtl-optimization/88317
* lra-constraints.c (split_reg): Don't set up check_only_regs if
we are outside the inheritance pass.
2018-12-04 Jan Hubicka <hubicka@ucw.cz>
* ipa-prop.c (jump_function_useful_p): New.

View File

@ -5496,7 +5496,9 @@ lra_copy_reg_equiv (unsigned int new_regno, unsigned int original_regno)
ORIGINAL_REGNO. NEXT_USAGE_INSNS specifies which instruction in
the EBB next uses ORIGINAL_REGNO; it has the same form as the
"insns" field of usage_insns. If TO is not NULL, we don't use
usage_insns, we put restore insns after TO insn.
usage_insns, we put restore insns after TO insn. It is a case when
we call it from lra_split_hard_reg_for, outside the inheritance
pass.
The transformations look like:
@ -5652,16 +5654,18 @@ split_reg (bool before_p, int original_regno, rtx_insn *insn,
&& mode == PSEUDO_REGNO_MODE (original_regno))
lra_copy_reg_equiv (new_regno, original_regno);
lra_reg_info[new_regno].restore_rtx = regno_reg_rtx[original_regno];
bitmap_set_bit (&check_only_regs, new_regno);
bitmap_set_bit (&check_only_regs, original_regno);
bitmap_set_bit (&lra_split_regs, new_regno);
if (to != NULL)
{
lra_assert (next_usage_insns == NULL);
usage_insn = to;
after_p = TRUE;
}
else
{
/* We need check_only_regs only inside the inheritance pass. */
bitmap_set_bit (&check_only_regs, new_regno);
bitmap_set_bit (&check_only_regs, original_regno);
after_p = usage_insns[original_regno].after_p;
for (;;)
{