var-tracking.c (non_suitable_const): Turn from being a for_each_rtx callback to being...
authorRichard Sandiford <rdsandiford@googlemail.com>
Thu, 28 Aug 2014 06:24:57 +0000 (06:24 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 28 Aug 2014 06:24:57 +0000 (06:24 +0000)
gcc/
* var-tracking.c (non_suitable_const): Turn from being a for_each_rtx
callback to being a function that examines each subrtx itself.
Remove handling of null rtxes.
(add_uses): Update accordingly.

From-SVN: r214662

gcc/ChangeLog
gcc/var-tracking.c

index 4ca32242176aecfec8f9009f3c6910b9dc5967ad..9c7a14959540b25e3ef54c389fcb4443f4ec7b04 100644 (file)
@@ -1,3 +1,10 @@
+2014-08-28  Richard Sandiford  <rdsandiford@googlemail.com>
+
+       * var-tracking.c (non_suitable_const): Turn from being a for_each_rtx
+       callback to being a function that examines each subrtx itself.
+       Remove handling of null rtxes.
+       (add_uses): Update accordingly.
+
 2014-08-28  Richard Sandiford  <rdsandiford@googlemail.com>
 
        * var-tracking.c: Include rtl-iter.h.
index 1cd2276c750f16496f14aaa3ca81f2eb28eebf20..da83e495c601c46d997048a205bd2dd91466b25b 100644 (file)
@@ -5523,27 +5523,32 @@ preserve_value (cselib_val *val)
    any rtxes not suitable for CONST use not replaced by VALUEs
    are discovered.  */
 
-static int
-non_suitable_const (rtx *x, void *data ATTRIBUTE_UNUSED)
+static bool
+non_suitable_const (const_rtx x)
 {
-  if (*x == NULL_RTX)
-    return 0;
-
-  switch (GET_CODE (*x))
+  subrtx_iterator::array_type array;
+  FOR_EACH_SUBRTX (iter, array, x, ALL)
     {
-    case REG:
-    case DEBUG_EXPR:
-    case PC:
-    case SCRATCH:
-    case CC0:
-    case ASM_INPUT:
-    case ASM_OPERANDS:
-      return 1;
-    case MEM:
-      return !MEM_READONLY_P (*x);
-    default:
-      return 0;
+      const_rtx x = *iter;
+      switch (GET_CODE (x))
+       {
+       case REG:
+       case DEBUG_EXPR:
+       case PC:
+       case SCRATCH:
+       case CC0:
+       case ASM_INPUT:
+       case ASM_OPERANDS:
+         return true;
+       case MEM:
+         if (!MEM_READONLY_P (x))
+           return true;
+         break;
+       default:
+         break;
+       }
     }
+  return false;
 }
 
 /* Add uses (register and memory references) LOC which will be tracked
@@ -5589,8 +5594,7 @@ add_uses (rtx *ploc, void *data)
            }
 
          if (CONSTANT_P (vloc)
-             && (GET_CODE (vloc) != CONST
-                 || for_each_rtx (&vloc, non_suitable_const, NULL)))
+             && (GET_CODE (vloc) != CONST || non_suitable_const (vloc)))
            /* For constants don't look up any value.  */;
          else if (!VAR_LOC_UNKNOWN_P (vloc) && !unsuitable_loc (vloc)
                   && (val = find_use_val (vloc, GET_MODE (oloc), cui)))