[vectorIntrinsics] RFR: 8266720: Wrong implementation in LibraryCallKit::inline_vector_shuffle_iota
Sandhya Viswanathan
sviswanathan at openjdk.java.net
Thu May 13 18:00:14 UTC 2021
On Wed, 12 May 2021 09:20:47 GMT, Wang Huang <whuang at openjdk.org> wrote:
> Because JDK-8266317 has not been merged into jdk/jdk. So I fix this bug here.
> * This comparsion should be a unsigned cmp
> * `x86` is not wrong because `x86` does not have 1024-bits vl here.
> ```c++
>
> ConINode* pred_node = (ConINode*)gvn().makecon(TypeInt::make(BoolTest::ge)); // should BoolTest::ugt
> Node * lane_cnt = gvn().makecon(TypeInt::make(num_elem));
> Node * bcast_lane_cnt = gvn().transform(VectorNode::scalar2vector(lane_cnt, num_elem, type_bt));
> // should BoolTest::ugt
> Node* mask = gvn().transform(new VectorMaskCmpNode(BoolTest::ge, bcast_lane_cnt, res, pred_node, vt));
src/hotspot/share/opto/vectorIntrinsics.cpp line 456:
> 454: res = gvn().transform(VectorNode::make(Op_AndI, res, bcast_mod, num_elem, elem_bt));
> 455: } else {
> 456: ConINode* pred_node = (ConINode*)gvn().makecon(TypeInt::make(BoolTest::ugt));
Unsigned comparison adds overhead and is not supported on all architectures.
-------------
PR: https://git.openjdk.java.net/panama-vector/pull/81
More information about the panama-dev
mailing list