diff options
author | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-14 08:46:33 +0000 |
---|---|---|
committer | ebotcazou <ebotcazou@138bc75d-0d04-0410-961f-82ee72b054a4> | 2012-05-14 08:46:33 +0000 |
commit | d990677336b2fdbfeeb9d9dcdf65e2a73ba1b337 (patch) | |
tree | 24a9b1d109a3426404acbce3f2ac87147420a614 /gcc/stor-layout.c | |
parent | 929a56fc2d27fbb4c07e7e13486f4da01849e8ee (diff) | |
download | gcc-d990677336b2fdbfeeb9d9dcdf65e2a73ba1b337.tar.gz |
* stor-layout.c (bit_from_pos): Distribute conversion to bitsizetype
into a PLUS_EXPR byte offset.
* tree-ssa-pre.c (can_value_number_call): Delete.
(compute_avail): Skip all statements with side effects.
<GIMPLE_CALL>: Skip calls to internal functions.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187450 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/stor-layout.c')
-rw-r--r-- | gcc/stor-layout.c | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/gcc/stor-layout.c b/gcc/stor-layout.c index cb47a52b715..a592bda5c23 100644 --- a/gcc/stor-layout.c +++ b/gcc/stor-layout.c @@ -786,25 +786,29 @@ start_record_layout (tree t) } /* Return the combined bit position for the byte offset OFFSET and the - bit position BITPOS. */ + bit position BITPOS. + + These functions operate on byte and bit positions present in FIELD_DECLs + and assume that these expressions result in no (intermediate) overflow. + This assumption is necessary to fold the expressions as much as possible, + so as to avoid creating artificially variable-sized types in languages + supporting variable-sized types like Ada. */ tree bit_from_pos (tree offset, tree bitpos) { + if (TREE_CODE (offset) == PLUS_EXPR) + offset = size_binop (PLUS_EXPR, + fold_convert (bitsizetype, TREE_OPERAND (offset, 0)), + fold_convert (bitsizetype, TREE_OPERAND (offset, 1))); + else + offset = fold_convert (bitsizetype, offset); return size_binop (PLUS_EXPR, bitpos, - size_binop (MULT_EXPR, - fold_convert (bitsizetype, offset), - bitsize_unit_node)); + size_binop (MULT_EXPR, offset, bitsize_unit_node)); } /* Return the combined truncated byte position for the byte offset OFFSET and - the bit position BITPOS. - - These functions operate on byte and bit positions as present in FIELD_DECLs - and assume that these expressions result in no (intermediate) overflow. - This assumption is necessary to fold the expressions as much as possible, - so as to avoid creating artificially variable-sized types in languages - supporting variable-sized types like Ada. */ + the bit position BITPOS. */ tree byte_from_pos (tree offset, tree bitpos) |