[vectorIntrinsics+mask] RFR: 8266287: Basic mask IR implementation for the Vector API masking feature support
Xiaohong Gong
xgong at openjdk.java.net
Thu May 13 02:03:59 UTC 2021
On Wed, 12 May 2021 10:33:50 GMT, Jatin Bhateja <jbhateja at openjdk.org> wrote:
>> Based on [1], this patch adds the C2 compiler mid-end changes for the masking feature support. It mainly contains:
>> 1) Generation of the mask IRs for vector mask, including:
>> - Mask generations, e.g. load/compare/maskAll
>> - Mask operations, e.g. and/or/xor
>> 2) Conversions between vector and mask after loading mask values from memory and before storing mask values into memory
>> 3) Generation of the vector IRs which need the mask value as the control
>> - The mask value is appended to the original vector node's input list
>>
>> With this change, the bottom type of the vector mask will be set to `"TypeVectMask"` if the platform supports the masking feature and the backend implementations are added.
>>
>> Note that this patch only contains the compiler mid-end changes. The backend implementations for SVE/AVX-512 will be in the
>> followed-up patches.
>>
>> [1] https://github.com/openjdk/panama-vector/pull/57
>
> src/hotspot/share/opto/matcher.cpp line 2332:
>
>> 2330: return;
>> 2331: }
>> 2332:
>
> If we add a new flag for masked nodes, it may simplify the checking logic for masking operations. e.g.
> node.hpp:
> class Node {
> // Flags are sorted by usage frequency.
> enum NodeFlags {
> Flag_is_Copy = 1 << 0, // should be first bit to avoid shift
> Flag_rematerialize = 1 << 1,
> Flag_needs_anti_dependence_check = 1 << 2,
> Flag_is_macro = 1 << 3,
> Flag_is_Con = 1 << 4,
> Flag_is_cisc_alternate = 1 << 5,
> Flag_is_dead_loop_safe = 1 << 6,
> Flag_may_be_short_branch = 1 << 7,
> Flag_avoid_back_to_back_before = 1 << 8,
> Flag_avoid_back_to_back_after = 1 << 9,
> Flag_has_call = 1 << 10,
> Flag_is_reduction = 1 << 11,
> Flag_is_scheduled = 1 << 12,
> **Flag_has_vector_mask_set** = 1 << 13,
Good suggestion! Thanks! So do you mean using the new flag instead of `"n->in(3)->is_VectorMask()" ` ? I'm not very clarified about what the checking logic for masking operations you mean. Could you please elaborate more about this? Thanks so much!
-------------
PR: https://git.openjdk.java.net/panama-vector/pull/78
More information about the panama-dev
mailing list