]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
analyzer: Remove check of unsigned_char in maybe_undo_optimize_bit_field_compare.
authorAndrew Pinski <apinski@marvell.com>
Tue, 11 Jul 2023 04:53:24 +0000 (21:53 -0700)
committerAndrew Pinski <quic_apinski@quicinc.com>
Mon, 11 Dec 2023 15:42:58 +0000 (07:42 -0800)
The check for the type seems unnecessary and gets in the way sometimes.
Also with a patch I am working on for match.pd, it causes a failure to happen.
Before my patch the IR was:
  _1 = BIT_FIELD_REF <s, 8, 16>;
  _2 = _1 & 1;
  _3 = _2 != 0;
  _4 = (int) _3;
  __analyzer_eval (_4);

Where _2 was an unsigned char type.
And After my patch we have:
  _1 = BIT_FIELD_REF <s, 8, 16>;
  _2 = (int) _1;
  _3 = _2 & 1;
  __analyzer_eval (_3);

But in this case, the BIT_AND_EXPR is in an int type.

OK? Bootstrapped and tested on x86_64-linux-gnu with no regressions.

gcc/analyzer/ChangeLog:

* region-model-manager.cc (maybe_undo_optimize_bit_field_compare): Remove
the check for type being unsigned_char_type_node.

gcc/analyzer/region-model-manager.cc

index b631bcb04d041b75d41a6568aa24b023ead91530..26c34e38875dee616fc727b0f02dea1b875d9dcd 100644 (file)
@@ -596,9 +596,6 @@ maybe_undo_optimize_bit_field_compare (tree type,
                                       tree cst,
                                       const svalue *arg1)
 {
-  if (type != unsigned_char_type_node)
-    return NULL;
-
   const binding_map &map = compound_sval->get_map ();
   unsigned HOST_WIDE_INT mask = TREE_INT_CST_LOW (cst);
   /* If "mask" is a contiguous range of set bits, see if the