From 7c06f565759c2130b55a011ea4cfff278907bda0 Mon Sep 17 00:00:00 2001 From: Roger Sayle Date: Mon, 13 Nov 2006 23:02:41 +0000 Subject: [PATCH] fold-const.c (optimize_bit_field_compare): Recursively call fold when simplifying non-constant comparisons between bit-fields. * fold-const.c (optimize_bit_field_compare): Recursively call fold when simplifying non-constant comparisons between bit-fields. From-SVN: r118783 --- gcc/ChangeLog | 5 +++++ gcc/fold-const.c | 22 +++++++++++++--------- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 45098d95c0f..965a9cf2281 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2006-11-13 Roger Sayle + + * fold-const.c (optimize_bit_field_compare): Recursively call + fold when simplifying non-constant comparisons between bit-fields. + 2006-11-13 Jakub Jelinek * configure.ac: Add changequote around __LONG_DOUBLE_MATH_OPTIONAL diff --git a/gcc/fold-const.c b/gcc/fold-const.c index c986503f106..fe7ec587204 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -3441,15 +3441,19 @@ optimize_bit_field_compare (enum tree_code code, tree compare_type, if (! const_p) /* If not comparing with constant, just rework the comparison and return. */ - return build2 (code, compare_type, - build2 (BIT_AND_EXPR, unsigned_type, - make_bit_field_ref (linner, unsigned_type, - nbitsize, nbitpos, 1), - mask), - build2 (BIT_AND_EXPR, unsigned_type, - make_bit_field_ref (rinner, unsigned_type, - nbitsize, nbitpos, 1), - mask)); + return fold_build2 (code, compare_type, + fold_build2 (BIT_AND_EXPR, unsigned_type, + make_bit_field_ref (linner, + unsigned_type, + nbitsize, nbitpos, + 1), + mask), + fold_build2 (BIT_AND_EXPR, unsigned_type, + make_bit_field_ref (rinner, + unsigned_type, + nbitsize, nbitpos, + 1), + mask)); /* Otherwise, we are handling the constant case. See if the constant is too big for the field. Warn and return a tree of for 0 (false) if so. We do