Re: [20/32] Remove global call sets: loop-iv.c

2019-09-29 Thread Jeff Law
On 9/11/19 1:13 PM, Richard Sandiford wrote:
> Similar idea to the combine.c and gcse.c patches.
> 
> 
> 2019-09-11  Richard Sandiford  
> 
> gcc/
>   * loop-iv.c: Include regs.h and function-abi.h.
>   (simplify_using_initial_values): Use call_insn_abi to get the
>   ABI of the call insn target.  Conservatively assume that
>   partially-clobbered registers are altered.
OK
jeff


[20/32] Remove global call sets: loop-iv.c

2019-09-11 Thread Richard Sandiford
Similar idea to the combine.c and gcse.c patches.


2019-09-11  Richard Sandiford  

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

Index: gcc/loop-iv.c
===
--- gcc/loop-iv.c   2019-09-09 19:01:40.371078272 +0100
+++ gcc/loop-iv.c   2019-09-11 19:48:35.161764168 +0100
@@ -62,6 +62,8 @@ Free Software Foundation; either version
 #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 loo
  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 abi = call_insn_abi (insn);
+ IOR_REG_SET_HRS (this_altered,
+  abi.full_and_partial_reg_clobbers ());
+   }
 
  if (suitable_set_for_replacement (insn, &dest, &src))
{