On Thu, Sep 11, 2025 at 3:16 PM Matteo Nicoli
<
[email protected]> wrote:
I am writing this follow-up email to specify that I executed the tests contained in this patch on aarch64-arm64-linux-gnu
The changelog part of the commit message is formatted wrongly.
* gcc/match.pd: added the following optimizations for bitwise operations:
- (a != b) & ((a|b) != 0) -> (a != b)
all lines should be indented exactly by 1 tab, the 'gcc/' part is
superfluous, it
should be just '* match.pd'
* gcc.dg/int-bwise-opt-1.c: Tests the following optimisation patterns:
- (a != b) & ((a|b) != 0) -> (a != b)
Likewise for the indenting.
+(simplify
+ (bit_and:c (ne:c @0 @1) (ne:c (bit_ior @0 @1) integer_zerop))
+ (ne:c @0 @1))
The ':c' on the != 0 is superfluous. Canonicalization guarantees constants
are ordered second. The :c on the simplification result is useless. So:
(simplify
(bit_and:c (ne:c @0 @1) (ne (bit_ior @0 @1) integer_zerop))
(ne @0 @1))
+(simplify
+ (bit_and:c (ne:c @0 @1) (eq:c (bit_ior @0 @1) integer_zerop))
+ { integer_zero_node; })
+(simplify
+ (bit_ior:c (eq:c @0 @1) (ne:c (bit_ior @0 @1) integer_zerop))
+ { integer_one_node; })
Using integer_zero/one_node is wrong, you should use
build_zero_cst (type); and build_one_cst (type) instead to get
appropriately typed results. This probably means you do not have
coverage for these cases.
Otherwise this looks OK to me.
Thanks,
Richard.
Best regards,
Matteo
On Sep 9, 2025, at 10:39 PM, Matteo Nicoli <[email protected]> wrote:
Dear reviewers,
I attached the patch for this Bugzilla issue: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117760
I also attached an SMT file for the formal verifications of these properties. At the bottom of the file I pasted its output (executed with Z3).
Best regards,
Matteo
<117760.smt2>
<tree-optimization-117760.patch>