On Thu, 1 Apr 2021 03:39:43 GMT, Xiaohong Gong <xg...@openjdk.org> wrote:
>> Currently "VectorMask.andNot()" is not vectorized: >> public VectorMask<E> andNot(VectorMask<E> m) { >> // FIXME: Generate good code here. >> return bOp(m, (i, a, b) -> a && !b); >> } >> This can be implemented with` "and(m.not())" `directly. Since >> `"VectorMask.and()/not()" `have been vectorized in hotspot, `"andNot"` >> can be vectorized as well by calling them. >> >> The performance gain is >100% for such a simple JMH: >> @Benchmark >> public Object andNot(Blackhole bh) { >> boolean[] mask = fm.apply(SPECIES.length()); >> boolean[] r = fmt.apply(SPECIES.length()); >> VectorMask<Byte> rm = VectorMask.fromArray(SPECIES, r, 0); >> >> for (int ic = 0; ic < INVOC_COUNT; ic++) { >> for (int i = 0; i < mask.length; i += SPECIES.length()) { >> VectorMask<Byte> vmask = VectorMask.fromArray(SPECIES, mask, i); >> rm = rm.andNot(vmask); >> } >> } >> return rm; >> } > > Xiaohong Gong has updated the pull request incrementally with one additional > commit since the last revision: > > Move the changing to AbstractMask.andNot and revert changes in VectorMask > > Change-Id: Ie3ec8f53cb24526c8e1ccc68038355d024910818 > CustomizedGitHooks: yes LGTM ------------- Marked as reviewed by njian (Committer). PR: https://git.openjdk.java.net/jdk/pull/3211