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:
parent
6c47622219
commit
5c64181d62
|
@ -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.
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue