[FRV] RFA: Use new rtl iterators in frv_ifcvt_modify_tests
diff mbox

Message ID 8738acxz2w.fsf@googlemail.com
State New
Headers show

Commit Message

Richard Sandiford Oct. 25, 2014, 9:45 a.m. UTC
This is part of a series to remove uses of for_each_rtx from the ports.
In this particular cases there's a find_all_hard_regs function that can
be used instead, although rtl.h needs to be included after hard-reg-set.h
in order to get the declaration:

#ifdef HARD_CONST
extern void find_all_hard_regs (const_rtx, HARD_REG_SET *);
extern void find_all_hard_reg_sets (const_rtx, HARD_REG_SET *, bool);
#endif

Tested by making sure there were no code changes for gcc.dg, gcc.c-torture
and g++.dg for frv-elf.  OK to install?

Thanks,
Richard


gcc/
	* config/frv/frv.c: Move include of rtl.h after hard-reg-set.h.
	(frv_clear_registers_used): Delete.
	(frv_ifcvt_modify_tests): Use find_all_hard_regs.

Patch
diff mbox

Index: gcc/config/frv/frv.c
===================================================================
--- gcc/config/frv/frv.c	2014-10-25 09:48:52.218530218 +0100
+++ gcc/config/frv/frv.c	2014-10-25 09:51:22.658858701 +0100
@@ -21,13 +21,13 @@  the Free Software Foundation; either ver
 #include "system.h"
 #include "coretypes.h"
 #include "tm.h"
-#include "rtl.h"
 #include "tree.h"
 #include "varasm.h"
 #include "stor-layout.h"
 #include "stringpool.h"
 #include "regs.h"
 #include "hard-reg-set.h"
+#include "rtl.h"
 #include "insn-config.h"
 #include "conditions.h"
 #include "insn-flags.h"
@@ -326,7 +326,6 @@  static rtx frv_expand_mwtacc_builtin		(e
 static rtx frv_expand_noargs_builtin		(enum insn_code);
 static void frv_split_iacc_move			(rtx, rtx);
 static rtx frv_emit_comparison			(enum rtx_code, rtx, rtx);
-static int frv_clear_registers_used		(rtx *, void *);
 static void frv_ifcvt_add_insn			(rtx, rtx, int);
 static rtx frv_ifcvt_rewrite_mem		(rtx, enum machine_mode, rtx);
 static rtx frv_ifcvt_load_value			(rtx, rtx);
@@ -5185,33 +5184,6 @@  frv_split_abs (rtx operands[])
 }
 
 
-/* An internal function called by for_each_rtx to clear in a hard_reg set each
-   register used in an insn.  */
-
-static int
-frv_clear_registers_used (rtx *ptr, void *data)
-{
-  if (GET_CODE (*ptr) == REG)
-    {
-      int regno = REGNO (*ptr);
-      HARD_REG_SET *p_regs = (HARD_REG_SET *)data;
-
-      if (regno < FIRST_PSEUDO_REGISTER)
-	{
-	  int reg_max = regno + HARD_REGNO_NREGS (regno, GET_MODE (*ptr));
-
-	  while (regno < reg_max)
-	    {
-	      CLEAR_HARD_REG_BIT (*p_regs, regno);
-	      regno++;
-	    }
-	}
-    }
-
-  return 0;
-}
-
-
 /* Initialize machine-specific if-conversion data.
    On the FR-V, we don't have any extra fields per se, but it is useful hook to
    initialize the static storage.  */
@@ -5404,9 +5376,11 @@  frv_ifcvt_modify_tests (ce_if_block *ce_
 	      rtx pattern;
 	      rtx set;
 	      int skip_nested_if = FALSE;
+	      HARD_REG_SET mentioned_regs;
 
-	      for_each_rtx (&PATTERN (insn), frv_clear_registers_used,
-			    (void *)&tmp_reg->regs);
+	      CLEAR_HARD_REG_SET (mentioned_regs);
+	      find_all_hard_regs (PATTERN (insn), &mentioned_regs);
+	      AND_COMPL_HARD_REG_SET (tmp_reg->regs, mentioned_regs);
 
 	      pattern = PATTERN (insn);
 	      if (GET_CODE (pattern) == COND_EXEC)
@@ -5442,8 +5416,8 @@  frv_ifcvt_modify_tests (ce_if_block *ce_
 		}
 
 	      if (! skip_nested_if)
-		for_each_rtx (&PATTERN (insn), frv_clear_registers_used,
-			      (void *)&frv_ifcvt.nested_cc_ok_rewrite);
+		AND_COMPL_HARD_REG_SET (frv_ifcvt.nested_cc_ok_rewrite,
+					mentioned_regs);
 	    }
 
 	  if (insn == last_insn)