Remove global call sets: loop-iv.c

Similar idea to the combine.c and gcse.c patches.

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

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

From-SVN: r276326
This commit is contained in:
Richard Sandiford 2019-09-30 16:20:56 +00:00 committed by Richard Sandiford
parent 6c47622219
commit 5c64181d62
2 changed files with 17 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2019-09-30 Richard Sandiford <richard.sandiford@arm.com>
* loop-iv.c: Include regs.h and function-abi.h.
(simplify_using_initial_values): 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>
* function-abi.h (call_clobbers_in_region): Declare.

View File

@ -62,6 +62,8 @@ along with GCC; see the file COPYING3. If not see
#include "dumpfile.h"
#include "rtl-iter.h"
#include "tree-ssa-loop-niter.h"
#include "regs.h"
#include "function-abi.h"
/* Possible return values of iv_get_reaching_def. */
@ -1972,8 +1974,14 @@ simplify_using_initial_values (class loop *loop, enum rtx_code op, rtx *expr)
CLEAR_REG_SET (this_altered);
note_stores (insn, mark_altered, this_altered);
if (CALL_P (insn))
/* Kill all call clobbered registers. */
IOR_REG_SET_HRS (this_altered, regs_invalidated_by_call);
{
/* Kill all registers that might be clobbered by the call.
We don't track modes of hard registers, so we need to be
conservative and assume that partial kills are full kills. */
function_abi callee_abi = insn_callee_abi (insn);
IOR_REG_SET_HRS (this_altered,
callee_abi.full_and_partial_reg_clobbers ());
}
if (suitable_set_for_replacement (insn, &dest, &src))
{