From 037586dddab4e2ce5821a52fd0344286e4fee86c Mon Sep 17 00:00:00 2001 From: Vladimir Makarov Date: Tue, 4 Dec 2018 22:50:14 +0000 Subject: [PATCH] re PR rtl-optimization/88317 (ICE: Segmentation fault (in split_reg -> bitmap_set_bit -> bitmap_list_link_element)) 2018-12-04 Vladimir Makarov 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 --- gcc/ChangeLog | 6 ++++++ gcc/lra-constraints.c | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index baf38257665..ce915527e10 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2018-12-04 Vladimir Makarov + + 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 * ipa-prop.c (jump_function_useful_p): New. diff --git a/gcc/lra-constraints.c b/gcc/lra-constraints.c index 04a90723aab..09bd7aa7c35 100644 --- a/gcc/lra-constraints.c +++ b/gcc/lra-constraints.c @@ -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 (;;) { -- 2.30.2