gcc/
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Oct 2014 18:42:00 +0000 (18:42 +0000)
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 27 Oct 2014 18:42:00 +0000 (18:42 +0000)
* config/i386/i386.c (find_constant_1): Delete.
(find_constant): Use FOR_EACH_SUBRTX.

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

gcc/ChangeLog
gcc/config/i386/i386.c

index a0c8dec..aed92bb 100644 (file)
@@ -1,5 +1,10 @@
 2014-10-27  Richard Sandiford  <richard.sandiford@arm.com>
 
+       * config/i386/i386.c (find_constant_1): Delete.
+       (find_constant): Use FOR_EACH_SUBRTX.
+
+2014-10-27  Richard Sandiford  <richard.sandiford@arm.com>
+
        * config/i386/i386.c (extended_reg_mentioned_1): Delete.
        (x86_extended_reg_mentioned_p): Use FOR_EACH_SUBRTX.
 
index 408fbd9..7855a4b 100644 (file)
@@ -46533,53 +46533,44 @@ allocate_next_window (int window_num)
   return dispatch_window_list1;
 }
 
-/* Increment the number of immediate operands of an instruction.  */
+/* Compute number of immediate operands of an instruction.  */
 
-static int
-find_constant_1 (rtx *in_rtx, imm_info *imm_values)
+static void
+find_constant (rtx in_rtx, imm_info *imm_values)
 {
-  if (*in_rtx == 0)
-    return 0;
-
-    switch ( GET_CODE (*in_rtx))
-    {
-    case CONST:
-    case SYMBOL_REF:
-    case CONST_INT:
-      (imm_values->imm)++;
-      if (x86_64_immediate_operand (*in_rtx, SImode))
-       (imm_values->imm32)++;
-      else
-       (imm_values->imm64)++;
-      break;
-
-    case CONST_DOUBLE:
-      (imm_values->imm)++;
-      (imm_values->imm64)++;
-      break;
-
-    case CODE_LABEL:
-      if (LABEL_KIND (*in_rtx) == LABEL_NORMAL)
+  if (INSN_P (in_rtx))
+    in_rtx = PATTERN (in_rtx);
+  subrtx_iterator::array_type array;
+  FOR_EACH_SUBRTX (iter, array, in_rtx, ALL)
+    if (const_rtx x = *iter)
+      switch (GET_CODE (x))
        {
+       case CONST:
+       case SYMBOL_REF:
+       case CONST_INT:
          (imm_values->imm)++;
-         (imm_values->imm32)++;
-       }
-      break;
-
-    default:
-      break;
-    }
+         if (x86_64_immediate_operand (CONST_CAST_RTX (x), SImode))
+           (imm_values->imm32)++;
+         else
+           (imm_values->imm64)++;
+         break;
 
-  return 0;
-}
+       case CONST_DOUBLE:
+         (imm_values->imm)++;
+         (imm_values->imm64)++;
+         break;
 
-/* Compute number of immediate operands of an instruction.  */
+       case CODE_LABEL:
+         if (LABEL_KIND (x) == LABEL_NORMAL)
+           {
+             (imm_values->imm)++;
+             (imm_values->imm32)++;
+           }
+         break;
 
-static void
-find_constant (rtx in_rtx, imm_info *imm_values)
-{
-  for_each_rtx (INSN_P (in_rtx) ? &PATTERN (in_rtx) : &in_rtx,
-               (rtx_function) find_constant_1, (void *) imm_values);
+       default:
+         break;
+       }
 }
 
 /* Return total size of immediate operands of an instruction along with number