RFR: 8351016: RA support for EVEX to REX/REX2 demotion to optimize NDD instructions [v13]

Vladimir Ivanov vlivanov at openjdk.org
Thu Nov 20 21:32:46 UTC 2025


On Thu, 20 Nov 2025 21:24:35 GMT, Vladimir Ivanov <vlivanov at openjdk.org> wrote:

>> Jatin Bhateja has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Review comments resolution
>
> src/hotspot/cpu/x86/x86.ad line 2649:
> 
>> 2647:   }
>> 2648: 
>> 2649:   // First operand of MachNode corresponding to Intel APX NDD selection
> 
> Very informative comments! Thank you.
> 
> I suggest to shape it as follows:
> 
> if ((mdef->flags() & Node::PD::Flag_ndd_demotable) != 0) {
>   switch (oper_index) {
>     // First operand of MachNode corresponding to Intel APX NDD selection
>     // pattern can share its assigned register with definition operand if
>     // their live ranges do not overlap, in such a scenario we can demote
>     // it to legacy map0/map1 instruction by replacing its 4-byte extended
>     // EVEX prefix with shorter REX/REX2 encoding. Demotion candidates
>     // are decorated with a special flag by instruction selector.
>     case 1: return true;
> 
>     // For commutative operation allocation of definition
>     // operand can also be biased towards second operand.
>     case 2: return (mdef->flags() & Node::PD::Flag_ndd_commutative) != 0);
> 
>     // No register biasing supported for other operands.
>     default: return false;
>   }
> }

Speaking of implicit invariants, `Node::PD::Flag_ndd_commutative` implies `Node::PD::Flag_ndd_demotable` is also set. Please, add an assert to catch missing `Node::PD::Flag_ndd_demotable` flag.

Another constraint to assert: `mdef->operand_num_edges(oper_index) == 1` should be true for 1st operand when `Node::PD::Flag_ndd_demotable` is set and, also, for 2nd operand when `Node::PD::Flag_ndd_commutative` is set.

Also, any operand ordering constraints in AD instruction declaration? Is it possible to mess the order of declarations, so register biasing candidate operands don't occur as 1st and 2nd operands?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/26283#discussion_r2547726591


More information about the hotspot-compiler-dev mailing list