]> gcc.gnu.org Git - gcc.git/commitdiff
*** empty log message ***
authorRichard Stallman <rms@gnu.org>
Sun, 10 May 1992 01:56:55 +0000 (01:56 +0000)
committerRichard Stallman <rms@gnu.org>
Sun, 10 May 1992 01:56:55 +0000 (01:56 +0000)
From-SVN: r951

gcc/fold-const.c

index 2b39c1153e5365b3d27946bdd4c88d6b1b0f0810..75f5c18eee11e36ee437b390107ac5d9f2b5971b 100644 (file)
@@ -2027,24 +2027,26 @@ optimize_bit_field_compare (code, compare_type, lhs, rhs)
   int lvolatilep = 0, rvolatilep = 0;
   tree linner, rinner;
   tree mask;
+  tree offset;
 
   /* Get all the information about the extractions being done.  If the bit size
      if the same as the size of the underlying object, we aren't doing an
      extraction at all and so can do nothing.  */
-  linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &lmode,
+  linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
                                &lunsignedp, &lvolatilep);
-  if (lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0)
+  if (lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
+      || offset != 0)
     return 0;
 
  if (!const_p)
    {
      /* If this is not a constant, we can only do something if bit positions,
        sizes, and signedness are the same.   */
-     rinner = get_inner_reference (rhs, &rbitsize, &rbitpos,
+     rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset,
                                   &rmode, &runsignedp, &rvolatilep);
 
      if (lbitpos != rbitpos || lbitsize != rbitsize
-        || lunsignedp != runsignedp)
+        || lunsignedp != runsignedp || offset != 0)
        return 0;
    }
 
@@ -2204,6 +2206,7 @@ decode_field_reference (exp, pbitsize, pbitpos, pmode, punsignedp,
 {
   tree mask = 0;
   tree inner;
+  tree offset;
 
   STRIP_NOPS (exp);
 
@@ -2220,9 +2223,9 @@ decode_field_reference (exp, pbitsize, pbitpos, pmode, punsignedp,
       && TREE_CODE (exp) != BIT_FIELD_REF)
     return 0;
 
-  inner = get_inner_reference (exp, pbitsize, pbitpos, pmode,
+  inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
                               punsignedp, pvolatilep);
-  if (*pbitsize < 0)
+  if (*pbitsize < 0 || offset != 0)
     return 0;
   
   if (mask == 0)
This page took 0.065139 seconds and 5 git commands to generate.