On 5/10/23 15:53, Roger Sayle wrote:

This patch teaches match.pd to simplify popcount(X&Y)+popcount(X|Y) as
popcount(X)+popcount(Y), and the related simplifications that
popcount(X)+popcount(Y)-popcount(X&Y) is popcount(X|Y).  As surprising
as it might seem, this idiom is common in cheminformatics codes
(for Tanimoto coefficient calculations).
I'd read the ChangeLog before reading this paragraph. My first thought was "will these ever be useful". Thanks for referring back to real code as a justification.


This patch has been tested on x86_64-pc-linux-gnu with make bootstrap
and make -k check, both with and without --target_board=unix{-m32}, with
no new failures.  Ok for mainline?


2023-05-10  Roger Sayle  <ro...@nextmovesoftware.com>

gcc/ChangeLog
        * match.pd <popcount optimizations>: Simplify popcount(X|Y) +
        popcount(X&Y) as popcount(X)+popcount(Y).  Likewise, simplify
        popcount(X)+popcount(Y)-popcount(X&Y) as popcount(X|Y), and
        vice versa.

gcc/testsuite/ChangeLog
        * gcc.dg/fold-popcount-8.c: New test case.
        * gcc.dg/fold-popcount-9.c: Likewise.
        * gcc.dg/fold-popcount-10.c: Likewise.
OK.
jeff

Reply via email to