aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorAndrew Pinski <apinski@marvell.com>2023-07-10 21:53:24 -0700
committerAndrew Pinski <quic_apinski@quicinc.com>2023-12-11 07:42:58 -0800
commit4eaaf7f5a378e81bbcd180cb10bf58726a68f229 (patch)
treeb8ad285f868b2eadfdd2e04647978058cfb7e84d /gcc
parentacbfb8b9495b802e414e6ab94b810ef7b0c8aa1d (diff)
downloadgcc-4eaaf7f5a378e81bbcd180cb10bf58726a68f229.zip
gcc-4eaaf7f5a378e81bbcd180cb10bf58726a68f229.tar.gz
gcc-4eaaf7f5a378e81bbcd180cb10bf58726a68f229.tar.bz2
analyzer: Remove check of unsigned_char in maybe_undo_optimize_bit_field_compare.
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.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/analyzer/region-model-manager.cc3
1 files changed, 0 insertions, 3 deletions
diff --git a/gcc/analyzer/region-model-manager.cc b/gcc/analyzer/region-model-manager.cc
index b631bcb..26c34e3 100644
--- a/gcc/analyzer/region-model-manager.cc
+++ b/gcc/analyzer/region-model-manager.cc
@@ -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