From 5c64181d62bb816b8c2c91e251cee7e2b597f244 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Mon, 30 Sep 2019 16:20:56 +0000 Subject: [PATCH] Remove global call sets: loop-iv.c Similar idea to the combine.c and gcse.c patches. 2019-09-30 Richard Sandiford 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 --- gcc/ChangeLog | 7 +++++++ gcc/loop-iv.c | 12 ++++++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c0454ce..1129ec5 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,12 @@ 2019-09-30 Richard Sandiford + * 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 + * function-abi.h (call_clobbers_in_region): Declare. (call_clobbered_in_region_p): New function. * function-abi.cc (call_clobbers_in_region): Likewise. diff --git a/gcc/loop-iv.c b/gcc/loop-iv.c index 33be75a..d0e6994 100644 --- a/gcc/loop-iv.c +++ b/gcc/loop-iv.c @@ -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)) { -- 2.7.4