aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Kenner <kenner@gcc.gnu.org>1993-10-13 15:14:21 -0400
committerRichard Kenner <kenner@gcc.gnu.org>1993-10-13 15:14:21 -0400
commit9f5e873c8f495c56a0a59ceefdb31c5d3453de08 (patch)
treea1ffd451494415c01fcc360a4b3b4cc1076e5bb5 /gcc
parent49d3ca5c88c8d002bc7fc61247694a2e45671b36 (diff)
downloadgcc-9f5e873c8f495c56a0a59ceefdb31c5d3453de08.zip
gcc-9f5e873c8f495c56a0a59ceefdb31c5d3453de08.tar.gz
gcc-9f5e873c8f495c56a0a59ceefdb31c5d3453de08.tar.bz2
(optimize_bit_field_compare, decode_field_reference): Don't do
anything if get_inner_reference returned its argument. From-SVN: r5773
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fold-const.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index 4e6aad4..a08e7ca 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -2307,7 +2307,7 @@ optimize_bit_field_compare (code, compare_type, lhs, rhs)
extraction at all and so can do nothing. */
linner = get_inner_reference (lhs, &lbitsize, &lbitpos, &offset, &lmode,
&lunsignedp, &lvolatilep);
- if (lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
+ if (linner == lhs || lbitsize == GET_MODE_BITSIZE (lmode) || lbitsize < 0
|| offset != 0)
return 0;
@@ -2318,7 +2318,7 @@ optimize_bit_field_compare (code, compare_type, lhs, rhs)
rinner = get_inner_reference (rhs, &rbitsize, &rbitpos, &offset,
&rmode, &runsignedp, &rvolatilep);
- if (lbitpos != rbitpos || lbitsize != rbitsize
+ if (rinner == rhs || lbitpos != rbitpos || lbitsize != rbitsize
|| lunsignedp != runsignedp || offset != 0)
return 0;
}
@@ -2510,7 +2510,7 @@ decode_field_reference (exp, pbitsize, pbitpos, pmode, punsignedp,
inner = get_inner_reference (exp, pbitsize, pbitpos, &offset, pmode,
punsignedp, pvolatilep);
- if (*pbitsize < 0 || offset != 0)
+ if (inner == exp || *pbitsize < 0 || offset != 0)
return 0;
if (mask == 0)