re PR rtl-optimization/91136 (incorrect move of instruction to delay slot causes...
authorEric Botcazou <ebotcazou@adacore.com>
Fri, 12 Jul 2019 10:15:39 +0000 (10:15 +0000)
committerEric Botcazou <ebotcazou@gcc.gnu.org>
Fri, 12 Jul 2019 10:15:39 +0000 (10:15 +0000)
PR rtl-optimization/91136
* df-core.c (ACCESSING REFS): Fix typos in comment.
* resource.c (mark_target_live_reg): Add artificial defs that occur at
the beginning of the block to the initial set of live registers.

From-SVN: r273436

gcc/ChangeLog
gcc/df-core.c
gcc/resource.c

index bd47dddc524f4e3462030810a27e2088a7d5d321..7f01af33edbbb18bcd9889bf3240fe735d0f7ccc 100644 (file)
@@ -1,3 +1,10 @@
+2019-07-12  Eric Botcazou  <ebotcazou@adacore.com>
+
+       PR rtl-optimization/91136
+       * df-core.c (ACCESSING REFS): Fix typos in comment.
+       * resource.c (mark_target_live_reg): Add artificial defs that occur at
+       the beginning of the block to the initial set of live registers.
+
 2019-07-12  Richard Biener  <rguenther@suse.de>
 
        * fold-const.h (get_array_ctor_element_at_index): Adjust.
index 44848aa176898a4302ddb6903f6bb806dfe09f97..be19aba0f1e1188c53c2c3770a2e913bcebe4d84 100644 (file)
@@ -298,12 +298,12 @@ There are 4 ways to obtain access to refs:
 
    Artificial defs and uses occur both at the beginning and ends of blocks.
 
-     For blocks that area at the destination of eh edges, the
+     For blocks that are at the destination of eh edges, the
      artificial uses and defs occur at the beginning.  The defs relate
      to the registers specified in EH_RETURN_DATA_REGNO and the uses
-     relate to the registers specified in ED_USES.  Logically these
+     relate to the registers specified in EH_USES.  Logically these
      defs and uses should really occur along the eh edge, but there is
-     no convenient way to do this.  Artificial edges that occur at the
+     no convenient way to do this.  Artificial defs that occur at the
      beginning of the block have the DF_REF_AT_TOP flag set.
 
      Artificial uses occur at the end of all blocks.  These arise from
index f8a23ed9f58bb25de2106b25ad7bc2095798517b..c4bcfd7dc71cb84ec1fd40369ad2196294150895 100644 (file)
@@ -987,9 +987,13 @@ mark_target_live_regs (rtx_insn *insns, rtx target_maybe_return, struct resource
     {
       regset regs_live = DF_LR_IN (BASIC_BLOCK_FOR_FN (cfun, b));
       rtx_insn *start_insn, *stop_insn;
+      df_ref def;
 
       /* Compute hard regs live at start of block.  */
       REG_SET_TO_HARD_REG_SET (current_live_regs, regs_live);
+      FOR_EACH_ARTIFICIAL_DEF (def, b)
+       if (DF_REF_FLAGS (def) & DF_REF_AT_TOP)
+         SET_HARD_REG_BIT (current_live_regs, DF_REF_REGNO (def));
 
       /* Get starting and ending insn, handling the case where each might
         be a SEQUENCE.  */