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.

-------------

Commit messages:
 - 8282432: Optimize masked "test" Vector API with predicate feature

Changes: https://git.openjdk.java.net/jdk/pull/7654/files
 Webrev: https://webrevs.openjdk.java.net/?repo=jdk&pr=7654&range=00
  Issue: https://bugs.openjdk.java.net/browse/JDK-8282432
  Stats: 1233 lines in 70 files changed: 590 ins; 7 del; 636 mod
  Patch: https://git.openjdk.java.net/jdk/pull/7654.diff
  Fetch: git fetch https://git.openjdk.java.net/jdk pull/7654/head:pull/7654

PR: https://git.openjdk.java.net/jdk/pull/7654

Reply via email to