Skip to content

Commit ca7b885

Browse files
shipilevVladimir Ivanov
andcommitted
8358749: Fix input checks in Vector API intrinsics
Co-authored-by: Vladimir Ivanov <[email protected]> Reviewed-by: vlivanov, sviswanathan
1 parent 92be782 commit ca7b885

File tree

1 file changed

+50
-29
lines changed

1 file changed

+50
-29
lines changed

src/hotspot/share/opto/vectorIntrinsics.cpp

Lines changed: 50 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,10 @@ bool LibraryCallKit::inline_vector_nary_operation(int n) {
318318
const TypeInstPtr* elem_klass = gvn().type(argument(3))->isa_instptr();
319319
const TypeInt* vlen = gvn().type(argument(4))->isa_int();
320320

321-
if (opr == nullptr || vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr ||
322-
!opr->is_con() || vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || !vlen->is_con()) {
321+
if (opr == nullptr || !opr->is_con() ||
322+
vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
323+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
324+
vlen == nullptr || !vlen->is_con()) {
323325
log_if_needed(" ** missing constant: opr=%s vclass=%s etype=%s vlen=%s",
324326
NodeClassNames[argument(0)->Opcode()],
325327
NodeClassNames[argument(1)->Opcode()],
@@ -587,7 +589,11 @@ bool LibraryCallKit::inline_vector_mask_operation() {
587589
const TypeInt* vlen = gvn().type(argument(3))->isa_int();
588590
Node* mask = argument(4);
589591

590-
if (mask_klass == nullptr || elem_klass == nullptr || mask->is_top() || vlen == nullptr) {
592+
if (mask_klass == nullptr || mask_klass->const_oop() == nullptr ||
593+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
594+
vlen == nullptr || !vlen->is_con() ||
595+
oper == nullptr || !oper->is_con() ||
596+
mask->is_top()) {
591597
return false; // dead code
592598
}
593599

@@ -647,9 +653,11 @@ bool LibraryCallKit::inline_vector_frombits_coerced() {
647653
// MODE_BITS_COERCED_LONG_TO_MASK for VectorMask.fromLong operation.
648654
const TypeInt* mode = gvn().type(argument(5))->isa_int();
649655

650-
if (vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr || mode == nullptr ||
651-
bits_type == nullptr || vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr ||
652-
!vlen->is_con() || !mode->is_con()) {
656+
if (vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
657+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
658+
vlen == nullptr || !vlen->is_con() ||
659+
bits_type == nullptr ||
660+
mode == nullptr || !mode->is_con()) {
653661
log_if_needed(" ** missing constant: vclass=%s etype=%s vlen=%s bitwise=%s",
654662
NodeClassNames[argument(0)->Opcode()],
655663
NodeClassNames[argument(1)->Opcode()],
@@ -775,8 +783,10 @@ bool LibraryCallKit::inline_vector_mem_operation(bool is_store) {
775783
const TypeInt* vlen = gvn().type(argument(2))->isa_int();
776784
const TypeInt* from_ms = gvn().type(argument(6))->isa_int();
777785

778-
if (vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr || !from_ms->is_con() ||
779-
vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || !vlen->is_con()) {
786+
if (vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
787+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
788+
vlen == nullptr || !vlen->is_con() ||
789+
from_ms == nullptr || !from_ms->is_con()) {
780790
log_if_needed(" ** missing constant: vclass=%s etype=%s vlen=%s from_ms=%s",
781791
NodeClassNames[argument(0)->Opcode()],
782792
NodeClassNames[argument(1)->Opcode()],
@@ -983,9 +993,11 @@ bool LibraryCallKit::inline_vector_mem_masked_operation(bool is_store) {
983993
const TypeInt* vlen = gvn().type(argument(3))->isa_int();
984994
const TypeInt* from_ms = gvn().type(argument(7))->isa_int();
985995

986-
if (vector_klass == nullptr || mask_klass == nullptr || elem_klass == nullptr || vlen == nullptr ||
987-
vector_klass->const_oop() == nullptr || mask_klass->const_oop() == nullptr || from_ms == nullptr ||
988-
elem_klass->const_oop() == nullptr || !vlen->is_con() || !from_ms->is_con()) {
996+
if (vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
997+
mask_klass == nullptr || mask_klass->const_oop() == nullptr ||
998+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
999+
vlen == nullptr || !vlen->is_con() ||
1000+
from_ms == nullptr || !from_ms->is_con()) {
9891001
log_if_needed(" ** missing constant: vclass=%s mclass=%s etype=%s vlen=%s from_ms=%s",
9901002
NodeClassNames[argument(0)->Opcode()],
9911003
NodeClassNames[argument(1)->Opcode()],
@@ -1222,8 +1234,10 @@ bool LibraryCallKit::inline_vector_gather_scatter(bool is_scatter) {
12221234
const TypeInt* vlen = gvn().type(argument(3))->isa_int();
12231235
const TypeInstPtr* vector_idx_klass = gvn().type(argument(4))->isa_instptr();
12241236

1225-
if (vector_klass == nullptr || elem_klass == nullptr || vector_idx_klass == nullptr || vlen == nullptr ||
1226-
vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || vector_idx_klass->const_oop() == nullptr || !vlen->is_con()) {
1237+
if (vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
1238+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
1239+
vlen == nullptr || !vlen->is_con() ||
1240+
vector_idx_klass == nullptr || vector_idx_klass->const_oop() == nullptr) {
12271241
log_if_needed(" ** missing constant: vclass=%s etype=%s vlen=%s viclass=%s",
12281242
NodeClassNames[argument(0)->Opcode()],
12291243
NodeClassNames[argument(2)->Opcode()],
@@ -1409,8 +1423,10 @@ bool LibraryCallKit::inline_vector_reduction() {
14091423
const TypeInstPtr* elem_klass = gvn().type(argument(3))->isa_instptr();
14101424
const TypeInt* vlen = gvn().type(argument(4))->isa_int();
14111425

1412-
if (opr == nullptr || vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr ||
1413-
!opr->is_con() || vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || !vlen->is_con()) {
1426+
if (opr == nullptr || !opr->is_con() ||
1427+
vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
1428+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
1429+
vlen == nullptr || !vlen->is_con()) {
14141430
log_if_needed(" ** missing constant: opr=%s vclass=%s etype=%s vlen=%s",
14151431
NodeClassNames[argument(0)->Opcode()],
14161432
NodeClassNames[argument(1)->Opcode()],
@@ -1547,8 +1563,10 @@ bool LibraryCallKit::inline_vector_test() {
15471563
const TypeInstPtr* elem_klass = gvn().type(argument(2))->isa_instptr();
15481564
const TypeInt* vlen = gvn().type(argument(3))->isa_int();
15491565

1550-
if (cond == nullptr || vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr ||
1551-
!cond->is_con() || vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || !vlen->is_con()) {
1566+
if (cond == nullptr || !cond->is_con() ||
1567+
vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
1568+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
1569+
vlen == nullptr || !vlen->is_con()) {
15521570
log_if_needed(" ** missing constant: cond=%s vclass=%s etype=%s vlen=%s",
15531571
NodeClassNames[argument(0)->Opcode()],
15541572
NodeClassNames[argument(1)->Opcode()],
@@ -2505,10 +2523,10 @@ bool LibraryCallKit::inline_vector_extract() {
25052523
const TypeInt* vlen = gvn().type(argument(2))->isa_int();
25062524
const TypeInt* idx = gvn().type(argument(4))->isa_int();
25072525

2508-
if (vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr || idx == nullptr) {
2509-
return false; // dead code
2510-
}
2511-
if (vector_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || !vlen->is_con()) {
2526+
if (vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
2527+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
2528+
vlen == nullptr || !vlen->is_con() ||
2529+
idx == nullptr || !idx->is_con()) {
25122530
log_if_needed(" ** missing constant: vclass=%s etype=%s vlen=%s",
25132531
NodeClassNames[argument(0)->Opcode()],
25142532
NodeClassNames[argument(1)->Opcode()],
@@ -2811,9 +2829,11 @@ bool LibraryCallKit::inline_vector_compress_expand() {
28112829
const TypeInstPtr* elem_klass = gvn().type(argument(3))->isa_instptr();
28122830
const TypeInt* vlen = gvn().type(argument(4))->isa_int();
28132831

2814-
if (vector_klass == nullptr || elem_klass == nullptr || mask_klass == nullptr || vlen == nullptr ||
2815-
vector_klass->const_oop() == nullptr || mask_klass->const_oop() == nullptr ||
2816-
elem_klass->const_oop() == nullptr || !vlen->is_con() || !opr->is_con()) {
2832+
if (opr == nullptr || !opr->is_con() ||
2833+
vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
2834+
mask_klass == nullptr || mask_klass->const_oop() == nullptr ||
2835+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
2836+
vlen == nullptr || !vlen->is_con()) {
28172837
log_if_needed(" ** missing constant: opr=%s vclass=%s mclass=%s etype=%s vlen=%s",
28182838
NodeClassNames[argument(0)->Opcode()],
28192839
NodeClassNames[argument(1)->Opcode()],
@@ -2892,9 +2912,9 @@ bool LibraryCallKit::inline_index_vector() {
28922912
const TypeInstPtr* elem_klass = gvn().type(argument(1))->isa_instptr();
28932913
const TypeInt* vlen = gvn().type(argument(2))->isa_int();
28942914

2895-
if (vector_klass == nullptr || elem_klass == nullptr || vlen == nullptr ||
2896-
vector_klass->const_oop() == nullptr || !vlen->is_con() ||
2897-
elem_klass->const_oop() == nullptr) {
2915+
if (vector_klass == nullptr || vector_klass->const_oop() == nullptr ||
2916+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
2917+
vlen == nullptr || !vlen->is_con() ) {
28982918
log_if_needed(" ** missing constant: vclass=%s etype=%s vlen=%s",
28992919
NodeClassNames[argument(0)->Opcode()],
29002920
NodeClassNames[argument(1)->Opcode()],
@@ -3026,8 +3046,9 @@ bool LibraryCallKit::inline_index_partially_in_upper_range() {
30263046
const TypeInstPtr* elem_klass = gvn().type(argument(1))->isa_instptr();
30273047
const TypeInt* vlen = gvn().type(argument(2))->isa_int();
30283048

3029-
if (mask_klass == nullptr || elem_klass == nullptr || vlen == nullptr ||
3030-
mask_klass->const_oop() == nullptr || elem_klass->const_oop() == nullptr || !vlen->is_con()) {
3049+
if (mask_klass == nullptr || mask_klass->const_oop() == nullptr ||
3050+
elem_klass == nullptr || elem_klass->const_oop() == nullptr ||
3051+
vlen == nullptr || !vlen->is_con()) {
30313052
log_if_needed(" ** missing constant: mclass=%s etype=%s vlen=%s",
30323053
NodeClassNames[argument(0)->Opcode()],
30333054
NodeClassNames[argument(1)->Opcode()],

0 commit comments

Comments
 (0)