diff mbox series

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

Message ID mpt4l1iwsrk.fsf@arm.com
State New
Headers show
Series Support multiple ABIs in the same translation unit | expand

Commit Message

Richard Sandiford Sept. 11, 2019, 7:13 p.m. UTC
Similar idea to the combine.c and gcse.c patches.


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

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.

Comments

Jeff Law Sept. 29, 2019, 9:20 p.m. UTC | #1
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  <richard.sandiford@arm.com>
> 
> 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
diff mbox series

Patch

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))
 	    {