On Sun, 15 Sep 2024 07:16:17 GMT, Emanuel Peter <epe...@openjdk.org> wrote:

> > > Can you please **define** somewhere what it means to `prune indexes`? It 
> > > does not help me much more than the previous "massaging indexes" you had 
> > > before I asked you to change it.
> > > > Also: I'm a little worried about the semantics change of the 
> > > > RearrangeNode that you did with the changes in RearrangeNode::Ideal. It 
> > > > looks a little "hacky", especially in conjunction with the 
> > > > vector_indexes_needs_massaging method. Can you give a clear definition 
> > > > of the semantics of RearrangeNode and vector_indexes_needs_massaging, 
> > > > please?
> > > 
> > > 
> > > You have also not responded to this yet. It seems to me that before your 
> > > proposed change, `RearrangeNode` had a clear and easy semantic, and now 
> > > you somehow "hack it" to work with your `vector_indexes_needs_pruning`. 
> > > Can you explain please why this makes sense and add a comment to 
> > > `RearrangeNode` what its semantics is?
> > 
> > 
> > In case target does not directly support two vector selection instruction 
> > we lower the IR to its constituents, this is better than intrinsification 
> > failure as it saves costly vector boxing penalties.
> > Consider in terms of desired compiler IR and not rearrange API semantics, 
> > VectorRearrange IR node generally expects shape conformance b/w vector to 
> > be permuted and index vector, since shuffle indices are held in byte array 
> > based backing storage hence compiler injects VectorLoadShuffle nodes to 
> > upcast the byte vector lanes holding indexes to match the input vector 
> > lane. Since selectFrom API already passes the indexes through vector hence 
> > we can save emitting redundant toShuffle() + toVector() operations in some 
> > cases apart from some target specific scenarios e.g. AVX2 targets [do not 
> > support direct short vector permute]instruction "VPERMW", hence we need to 
> > [massage the index 
> > vector](https://github.com/openjdk/jdk/blob/master/src/hotspot/cpu/x86/x86.ad#L8771)
> >  to emulate desired permutation using byte permute instruction.
> > VectorLoadShuffle abstraction hides target specific index massaging which 
> > is why adding a target specific hook like 
> > Matcher::vector_indexes_needs_pruning compiler to selectively emit 
> > VectorLoadShuffle.
> 
> I still do not see a **definition of the semantics of RearrangeNode**: what 
> inputs does it accept and what does it do with them?
> 
> Can you put this explanation as comment in the code, please?
> 
> It sounds like this is what the `massaging` / `pruning` is: `emulate desired 
> permutation using byte permute instruction.` You should find an accordingly 
> more suiting name for the method name. Maybe it is something like 
> `must_emulate_permutation_with...`. Or maybe it is rather a `supported` kind 
> of question? I leave that up to you.

Hi @eme64 , As per discussion on [PR# 20634 
](https://github.com/openjdk/jdk/pull/20634#discussion_r1759701508), we plan to 
suppress VectorLoadShuffle bypassing optimization for now and address this as a 
follow up optimization for both the flavors of selectFrom API.
I have addressed your comments. Kindly verify.

Best Regards,
Jatin

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

PR Comment: https://git.openjdk.org/jdk/pull/20508#issuecomment-2351944720

Reply via email to