From d990677336b2fdbfeeb9d9dcdf65e2a73ba1b337 Mon Sep 17 00:00:00 2001 From: ebotcazou Date: Mon, 14 May 2012 08:46:33 +0000 Subject: * 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. : Skip calls to internal functions. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@187450 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/stor-layout.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'gcc/stor-layout.c') 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) -- cgit v1.2.1