On Wed, 2 Mar 2022 02:50:27 GMT, Xiaohong Gong <xg...@openjdk.org> wrote:
> The vector `"test"` api is implemented with vector `"compare"`. And the > masked `"test" `is implemented with `"test(op).and(m)"` which means > `"compare().and(m)"` finally. Since the masked vector `"compare"` has been > optimized with predicated instruction for archituctures that support the > feature, the masked `"test"` can also be optimized by implementing it with > the predicated compare. This could save the additional ` "and"` for > architectures that support the predicate feature. > > This patch optimized the masked `"test"` by implementing it with masked > `"compare"`. With this patch, the following codes for the` "IS_NEGATIVE"` op > for a DoubleVector with SVE: > > mov z19.d, #0 > cmpgt p1.d, p7/z, z19.d, z17.d > and p0.b, p7/z, p1.b, p0.b > > are optimized to: > > mov z19.d, #0 > cmpgt p0.d, p0/z, z19.d, z17.d > > Also update the jtreg tests for masked` "test" ` to make sure they are hot > enough to be compiled by c2. src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java line 1737: > 1735: <M1 extends VectorMask<Double>, > 1736: M2 extends VectorMask<Long>> > 1737: M1 testTemplate(Class<M1> maskType, Test op, M2 mask) { Can we simplify by making some code FP specific? - the mask `cast` can be applied in this method rather than in the caller, simplifying the signature - for clarify, vector `viewAsIntegralLanes` is only needed for FP (update would be required for the non-mask template). src/jdk.incubator.vector/share/classes/jdk/incubator/vector/DoubleVector.java line 1766: > 1764: throw new AssertionError(op); > 1765: } > 1766: return maskType.cast(m.cast(this.vspecies())); Suggestion: return maskType.cast(m.cast(vsp)); Same for non-mask template too. test/jdk/jdk/incubator/vector/templates/Unit-Test.template line 29: > 27: VectorMask<$Wideboxtype$> vmask = VectorMask.fromArray(SPECIES, > mask, 0); > 28: > 29: for (int ic = 0; ic < INVOC_COUNT; ic++) { Can you remove `SmokeTest` from the method name. ------------- PR: https://git.openjdk.java.net/jdk/pull/7654