summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2014-09-23 16:08:16 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2014-09-23 16:08:16 +0000
commit40110b5a507c6db23c146473e2de6c78c2fac3a0 (patch)
treeedac9be42c0dfb8002518876a201a76bdd0d3e7f
parent280b3a05edfbae5dd5ee3cf4713ec73eae240e4c (diff)
downloadgcc-40110b5a507c6db23c146473e2de6c78c2fac3a0.tar.gz
* tree.h (int_bit_position): Turn into inline function;
implement using wide int. * tree.c (int_bit_position): Remove. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@215518 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/tree.c10
-rw-r--r--gcc/tree.h11
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 <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
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 */