]> git.ipfire.org Git - thirdparty/gcc.git/commit
Remove some duplicates reported by genmatch
authorRichard Biener <rguenther@suse.de>
Thu, 5 Dec 2024 12:24:27 +0000 (13:24 +0100)
committerRichard Biener <rguenth@gcc.gnu.org>
Fri, 6 Dec 2024 09:29:08 +0000 (10:29 +0100)
commit1c07f7a1b45b3d6f46cb25f3bf068d94fe4131e8
treeafb32d46b00c7e45a95a6101e34535c5f93fde12
parentfeea589d78fd5ebe1c02cf937e184d2c66cd99ed
Remove some duplicates reported by genmatch

genmatch currently has a difficulty to decide whether a duplicate
structural match is really duplicate as uses of captures within
predicates or in C code can be order dependent.  For example
a reported duplicate results in

 {
   tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p0, _q20, _q21 }
   if (gimple_simplify_112 (res_op, seq, valueize, type, captures))
     return true;
 }
 {
   tree captures[4] ATTRIBUTE_UNUSED = { _p1, _p0, _q21, _q20 };
   if (gimple_simplify_112 (res_op, seq, valueize, type, captures))
     return true;
 }

where the difference is only in _q20 and _q21 being swapped but
that resulting in a call to bitwise_inverted_equal_p (_p1, X)
with X once _q20 and once _q21.  That is, we treat bare
captures as equal for reporting duplicates.

Due to bitwise_inverted_equal_p there are meanwhile a _lot_ of
duplicates reported that are not actual duplicates.

The following removes some that are though, as the operands are
only passed to types_match.

* match.pd (.SAT_ADD patterns using IFN_ADD_OVERFLOW): Remove :c that
only causes duplicate patterns.
gcc/match.pd