8230015: [instruction selector] generic vector operands support.
Vladimir Ivanov
vladimir.x.ivanov at oracle.com
Wed Apr 14 17:11:10 UTC 2021
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_operands_support_v1.0.pdf
>>
>>
>
More information about the hotspot-compiler-dev
mailing list