Remove global call sets: DF (entry/exit defs)
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 30 Sep 2019 16:20:34 +0000 (16:20 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 30 Sep 2019 16:20:34 +0000 (16:20 +0000)
The code patched here is seeing whether the current function
needs to save at least part of a register before using it.

2019-09-30  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* df-scan.c (df_get_entry_block_def_set): Use crtl->abi to test
whether the current function needs to save at least part of a
register before using it.
(df_get_exit_block_use_set): Likewise for epilogue restores.

From-SVN: r276320

gcc/ChangeLog
gcc/df-scan.c

index 13caa91..3617216 100644 (file)
@@ -1,5 +1,12 @@
 2019-09-30  Richard Sandiford  <richard.sandiford@arm.com>
 
+       * df-scan.c (df_get_entry_block_def_set): Use crtl->abi to test
+       whether the current function needs to save at least part of a
+       register before using it.
+       (df_get_exit_block_use_set): Likewise for epilogue restores.
+
+2019-09-30  Richard Sandiford  <richard.sandiford@arm.com>
+
        * df-problems.c: Include regs.h and function-abi.h.
        (df_rd_problem_data): Rename sparse_invalidated_by_call to
        sparse_invalidated_by_eh and dense_invalidated_by_call to
index 7dda4ca..36012b7 100644 (file)
@@ -3499,7 +3499,9 @@ df_get_entry_block_def_set (bitmap entry_block_defs)
       /* Defs for the callee saved registers are inserted so that the
         pushes have some defining location.  */
       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-       if ((call_used_or_fixed_reg_p (i) == 0) && (df_regs_ever_live_p (i)))
+       if (!crtl->abi->clobbers_full_reg_p (i)
+           && !fixed_regs[i]
+           && df_regs_ever_live_p (i))
          bitmap_set_bit (entry_block_defs, i);
     }
 
@@ -3672,8 +3674,9 @@ df_get_exit_block_use_set (bitmap exit_block_uses)
     {
       /* Mark all call-saved registers that we actually used.  */
       for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
-       if (df_regs_ever_live_p (i) && !LOCAL_REGNO (i)
-           && !TEST_HARD_REG_BIT (regs_invalidated_by_call, i))
+       if (df_regs_ever_live_p (i)
+           && !LOCAL_REGNO (i)
+           && !crtl->abi->clobbers_full_reg_p (i))
          bitmap_set_bit (exit_block_uses, i);
     }