re PR rtl-optimization/88317 (ICE: Segmentation fault (in split_reg -> bitmap_set_bit...
authorVladimir Makarov <vmakarov@redhat.com>
Tue, 4 Dec 2018 22:50:14 +0000 (22:50 +0000)
committerVladimir Makarov <vmakarov@gcc.gnu.org>
Tue, 4 Dec 2018 22:50:14 +0000 (22:50 +0000)
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

gcc/ChangeLog
gcc/lra-constraints.c

index baf3825766538f0f0c3f083e8f941246c413d8b1..ce915527e10abd206df7d279b45e93244100f68c 100644 (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.
index 04a90723aab2faee300eb9ed33a443d92af265d7..09bd7aa7c3592fa2864a13f97c09e0776553a2cb 100644 (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 (;;)
        {