RFR: 8249893: AARCH64: optimize the construction of the value from the bits of the other two

Andrew Haley aph at openjdk.java.net
Sun Oct 11 15:10:08 UTC 2020


On Sun, 11 Oct 2020 14:27:47 GMT, Andrew Haley <aph at openjdk.org> wrote:

>> Let me revive the change request [3] to C2 and AArch64 that applies Bitfield Insert instruction in the expression "(v1
>> & 0xFF) | ((v2 & 0xFF) << 8)".
>>  
>> Compared to the last round of review [2] I updated the transformation to apply BFI in more cases and added a jtreg test.
>> 
>> As before, compared to the original patch [1], the transformation logic is now in the common C2 code: a new
>> BitfieldInsert node has been introduced to replace Or+Shift+And sequence when possible, on AARCH a single BFI
>> instruction is emitted for the new node.
>>  
>> [1] https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2020-July/039161.html
>> [2] https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2020-August/039653.html
>> [3] https://mail.openjdk.java.net/pipermail/hotspot-compiler-dev/2020-August/039792.html
>
> Please add your microbenchmark to this pull request.

One other thing: AFAICS this change doesn't work with Add as well as Or. Looking at the logic in addnode.cpp I don't
think there's any reason for not doing that, is there? I've often seen ((a & 0xff) << 8) + (b & 0xff). Or is more
common than And, I think, bit we want to get as much leverage out of this work as we can.

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

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


More information about the hotspot-compiler-dev mailing list