diff options
author | Andrew Pinski <apinski@marvell.com> | 2023-07-10 21:53:24 -0700 |
---|---|---|
committer | Andrew Pinski <quic_apinski@quicinc.com> | 2023-12-11 07:42:58 -0800 |
commit | 4eaaf7f5a378e81bbcd180cb10bf58726a68f229 (patch) | |
tree | b8ad285f868b2eadfdd2e04647978058cfb7e84d /gcc | |
parent | acbfb8b9495b802e414e6ab94b810ef7b0c8aa1d (diff) | |
download | gcc-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.cc | 3 |
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 |