[PATCH] D55935: [X86][SSE] Canonicalize OR(AND(X, C), AND(Y, ~C)) -> OR(AND(X, C), ANDNP(C, Y))
Sanjay Patel via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sun Dec 23 10:21:21 PST 2018
spatel added a comment.
Would we better off doing a generic DAGCombine into the optimal xor-and-xor (aka, masked merge) pattern?
(x & C) | (y & ~C) --> ((x ^ y) & C) ^ y
That should allow load folding of the constant, so it never burns a register to hold the constant.
We weren't allowed to do that transform with a variable mask in D46814 <https://reviews.llvm.org/D46814> because:
http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20180528/556578.html
But I think that's ok with a constant mask. We can't accidentally dynamically access an undef value when the mask is a constant.
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55935/new/
https://reviews.llvm.org/D55935
More information about the llvm-commits
mailing list