RFR(M) JDK-8181809 PPC64: Leverage mtfprd/mffprd on POWER8

Doerr, Martin martin.doerr at sap.com
Tue Jun 20 13:33:59 UTC 2017

Hi Matt,

thanks for providing this webrev. I had already thought about using these instructions for this purpose and your change matches pretty much what I'd do.

Here a couple of comments:
This was a lot of work. Thanks for doing it.
effect(DEF dst, USE src); is redundant if a match rule match(Set dst (MoveL2D src)); exists.

This part is in conflict with Michihiro's change which is already pushed in jdk10, but it's trivial to resolve. I'm ok with using has_vpmsumb() for has_mtfprd(). In the past, we sometimes had trouble with assuming that a certain Power processor supports all new instructions if it supports certain ones. We also use the hotspot code on as400 where certain instruction subsets were disabled while other Power 8 instructions were usable. Maybe you can double-check if there may exist configurations in which has_vpmsumb() doesn't match has_mtfprd().

It should also be possible to use the instructions in C1 compiler. Maybe you would like to take a look at it as well and see if it can be done with feasible effort.
Here are some hints:
The basic decisions are made in LIRGenerator::do_Convert. You could skip the force_to_spill or must_start_in_memory steps.
The final assembly code gets emitted in LIR_Assembler::emit_opConvert where you could replace the store instructions.
For testing, you can use -XX:TieredStopAtLevel=1, for example.

Thanks and best regards,

-----Original Message-----
From: hotspot-dev [mailto:hotspot-dev-bounces at openjdk.java.net] On Behalf Of Matthew Brandyberry
Sent: Montag, 19. Juni 2017 18:28
To: ppc-aix-port-dev at openjdk.java.net; hotspot-dev at openjdk.java.net
Subject: RFR(M) JDK-8181809 PPC64: Leverage mtfprd/mffprd on POWER8

This is a PPC-specific hotspot optimization that leverages the 
mtfprd/mffprd instructions for for movement between general purpose and 
floating point registers (rather than through memory).  It yields a ~35% 
improvement measured via a microbenchmark. Please review: Bug: 
https://bugs.openjdk.java.net/browse/JDK-8181809 Webrev: 
http://cr.openjdk.java.net/~gromero/8181809/v1/ Thanks, Matt

More information about the hotspot-dev mailing list