I've committed a patch upstream to convert TREE_INT_CST_LOW to tree_to_[su]hwi
if there is an obvious tree_fits_[su]hwi_p guard.  There were some other
changes from TREE_INT_CST_LOW to tree_to_[su]hwi that weren't as obvious
and I think we should deal with them separately.  As before, these changes
aren't really related to the wide-int conversion, since the code that uses
them is operating on HWIs rather than double_ints.  The patch is still here,
so it's not like the work is lost.

There were also some changes from TREE_INT_CST_LOW (X) to
TREE_INT_CST_ELT (X, 0), which are no longer needed now that we define
TREE_INT_CST_LOW too.

There was one case where the branch switched a tree_fits_uhwi_p to
a tree_fits_shwi_p, but with a !!! about the original choice.
The two other instances of the !!! sequence kept the original tests,
so I think this might have been unintentional.  If not, then again
it should go on trunk first.

The patch also undoes a couple of other ordering and whitespace differences.

Tested on x86_64-linux-gnu.  OK for wide-int?

Thanks,
Richard


Index: gcc/c-family/cilk.c
===================================================================
--- gcc/c-family/cilk.c 2013-11-20 13:43:30.896150594 +0000
+++ gcc/c-family/cilk.c 2013-11-20 13:48:38.491410510 +0000
@@ -1208,7 +1208,7 @@ extract_free_variables (tree t, struct w
        int ii = 0;
        if (TREE_CODE (TREE_OPERAND (t, 0)) == INTEGER_CST)
          {
-           len = tree_to_uhwi (TREE_OPERAND (t, 0));
+           len = TREE_INT_CST_LOW (TREE_OPERAND (t, 0));
 
            for (ii = 0; ii < len; ii++)
              extract_free_variables (TREE_OPERAND (t, ii), wd, ADD_READ);
Index: gcc/c/Make-lang.in
===================================================================
--- gcc/c/Make-lang.in  2013-11-20 13:43:30.896150594 +0000
+++ gcc/c/Make-lang.in  2013-11-20 13:48:38.474410604 +0000
@@ -137,3 +137,4 @@ c.stageprofile: stageprofile-start
        -mv c/*$(objext) stageprofile/c
 c.stagefeedback: stagefeedback-start
        -mv c/*$(objext) stagefeedback/c
+
Index: gcc/config/avr/avr.c
===================================================================
--- gcc/config/avr/avr.c        2013-11-20 13:43:30.896150594 +0000
+++ gcc/config/avr/avr.c        2013-11-20 13:48:38.523410332 +0000
@@ -12233,7 +12233,7 @@ avr_fold_builtin (tree fndecl, int n_arg
           }
 
         tmap = wide_int_to_tree (map_type, arg[0]);
-        map = tree_to_uhwi (tmap);
+        map = TREE_INT_CST_LOW (tmap);
 
         if (TREE_CODE (tval) != INTEGER_CST
             && 0 == avr_map_metric (map, MAP_MASK_PREIMAGE_F))
Index: gcc/config/nds32/nds32.c
===================================================================
--- gcc/config/nds32/nds32.c    2013-11-20 13:43:30.896150594 +0000
+++ gcc/config/nds32/nds32.c    2013-11-20 13:48:38.492410505 +0000
@@ -1276,7 +1276,7 @@ nds32_construct_isr_vectors_information
          /* Pick up each vector id value.  */
          id = TREE_VALUE (id_list);
          /* Add vector_number_offset to get actual vector number.  */
-         vector_id = tree_to_uhwi (id) + vector_number_offset;
+         vector_id = TREE_INT_CST_LOW (id) + vector_number_offset;
 
          /* Enable corresponding vector and set function name.  */
          nds32_isr_vectors[vector_id].category = (intr)
@@ -1318,7 +1318,7 @@ nds32_construct_isr_vectors_information
 
       /* The total vectors = interrupt + exception numbers + reset.
          There are 8 exception and 1 reset in nds32 architecture.  */
-      nds32_isr_vectors[0].total_n_vectors = tree_to_uhwi (id) + 8 + 1;
+      nds32_isr_vectors[0].total_n_vectors = TREE_INT_CST_LOW (id) + 8 + 1;
       strcpy (nds32_isr_vectors[0].func_name, func_name);
 
       /* Retrieve nmi and warm function.  */
Index: gcc/cp/parser.c
===================================================================
--- gcc/cp/parser.c     2013-11-20 13:43:30.896150594 +0000
+++ gcc/cp/parser.c     2013-11-20 13:48:38.503410443 +0000
@@ -3804,7 +3804,7 @@ make_string_pack (tree value)
   tree charvec;
   tree argpack = make_node (NONTYPE_ARGUMENT_PACK);
   const char *str = TREE_STRING_POINTER (value);
-  int sz = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (value))));
+  int sz = TREE_INT_CST_LOW (TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (value))));
   int len = TREE_STRING_LENGTH (value) / sz - 1;
   tree argvec = make_tree_vec (2);
 
Index: gcc/cp/vtable-class-hierarchy.c
===================================================================
--- gcc/cp/vtable-class-hierarchy.c     2013-11-20 13:43:30.896150594 +0000
+++ gcc/cp/vtable-class-hierarchy.c     2013-11-20 13:48:38.504410438 +0000
@@ -453,7 +453,7 @@ check_and_record_registered_pairs (tree
     vptr_address = TREE_OPERAND (vptr_address, 0);
 
   if (TREE_OPERAND_LENGTH (vptr_address) > 1)
-    offset = tree_to_uhwi (TREE_OPERAND (vptr_address, 1));
+    offset = TREE_INT_CST_LOW (TREE_OPERAND (vptr_address, 1));
   else
     offset = 0;
 
@@ -876,7 +876,7 @@ output_set_info (tree record_type, vec<t
             vptr_name = IDENTIFIER_POINTER (DECL_NAME (arg0));
 
           if (TREE_CODE (arg1) == INTEGER_CST)
-            vptr_offset = tree_to_uhwi (arg1);
+            vptr_offset = TREE_INT_CST_LOW (arg1);
         }
 
       snprintf (buffer, sizeof (buffer), "%s %s %s + %d\n",
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c     2013-11-20 13:43:30.896150594 +0000
+++ gcc/dwarf2out.c     2013-11-20 13:48:38.509410410 +0000
@@ -15112,7 +15112,7 @@ insert_wide_int (const wide_int &val, un
       return;
     }
 
-  // We'd have to extend this code to support odd sizes.
+  /* We'd have to extend this code to support odd sizes.  */
   gcc_assert (elt_size % (HOST_BITS_PER_WIDE_INT/BITS_PER_UNIT) == 0);
 
   int n = elt_size / (HOST_BITS_PER_WIDE_INT/BITS_PER_UNIT);
Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c    2013-11-20 13:43:30.896150594 +0000
+++ gcc/fold-const.c    2013-11-20 13:48:38.512410393 +0000
@@ -13044,7 +13044,7 @@ fold_binary_loc (location_t loc,
              unsigned HOST_WIDE_INT log2 = tree_log2 (arg01);
              /* If (C2 << C1) doesn't overflow, then ((X >> C1) & C2) != 0
                 can be rewritten as (X & (C2 << C1)) != 0.  */
-             if ((log2 + tree_to_uhwi (arg001)) < prec)
+             if ((log2 + TREE_INT_CST_LOW (arg001)) < prec)
                {
                  tem = fold_build2_loc (loc, LSHIFT_EXPR, itype, arg01, 
arg001);
                  tem = fold_build2_loc (loc, BIT_AND_EXPR, itype, arg000, tem);
@@ -16155,7 +16155,7 @@ fold_read_from_constant_string (tree exp
          && (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (TREE_TYPE (string)))) == 1))
        return build_int_cst_type (TREE_TYPE (exp),
                                   (TREE_STRING_POINTER (string)
-                                   [tree_to_uhwi (index)]));
+                                   [TREE_INT_CST_LOW (index)]));
     }
   return NULL;
 }
Index: gcc/fortran/trans-common.c
===================================================================
--- gcc/fortran/trans-common.c  2013-11-20 13:43:30.896150594 +0000
+++ gcc/fortran/trans-common.c  2013-11-20 13:48:38.512410393 +0000
@@ -400,8 +400,8 @@ build_common_decl (gfc_common_head *com,
        gfc_warning ("Named COMMON block '%s' at %L shall be of the "
                     "same size as elsewhere (%lu vs %lu bytes)", com->name,
                     &com->where,
-                    (unsigned long) tree_to_uhwi (size),
-                    (unsigned long) tree_to_uhwi (DECL_SIZE_UNIT (decl)));
+                    (unsigned long) TREE_INT_CST_LOW (size),
+                    (unsigned long) TREE_INT_CST_LOW (DECL_SIZE_UNIT (decl)));
 
       if (tree_int_cst_lt (DECL_SIZE_UNIT (decl), size))
        {
Index: gcc/fortran/trans-expr.c
===================================================================
--- gcc/fortran/trans-expr.c    2013-11-20 13:43:30.896150594 +0000
+++ gcc/fortran/trans-expr.c    2013-11-20 13:48:38.525410321 +0000
@@ -2645,8 +2645,8 @@ gfc_string_to_single_character (tree len
       && TREE_CODE (TREE_OPERAND (TREE_OPERAND (str, 0), 0)) == STRING_CST
       && array_ref_low_bound (TREE_OPERAND (str, 0))
         == TREE_OPERAND (TREE_OPERAND (str, 0), 1)
-      && tree_to_uhwi (len) > 1
-      && tree_to_uhwi (len)
+      && TREE_INT_CST_LOW (len) > 1
+      && TREE_INT_CST_LOW (len)
         == (unsigned HOST_WIDE_INT)
            TREE_STRING_LENGTH (TREE_OPERAND (TREE_OPERAND (str, 0), 0)))
     {
Index: gcc/genpreds.c
===================================================================
--- gcc/genpreds.c      2013-11-20 13:43:30.896150594 +0000
+++ gcc/genpreds.c      2013-11-20 13:48:38.513410388 +0000
@@ -810,6 +810,7 @@ add_constraint (const char *name, const
     {
       enum rtx_code appropriate_code
        = is_const_int ? CONST_INT : CONST_DOUBLE;
+
       /* Consider relaxing this requirement in the future.  */
       if (regclass
          || GET_CODE (exp) != AND
Index: gcc/gimplify.c
===================================================================
--- gcc/gimplify.c      2013-11-20 13:43:30.896150594 +0000
+++ gcc/gimplify.c      2013-11-20 13:48:38.515410377 +0000
@@ -2642,7 +2642,7 @@ gimple_boolify (tree expr)
       return expr;
 
     case ANNOTATE_EXPR:
-      if ((enum annot_expr_kind) tree_to_uhwi (TREE_OPERAND (expr, 1))
+      if ((enum annot_expr_kind) TREE_INT_CST_LOW (TREE_OPERAND (expr, 1))
          == annot_expr_ivdep_kind)
        {
          TREE_OPERAND (expr, 0) = gimple_boolify (TREE_OPERAND (expr, 0));
Index: gcc/ipa-devirt.c
===================================================================
--- gcc/ipa-devirt.c    2013-11-20 13:43:30.896150594 +0000
+++ gcc/ipa-devirt.c    2013-11-20 13:48:38.515410377 +0000
@@ -209,7 +209,7 @@ hash_type_name (tree t)
 
       if (TREE_CODE (v) == POINTER_PLUS_EXPR)
        {
-         hash = TREE_INT_CST_ELT (TREE_OPERAND (v, 1), 0);
+         hash = TREE_INT_CST_LOW (TREE_OPERAND (v, 1));
          v = TREE_OPERAND (TREE_OPERAND (v, 0), 0);
        }
 
Index: gcc/java/typeck.c
===================================================================
--- gcc/java/typeck.c   2013-11-20 13:43:30.896150594 +0000
+++ gcc/java/typeck.c   2013-11-20 13:48:38.525410321 +0000
@@ -219,7 +219,7 @@ java_array_type_length (tree array_type)
        {
          tree high = TYPE_MAX_VALUE (index_type);
          if (TREE_CODE (high) == INTEGER_CST)
-           return tree_to_uhwi (high) + 1;
+           return TREE_INT_CST_LOW (high) + 1;
        }
     }
   return -1;
Index: gcc/stor-layout.c
===================================================================
--- gcc/stor-layout.c   2013-11-20 13:43:30.896150594 +0000
+++ gcc/stor-layout.c   2013-11-20 13:48:38.516410371 +0000
@@ -1244,7 +1244,7 @@ place_field (record_layout_info rli, tre
       && ! integer_zerop (DECL_SIZE (field))
       && tree_fits_uhwi_p (DECL_SIZE (field))
       /* BUG!!! rli->offset is checked as unsigned but used as signed.   */
-      && tree_fits_shwi_p (rli->offset)
+      && tree_fits_uhwi_p (rli->offset)
       && tree_fits_uhwi_p (TYPE_SIZE (type)))
     {
       unsigned int type_align = TYPE_ALIGN (type);
Index: gcc/targhooks.c
===================================================================
--- gcc/targhooks.c     2013-11-20 13:43:30.896150594 +0000
+++ gcc/targhooks.c     2013-11-20 13:48:38.517410365 +0000
@@ -276,6 +276,7 @@ default_cxx_guard_type (void)
   return long_long_integer_type_node;
 }
 
+
 /* Returns the size of the cookie to use when allocating an array
    whose elements have the indicated TYPE.  Assumes that it is already
    known that a cookie is needed.  */
Index: gcc/tree-pretty-print.c
===================================================================
--- gcc/tree-pretty-print.c     2013-11-20 13:43:30.896150594 +0000
+++ gcc/tree-pretty-print.c     2013-11-20 13:48:38.517410365 +0000
@@ -2118,7 +2118,7 @@ dump_generic_node (pretty_printer *buffe
 
     case ANNOTATE_EXPR:
       pp_string (buffer, "ANNOTATE_EXPR <");
-      switch ((enum annot_expr_kind) tree_to_shwi (TREE_OPERAND (node, 1)))
+      switch ((enum annot_expr_kind) TREE_INT_CST_LOW (TREE_OPERAND (node, 1)))
        {
        case annot_expr_ivdep_kind:
          pp_string (buffer, "ivdep, ");
Index: gcc/tree.c
===================================================================
--- gcc/tree.c  2013-11-20 13:43:30.896150594 +0000
+++ gcc/tree.c  2013-11-20 13:48:38.520410349 +0000
@@ -6993,7 +6993,7 @@ tree_fits_uhwi_p (const_tree t)
 tree_to_shwi (const_tree t)
 {
   gcc_assert (tree_fits_shwi_p (t));
-  return TREE_INT_CST_ELT (t, 0);
+  return TREE_INT_CST_LOW (t);
 }
 
 /* T is an INTEGER_CST whose numerical value (extended according to
@@ -7004,7 +7004,7 @@ tree_to_shwi (const_tree t)
 tree_to_uhwi (const_tree t)
 {
   gcc_assert (tree_fits_uhwi_p (t));
-  return TREE_INT_CST_ELT (t, 0);
+  return TREE_INT_CST_LOW (t);
 }
 
 /* Return the most significant (sign) bit of T.  */
@@ -9575,8 +9575,8 @@ build_common_tree_nodes (bool signed_cha
      may be larger than char depending on the value of BOOL_TYPE_SIZE.  */
   boolean_type_node = make_unsigned_type (BOOL_TYPE_SIZE);
   TREE_SET_CODE (boolean_type_node, BOOLEAN_TYPE);
-  TYPE_PRECISION (boolean_type_node) = 1;
   TYPE_MAX_VALUE (boolean_type_node) = build_int_cst (boolean_type_node, 1);
+  TYPE_PRECISION (boolean_type_node) = 1;
 
   /* Define what type to use for size_t.  */
   if (strcmp (SIZE_TYPE, "unsigned int") == 0)
Index: gcc/tree.h
===================================================================
--- gcc/tree.h  2013-11-20 13:43:30.896150594 +0000
+++ gcc/tree.h  2013-11-20 13:48:38.521410343 +0000
@@ -3697,14 +3697,14 @@ extern inline __attribute__ ((__gnu_inli
 tree_to_shwi (const_tree t)
 {
   gcc_assert (tree_fits_shwi_p (t));
-  return TREE_INT_CST_ELT (t, 0);
+  return TREE_INT_CST_LOW (t);
 }
 
 extern inline __attribute__ ((__gnu_inline__)) unsigned HOST_WIDE_INT
 tree_to_uhwi (const_tree t)
 {
   gcc_assert (tree_fits_uhwi_p (t));
-  return TREE_INT_CST_ELT (t, 0);
+  return TREE_INT_CST_LOW (t);
 }
 #endif
 extern int tree_int_cst_sgn (const_tree);

Reply via email to