RFR: 8338126 : C2 SuperWord: VectorCastF2HF / vcvtps2ph produces wrong results for vector length 2

Emanuel Peter epeter at openjdk.org
Mon Oct 14 12:26:14 UTC 2024


On Fri, 11 Oct 2024 23:27:35 GMT, Sandhya Viswanathan <sviswanathan at openjdk.org> wrote:

> When Float.floatToFloat16 is vectorized using a 2-element vector width due to dependencies, we incorrectly generate a 4-element vcvtps2ph with memory as destination storing 8 bytes instead of desired 4 bytes.  This issue is fixed in this PR by limiting the memory version of match rule to 4-element vector and above.
> Also a regression test case is added accordingly.
> 
> Best Regards,
> Sandhya

src/hotspot/cpu/x86/x86.ad line 3679:

> 3677: 
> 3678: instruct vconvF2HF_mem_reg(memory mem, vec src) %{
> 3679:   predicate(Matcher::vector_length_in_bytes(n->in(3)->in(1)) >= 16);

Ok, and so what alternative path is the matcher now going to take if we have `vector_length = 8`?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21480#discussion_r1799405906


More information about the hotspot-compiler-dev mailing list