On Tue, 4 Apr 2023 13:24:18 GMT, Quan Anh Mai <qa...@openjdk.org> wrote:
>> `Vector::slice` is a method at the top-level class of the Vector API that >> concatenates the 2 inputs into an intermediate composite and extracts a >> window equal to the size of the inputs into the result. It is used in vector >> conversion methods where the part number is not 0 to slice the parts to the >> correct positions. Slicing is also used in text processing such as utf8 and >> utf16 validation. x86 starting from SSSE3 has `palignr` which does vector >> slicing very efficiently. As a result, I think it is beneficial to add a C2 >> node for this operation as well as intrinsify `Vector::slice` method. >> >> A slice is currently implemented as >> `v2.rearrange(iota).blend(v1.rearrange(iota), blendMask)` which requires >> preparation of the index vector and the blending mask. Even with the >> preparations being hoisted out of the loops, microbenchmarks show >> improvement using the slice instrinsics. Some have tremendous increases in >> throughput due to the limitation that a mask of length 2 cannot currently be >> intrinsified, leading to falling back to the Java implementations. >> >> Please take a look and have some reviews. Thank you very much. > > Quan Anh Mai has updated the pull request incrementally with one additional > commit since the last revision: > > add identity, fix flags test/hotspot/jtreg/compiler/vectorapi/TestVectorSlice.java line 327: > 325: > 326: @Test > 327: @IR(counts = {IRNode.VECTOR_SLICE, "7"}, applyIfCPUFeature = > {"sse2", "true"}) How about separating the special cases (i.e. origin is `0/VLENGTH`), and using the `FailOn` check instead on them? Tests are more accurate. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/12909#discussion_r1159208577