Commit 7187286e by Richard Sandiford Committed by Richard Sandiford

Remove global call sets: postreload-gcse.c

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
parent 3df28f00
2019-09-30 Richard Sandiford <richard.sandiford@arm.com> 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 * postreload.c (reload_combine_recognize_pattern): Use crtl->abi
when deciding whether a register is free for use after RA. when deciding whether a register is free for use after RA.
(reload_combine): Remove unnecessary use of fixed_reg_set. (reload_combine): Remove unnecessary use of fixed_reg_set.
......
...@@ -41,6 +41,8 @@ along with GCC; see the file COPYING3. If not see ...@@ -41,6 +41,8 @@ along with GCC; see the file COPYING3. If not see
#include "intl.h" #include "intl.h"
#include "gcse-common.h" #include "gcse-common.h"
#include "gcse.h" #include "gcse.h"
#include "regs.h"
#include "function-abi.h"
/* The following code implements gcse after reload, the purpose of this /* The following code implements gcse after reload, the purpose of this
pass is to cleanup redundant loads generated by reload and other pass is to cleanup redundant loads generated by reload and other
...@@ -772,7 +774,11 @@ record_opr_changes (rtx_insn *insn) ...@@ -772,7 +774,11 @@ record_opr_changes (rtx_insn *insn)
{ {
unsigned int regno; unsigned int regno;
hard_reg_set_iterator hrsi; 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); record_last_reg_set_info_regno (insn, regno);
if (! RTL_CONST_OR_PURE_CALL_P (insn)) if (! RTL_CONST_OR_PURE_CALL_P (insn))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment