]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Remove global call sets: postreload-gcse.c
authorRichard Sandiford <richard.sandiford@arm.com>
Mon, 30 Sep 2019 16:21:07 +0000 (16:21 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Mon, 30 Sep 2019 16:21:07 +0000 (16:21 +0000)
This is another case in which we should conservatively treat
partial kills as full kills.

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

gcc/
* postreload-gcse.c: Include regs.h and function-abi.h.
(record_opr_changes): Use insn_callee_abi to get the ABI of the
call insn target.  Conservatively assume that partially-clobbered
registers are altered.

From-SVN: r276329

gcc/ChangeLog
gcc/postreload-gcse.c

index 208d32fe28c8d7cf16e89d6c3c540a8ebec07126..a30c38d6ebc2de4d6cab6c82c88de92f66d81607 100644 (file)
@@ -1,3 +1,10 @@
+2019-09-30  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * postreload-gcse.c: Include regs.h and function-abi.h.
+       (record_opr_changes): Use insn_callee_abi to get the ABI of the
+       call insn target.  Conservatively assume that partially-clobbered
+       registers are altered.
+
 2019-09-30  Richard Sandiford  <richard.sandiford@arm.com>
 
        * postreload.c (reload_combine_recognize_pattern): Use crtl->abi
index a7098387db227dcb44c57005c68383561fcf8ad0..0c12b3808a66b5fc26da4f571521bc2ca29fbe59 100644 (file)
@@ -41,6 +41,8 @@ along with GCC; see the file COPYING3.  If not see
 #include "intl.h"
 #include "gcse-common.h"
 #include "gcse.h"
+#include "regs.h"
+#include "function-abi.h"
 
 /* The following code implements gcse after reload, the purpose of this
    pass is to cleanup redundant loads generated by reload and other
@@ -772,7 +774,11 @@ record_opr_changes (rtx_insn *insn)
     {
       unsigned int regno;
       hard_reg_set_iterator hrsi;
-      EXECUTE_IF_SET_IN_HARD_REG_SET (regs_invalidated_by_call, 0, regno, hrsi)
+      /* We don't track modes of hard registers, so we need to be
+        conservative and assume that partial kills are full kills.  */
+      HARD_REG_SET callee_clobbers
+       = insn_callee_abi (insn).full_and_partial_reg_clobbers ();
+      EXECUTE_IF_SET_IN_HARD_REG_SET (callee_clobbers, 0, regno, hrsi)
        record_last_reg_set_info_regno (insn, regno);
 
       if (! RTL_CONST_OR_PURE_CALL_P (insn))