diff options
author | Richard Kenner <kenner@gcc.gnu.org> | 1993-10-13 15:14:21 -0400 |
---|---|---|
committer | Richard Kenner <kenner@gcc.gnu.org> | 1993-10-13 15:14:21 -0400 |
commit | 9f5e873c8f495c56a0a59ceefdb31c5d3453de08 (patch) | |
tree | a1ffd451494415c01fcc360a4b3b4cc1076e5bb5 /gcc | |
parent | 49d3ca5c88c8d002bc7fc61247694a2e45671b36 (diff) | |
download | gcc-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.c | 6 |
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) |