[vectorIntrinsics+mask] RFR: 8266287: Basic mask IR implementation for the Vector API masking feature support
jbhateja at openjdk.java.net
Wed May 12 10:58:11 UTC 2021
On Thu, 6 May 2021 10:12:08 GMT, Xiaohong Gong <xgong at openjdk.org> wrote:
> Based on , 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.
>  https://github.com/openjdk/panama-vector/pull/57
src/hotspot/share/opto/vectorIntrinsics.cpp line 84:
> 82: assert(check_vbox(vbox_type), "");
> 83: const TypeVect* vt = is_vector_mask(vbox_type->klass()) ?
> 84: TypeVect::makemask(elem_bt, num_elem) : TypeVect::make(elem_bt, num_elem);
Box type which is an envelope type should still be the same e.g. Int256VectorMask. Value contained in the Masked Box should be of type vectmask.
src/hotspot/share/opto/vectorIntrinsics.cpp line 102:
> 100: TypeVect::makemask(elem_bt, num_elem) : TypeVect::make(elem_bt, num_elem);
> 101: Node* unbox = gvn().transform(new VectorUnboxNode(C, vt, v, merged_memory(), shuffle_to_vector));
> 102: return unbox;
Same as above.
More information about the panama-dev