On Tue, 8 Jul 2025 10:21:03 GMT, erifan <d...@openjdk.org> wrote: >>> predicate cannot be negated AND the vector is all ones. Can you explain >>> this condition? >> >> Ok, I'll add a comment for it. >> >>> Why do you guard against VectorNode::is_all_ones_vector(in2) at all? >> >> Because one of the nodes in the supported patterns by this PR needs to be >> `MaskAll` or `Replicate`. And this function `VectorNode::is_all_ones_vector` >> just meets our check for `MaskAll` and `Replicate`. Actually I don't quite >> understand your question. I have two understandings: >> 1. Not all nodes that `VectorNode::is_all_ones_vector` returns true are >> `MaskAll` or `Replicate`, but other nodes that do not meet the conditions. >> 2. Here, it does not need to be a vector with every bit 1, it only needs to >> be an `all true` mask. >> >> Which one do you mean? Or something else? Thanks~ > > The purpose of this PR is optimizing the following kinds of patterns: > > XXXVector va, vb; > va.compare(EQ, vb).not() > > And the generated IR of `va.compare(EQ, vb).not()` is `(XorVMask > (VectorMaskCmp va vb EQ) (MaskAll -1))`. On platforms like aarch64 NEON, > `MaskAll` is `Replicate`. And `MaskAll` and `Replicate` are both all ones > vectors, so we do this check `VectorNode::is_all_ones_vector(in2)`
Oh wow, my bad. I misunderstood the brackets! Instead of: !(in1->as_VectorMaskCmp())->predicate_can_be_negated() || !VectorNode::is_all_ones_vector(in2)) { I read: !(in1->as_VectorMaskCmp()->predicate_can_be_negated() || !VectorNode::is_all_ones_vector(in2))) { That confused me a lot... absolutely my bad. Well actually then my indentation suggestion was terrible! ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24674#discussion_r2192261081