gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Oct 2014 18:40:37 +0000 (18:40 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Oct 2014 18:40:37 +0000 (18:40 +0000)
* config/s390/s390.c: Include rtl-iter.h.
(check_dpu): Delete.
(s390_loop_unroll_adjust): Only iterate over patterns.
Use FOR_EACH_SUBRTX.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@216753 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/s390/s390.c

index b5dc7f2..534542c 100644 (file)
@@ -1,5 +1,12 @@
 2014-10-27  Richard Sandiford  <richard.sandiford@arm.com>
 
+       * config/s390/s390.c: Include rtl-iter.h.
+       (check_dpu): Delete.
+       (s390_loop_unroll_adjust): Only iterate over patterns.
+       Use FOR_EACH_SUBRTX.
+
+2014-10-27  Richard Sandiford  <richard.sandiford@arm.com>
+
        * config/spu/spu.c: Include rtl-iter.h
        (ea_symbol_ref): Replace with...
        (ea_symbol_ref_p): ...this new function.
index 1b10805..e8d7395 100644 (file)
@@ -81,6 +81,7 @@ along with GCC; see the file COPYING3.  If not see
 #include "tree-pass.h"
 #include "context.h"
 #include "builtins.h"
+#include "rtl-iter.h"
 
 /* Define the specific costs for a given cpu.  */
 
@@ -11756,19 +11757,6 @@ s390_sched_init (FILE *file ATTRIBUTE_UNUSED,
   s390_sched_state = 0;
 }
 
-/* This function checks the whole of insn X for memory references. The
-   function always returns zero because the framework it is called
-   from would stop recursively analyzing the insn upon a return value
-   other than zero. The real result of this function is updating
-   counter variable MEM_COUNT.  */
-static int
-check_dpu (rtx *x, unsigned *mem_count)
-{
-  if (*x != NULL_RTX && MEM_P (*x))
-    (*mem_count)++;
-  return 0;
-}
-
 /* This target hook implementation for TARGET_LOOP_UNROLL_ADJUST calculates
    a new number struct loop *loop should be unrolled if tuned for cpus with
    a built-in stride prefetcher.
@@ -11791,12 +11779,13 @@ s390_loop_unroll_adjust (unsigned nunroll, struct loop *loop)
 
   /* Count the number of memory references within the loop body.  */
   bbs = get_loop_body (loop);
+  subrtx_iterator::array_type array;
   for (i = 0; i < loop->num_nodes; i++)
-    {
-      for (insn = BB_HEAD (bbs[i]); insn != BB_END (bbs[i]); insn = NEXT_INSN (insn))
-       if (INSN_P (insn) && INSN_CODE (insn) != -1)
-            for_each_rtx_in_insn (&insn, (rtx_function) check_dpu, &mem_count);
-    }
+    FOR_BB_INSNS (bbs[i], insn)
+      if (INSN_P (insn) && INSN_CODE (insn) != -1)
+       FOR_EACH_SUBRTX (iter, array, PATTERN (insn), NONCONST)
+         if (MEM_P (*iter))
+           mem_count += 1;
   free (bbs);
 
   /* Prevent division by zero, and we do not need to adjust nunroll in this case.  */