From: Charles M. Hannum Date: Fri, 26 Mar 1999 01:08:54 +0000 (-0700) Subject: fold-const.c (fold_truthop): Verify that the lhs and rhs are in the same bit position... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=142413745029dfc6147595a843ed06b4b2d2c4ce;p=gcc.git fold-const.c (fold_truthop): Verify that the lhs and rhs are in the same bit position when... * fold-const.c (fold_truthop): Verify that the lhs and rhs are in the same bit position when optimizing bitfield references which have the same mask. From-SVN: r25993 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 92d0f80ae51..148c660201e 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +Fri Mar 26 01:59:15 1999 "Charles M. Hannum" + + * fold-const.c (fold_truthop): Verify that the lhs and rhs are + in the same bit position when optimizing bitfield references + which have the same mask. + Thu Mar 25 22:53:27 1999 Martin von Löwis * gcc.texi (Copy Assignment): New node. diff --git a/gcc/fold-const.c b/gcc/fold-const.c index 1e7bd195ab4..78d7e41f8e3 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3934,11 +3934,13 @@ fold_truthop (code, truth_type, lhs, rhs) /* Make a mask that corresponds to both fields being compared. Do this for both items being compared. If the masks agree, + and the bits being compared are in the same position, then we can do this by masking both and comparing the masked results. */ ll_mask = const_binop (BIT_IOR_EXPR, ll_mask, rl_mask, 0); lr_mask = const_binop (BIT_IOR_EXPR, lr_mask, rr_mask, 0); - if (operand_equal_p (ll_mask, lr_mask, 0) && lnbitsize == rnbitsize) + if (operand_equal_p (ll_mask, lr_mask, 0) + && lnbitsize == rnbitsize && xll_bitpos == xlr_bitpos) { lhs = make_bit_field_ref (ll_inner, type, lnbitsize, lnbitpos, ll_unsignedp || rl_unsignedp);