8230015: [instruction selector] generic vector operands support.

Bhateja, Jatin jatin.bhateja at intel.com
Thu Apr 15 06:48:38 UTC 2021


Hi Vladimir,
Thanks for responding on my behalf.

Best Regards,
Jatin

> -----Original Message-----
> From: Vladimir Ivanov <vladimir.x.ivanov at oracle.com>
> Sent: Wednesday, April 14, 2021 10:41 PM
> To: Leslie Zhai <zhaixiang at loongson.cn>
> Cc: Bhateja, Jatin <jatin.bhateja at intel.com>; hotspot-compiler-
> dev at openjdk.java.net
> Subject: Re: 8230015: [instruction selector] generic vector operands
> support.
> 
> Hi Leslie,
> 
> I'm not sure what you are trying to achieve with the port.
> 
> Currently, there are 3 platform-specific methods which
> Matcher::do_postselect_cleanup() relies on:
> 
>    Matcher::pd_specialize_generic_vector_operand()
>    Matcher::is_generic_reg2reg_move()
>    Matcher::is_generic_vector()
> 
> It should be enough to provide implementations for those methods on
> YOURARCH to make Matcher::do_postselect_cleanup() working.
> 
> Can you elaborate on what exactly you are trying to accomplish?
> 
> Best regards,
> Vladimir Ivanov
> 
> On 14.04.2021 08:09, Leslie Zhai wrote:
> > Hi Jatin,
> >
> > Thanks for your great work!
> >
> > libjvm.so reduced +1MB will help SPECjvm2008 some benchmark +44% speed
> up.
> >
> > Then I tried to port 8234391: C2: Generic vector operands for
> > `YOURARCH` about LoadVector and StoreVector at first.
> >
> > Only `Matcher::regmask_for_ideal_register` was able to call
> > `Matcher::is_generic_vector`, but compared with X86,
> > `Matcher::do_postselect_cleanup` was also able to call
> > `Matcher::is_generic_vector` too.
> >
> > I debug the `Matcher::do_postselect_cleanup`:
> >
> > diff --git a/src/hotspot/share/opto/matcher.cpp
> > b/src/hotspot/share/opto/matcher.cpp
> > index 0846cad3c3f..8fd644d2d93 100644
> > --- a/src/hotspot/share/opto/matcher.cpp
> > +++ b/src/hotspot/share/opto/matcher.cpp
> > @@ -309,6 +309,9 @@ void Matcher::match( ) {
> >      C->record_method_not_compilable("must be able to represent all
> > call arguments in reg mask");
> >    }
> >
> > +#ifdef YOURARCH64
> > +  do_postselect_cleanup();
> > +#endif
> >    if (C->failing())  return;  // bailed out on incoming arg failure
> >
> >    // ---------------
> > @@ -2630,8 +2633,10 @@ void
> > Matcher::specialize_generic_vector_operands() {
> >          int opnd_idx = m->operand_index(1);
> >          Node* def = m->in(opnd_idx);
> >          m->subsume_by(def, C);
> > +#if !defined(YOURARCH64)
> >        } else if (m->is_MachTemp()) {
> >          // process MachTemp nodes at use site (see
> > Matcher::specialize_vector_operand)
> > +#endif
> >        } else {
> >          specialize_mach_node(m);
> >        }
> >
> > But `Matcher::do_postselect_cleanup` was still not able to be called.
> >
> >> Current patch enables this support only for x86 target, to get a
> > feedback from community.
> >
> > Then how to port Generic vector operands for other targets?
> >
> > Thanks,
> >
> > Leslie Zhai
> >
> >
> > 在 2019年08月22日 14:49, Bhateja, Jatin 写道:
> >> Hi All,
> >>
> >> Please find below a patch for generic vector operands[1] support
> >> during instruction selection.
> >>
> >> Motivation behind the patch is to reduce the number of vector
> >> selection patterns whose operands meagerly differ in vector lengths.
> >> This will not only result in lesser code being generated by ADLC
> >> which effectively translates to size reduction in libjvm.so but also
> >> help in better maintenance of AD files.
> >>
> >> Using generic operands we were able to collapse multiple vector
> >> patterns over mainline
> >>               Initial number of vector instruction patterns
> >> (vec[XYZSD] + legVec[ZXYSD]   :  510
> >>               Reduced vector instruction patterns  (vecG +
> >> legVecG)                                  :  222
> >>
> >> With this we could see around 1MB size reduction in libjvm.so.
> >>
> >> In order to have minimal impact over downstream compiler passes, a
> >> post-selection pass has been introduced (currently enabled only for
> >> X86 target)
> >> which replaces these generic operands with their corresponding
> >> concreter vector length variants.
> >>
> >> JBS      : https://bugs.openjdk.java.net/browse/JDK-8230015
> >> Patch  :
> >> http://cr.openjdk.java.net/~jbhateja/genericVectorOperands/webrev.00/
> >>
> >> Kindly review and share your feedback.
> >>
> >> Best Regards,
> >> Jatin Bhateja
> >>
> >> [1]
> >> http://cr.openjdk.java.net/~jbhateja/genericVectorOperands/generic_op
> >> erands_support_v1.0.pdf
> >>
> >>
> >


More information about the hotspot-compiler-dev mailing list