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);