From 10b8fa2ed23366f5a9224a050db24b5f9d1236ab Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Tue, 23 Sep 2014 18:08:16 +0200 Subject: [PATCH] tree.h (int_bit_position): Turn into inline function; implement using wide int. * tree.h (int_bit_position): Turn into inline function; implement using wide int. * tree.c (int_bit_position): Remove. From-SVN: r215518 --- gcc/ChangeLog | 6 ++++++ gcc/tree.c | 10 ---------- gcc/tree.h | 11 ++++++++++- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 991cc555a11..a8bff8f5acd 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2014-09-23 Jan Hubicka + + * tree.h (int_bit_position): Turn into inline function; + implement using wide int. + * tree.c (int_bit_position): Remove. + 2014-09-23 Richard Sandiford PR bootstrap/63280 diff --git a/gcc/tree.c b/gcc/tree.c index 83df030b8ad..5f337179051 100644 --- a/gcc/tree.c +++ b/gcc/tree.c @@ -2831,16 +2831,6 @@ bit_position (const_tree field) return bit_from_pos (DECL_FIELD_OFFSET (field), DECL_FIELD_BIT_OFFSET (field)); } - -/* Likewise, but return as an integer. It must be representable in - that way (since it could be a signed value, we don't have the - option of returning -1 like int_size_in_byte can. */ - -HOST_WIDE_INT -int_bit_position (const_tree field) -{ - return tree_to_shwi (bit_position (field)); -} /* Return the byte position of FIELD, in bytes from the start of the record. This is a tree of type sizetype. */ diff --git a/gcc/tree.h b/gcc/tree.h index 93a12d40340..14086f00539 100644 --- a/gcc/tree.h +++ b/gcc/tree.h @@ -3877,7 +3877,6 @@ extern tree size_in_bytes (const_tree); extern HOST_WIDE_INT int_size_in_bytes (const_tree); extern HOST_WIDE_INT max_int_size_in_bytes (const_tree); extern tree bit_position (const_tree); -extern HOST_WIDE_INT int_bit_position (const_tree); extern tree byte_position (const_tree); extern HOST_WIDE_INT int_byte_position (const_tree); @@ -4797,4 +4796,14 @@ extern tree get_inner_reference (tree, HOST_WIDE_INT *, HOST_WIDE_INT *, EXP, an ARRAY_REF or an ARRAY_RANGE_REF. */ extern tree array_ref_low_bound (tree); +/* Like bit_position, but return as an integer. It must be representable in + that way (since it could be a signed value, we don't have the + option of returning -1 like int_size_in_byte can. */ + +inline HOST_WIDE_INT +int_bit_position (const_tree field) +{ + return (wi::lshift (wi::to_offset (DECL_FIELD_OFFSET (field)), BITS_PER_UNIT_LOG) + + wi::to_offset (DECL_FIELD_BIT_OFFSET (field))).to_shwi (); +} #endif /* GCC_TREE_H */