[InstCombine] ctpop(X) ^ ctpop(Y) & 1 --> ctpop(X^Y) & 1 (PR50094)
authorDávid Bolvanský <david.bolvansky@gmail.com>
Tue, 4 May 2021 11:15:13 +0000 (13:15 +0200)
committerDávid Bolvanský <david.bolvansky@gmail.com>
Tue, 4 May 2021 11:16:18 +0000 (13:16 +0200)
commit80b897e21bf0ac56b04d415cf9bf671f81a84416
tree7c69ec0f922c61176758fe1cefc063288c7bebb8
parentc2e9baf2e8dafe92f57fe4171d4b6a5f50d5999e
[InstCombine] ctpop(X) ^ ctpop(Y) & 1 --> ctpop(X^Y) & 1 (PR50094)

Original pattern: (__builtin_parity(x) ^ __builtin_parity(y))

LLVM rewrites it as: (__builtin_popcount(x) ^ __builtin_popcount(y)) & 1

Optimized form:  __builtin_popcount(X^Y) & 1

Alive proof: https://alive2.llvm.org/ce/z/-GdWFr

Reviewed By: RKSimon

Differential Revision: https://reviews.llvm.org/D101802
llvm/lib/Transforms/InstCombine/InstCombineSimplifyDemanded.cpp
llvm/test/Transforms/InstCombine/ctpop.ll