fold-const.c (fold_truthop): Verify that the lhs and rhs are in the same bit position...
authorCharles M. Hannum <root@ihack.net>
Fri, 26 Mar 1999 01:08:54 +0000 (18:08 -0700)
committerJeff Law <law@gcc.gnu.org>
Fri, 26 Mar 1999 01:08:54 +0000 (18:08 -0700)
       * 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

gcc/ChangeLog
gcc/fold-const.c

index 92d0f80ae51656981726f2b06a423b5cda123cec..148c660201e2821ca5ba5192668162704de953f7 100644 (file)
@@ -1,3 +1,9 @@
+Fri Mar 26 01:59:15 1999  "Charles M. Hannum" <root@ihack.net>
+
+       * 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  <loewis@informatik.hu-berlin.de>
 
        * gcc.texi (Copy Assignment): New node.
index 1e7bd195ab492fe6a149dd3606e5d843921da5bd..78d7e41f8e37f338f98779703a06b77ab6001b8c 100644 (file)
@@ -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);