tree.h (int_bit_position): Turn into inline function; implement using wide int.
authorJan Hubicka <hubicka@ucw.cz>
Tue, 23 Sep 2014 16:08:16 +0000 (18:08 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Tue, 23 Sep 2014 16:08:16 +0000 (16:08 +0000)
* tree.h (int_bit_position): Turn into inline function;
implement using wide int.
* tree.c (int_bit_position): Remove.

From-SVN: r215518

gcc/ChangeLog
gcc/tree.c
gcc/tree.h

index 991cc555a116494a424b7f2e242068f1ac8cbb1c..a8bff8f5acd860d123f338776913e800ff901f8b 100644 (file)
@@ -1,3 +1,9 @@
+2014-09-23  Jan Hubicka  <hubicka@ucw.cz>
+
+       * tree.h (int_bit_position): Turn into inline function;
+       implement using wide int.
+       * tree.c (int_bit_position): Remove.
+
 2014-09-23  Richard Sandiford  <richard.sandiford@arm.com>
 
        PR bootstrap/63280
index 83df030b8ad8214327b10baacf4bf57629cd1f5f..5f3371790514fbf8bf92734ae08e525057a71a52 100644 (file)
@@ -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));
-}
 \f
 /* Return the byte position of FIELD, in bytes from the start of the record.
    This is a tree of type sizetype.  */
index 93a12d403402ecacfe039cd8fdd8ba28eb2cd7a7..14086f005391e1acce4c80442e1451e21b96d694 100644 (file)
@@ -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  */