arc.c (arc_rewrite_small_data_p): Constify argument.
authorRichard Sandiford <richard.sandiford@arm.com>
Sun, 2 Nov 2014 20:00:12 +0000 (20:00 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 2 Nov 2014 20:00:12 +0000 (20:00 +0000)
gcc/
* config/arc/arc.c (arc_rewrite_small_data_p): Constify argument.
(small_data_pattern_1): Delete.
(small_data_pattern): Use FOR_EACH_SUBRTX.

From-SVN: r217017

gcc/ChangeLog
gcc/config/arc/arc.c

index 18b1e107039dbc1400ae6cf6cb1934b8036e39f8..438c77b378672c9089375788f33b1f39035c25a7 100644 (file)
@@ -1,3 +1,9 @@
+2014-11-02  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * config/arc/arc.c (arc_rewrite_small_data_p): Constify argument.
+       (small_data_pattern_1): Delete.
+       (small_data_pattern): Use FOR_EACH_SUBRTX.
+
 2014-11-02  Richard Sandiford  <richard.sandiford@arm.com>
 
        * config/arc/arc.c: Include rtl-iter.h.
index 1bc903b3a2ab6967620452000bba2b11d5b04921..48257f7a0dce089d232b69ae85863b3e371cf954 100644 (file)
@@ -6355,7 +6355,7 @@ arc_in_small_data_p (const_tree decl)
    as a gp+symref.  */
 
 static bool
-arc_rewrite_small_data_p (rtx x)
+arc_rewrite_small_data_p (const_rtx x)
 {
   if (GET_CODE (x) == CONST)
     x = XEXP (x, 0);
@@ -6405,26 +6405,25 @@ arc_rewrite_small_data (rtx op)
   return op;
 }
 
-/* A for_each_rtx callback for small_data_pattern.  */
-
-static int
-small_data_pattern_1 (rtx *loc, void *data ATTRIBUTE_UNUSED)
-{
-  if (GET_CODE (*loc) == PLUS
-      && rtx_equal_p (XEXP (*loc, 0), pic_offset_table_rtx))
-    return  -1;
-
-  return arc_rewrite_small_data_p (*loc);
-}
-
 /* Return true if OP refers to small data symbols directly, not through
    a PLUS.  */
 
 bool
 small_data_pattern (rtx op, machine_mode)
 {
-  return (GET_CODE (op) != SEQUENCE
-         && for_each_rtx (&op, small_data_pattern_1, 0));
+  if (GET_CODE (op) == SEQUENCE)
+    return false;
+  subrtx_iterator::array_type array;
+  FOR_EACH_SUBRTX (iter, array, op, ALL)
+    {
+      const_rtx x = *iter;
+      if (GET_CODE (x) == PLUS
+         && rtx_equal_p (XEXP (x, 0), pic_offset_table_rtx))
+       iter.skip_subrtxes ();
+      else if (arc_rewrite_small_data_p (x))
+       return true;
+    }
+  return false;
 }
 
 /* Return true if OP is an acceptable memory operand for ARCompact