@@ -1874,7 +1874,6 @@ class DomainIterator : public StackObj {
18741874 uint _depth;
18751875 uint _first_field_pos;
18761876 const bool _is_static;
1877- uint _null_markers;
18781877
18791878 void next_helper () {
18801879 if (_sig_cc == nullptr ) {
@@ -1887,17 +1886,19 @@ class DomainIterator : public StackObj {
18871886 if (bt == T_METADATA) {
18881887 if (_depth == 0 ) {
18891888 _first_field_pos = _i_domain_cc;
1890- _null_markers = 0 ;
18911889 }
18921890 _depth++;
18931891 } else if (bt == T_VOID && (prev_bt != T_LONG && prev_bt != T_DOUBLE)) {
18941892 _depth--;
18951893 if (_depth == 0 ) {
18961894 _i_domain++;
18971895 }
1898- } else if (bt == T_BOOLEAN && prev_bt == T_METADATA && (_is_static || _i_domain > 0 )) {
1899- _null_markers++;
1900- return ;
1896+ } else if (bt == T_BOOLEAN && prev_bt == T_METADATA && (_is_static || _i_domain > 0 ) && _sig_cc->at (_i_sig_cc)._offset == -1 ) {
1897+ assert (_sig_cc->at (_i_sig_cc)._null_marker , " " );
1898+ assert (_depth == 1 , " " );
1899+ _i_domain_cc++;
1900+ _first_field_pos = _i_domain_cc;
1901+ // return;
19011902 } else {
19021903 return ;
19031904 }
@@ -1917,8 +1918,7 @@ class DomainIterator : public StackObj {
19171918 _i_sig_cc(0 ),
19181919 _depth(0 ),
19191920 _first_field_pos(0 ),
1920- _is_static(call->method ()->is_static()),
1921- _null_markers(0 ) {
1921+ _is_static(call->method ()->is_static()) {
19221922 next_helper ();
19231923 }
19241924
@@ -1958,10 +1958,6 @@ class DomainIterator : public StackObj {
19581958 assert (_first_field_pos >= TypeFunc::Parms, " " );
19591959 return _first_field_pos;
19601960 }
1961-
1962- uint null_markers () const {
1963- return _null_markers;
1964- }
19651961};
19661962
19671963// Add final simple edges to graph.
@@ -2566,15 +2562,15 @@ void ConnectionGraph::process_call_arguments(CallNode *call) {
25662562 Node* arg = call->in (di.i_domain_cc ());
25672563 PointsToNode* arg_ptn = ptnode_adr (arg->_idx );
25682564 assert (!call_analyzer->is_arg_returned (k) || !meth->is_scalarized_arg (k) ||
2569- di.i_domain_cc () - di.first_field_pos () - di. null_markers () == 0 ||
2570- call->proj_out_or_null (di.i_domain_cc () - di.first_field_pos () - di. null_markers () + TypeFunc::Parms + 1 ) == nullptr ||
2571- _igvn->type (call->proj_out_or_null (di.i_domain_cc () - di.first_field_pos () - di. null_markers () + TypeFunc::Parms + 1 )) == at,
2565+ di.i_domain_cc () <= di.first_field_pos () ||
2566+ call->proj_out_or_null (di.i_domain_cc () - di.first_field_pos () + TypeFunc::Parms + 1 ) == nullptr ||
2567+ _igvn->type (call->proj_out_or_null (di.i_domain_cc () - di.first_field_pos () + TypeFunc::Parms + 1 )) == at,
25722568 " " );
25732569 if (at->isa_ptr () != nullptr &&
25742570 call_analyzer->is_arg_returned (k) ) {
25752571 // The call returns arguments.
25762572 if (meth->is_scalarized_arg (k)) {
2577- ProjNode* res_proj = call->proj_out_or_null (di.i_domain_cc () - di.first_field_pos () - di. null_markers () + TypeFunc::Parms + 1 );
2573+ ProjNode* res_proj = call->proj_out_or_null (di.i_domain_cc () - di.first_field_pos () + TypeFunc::Parms + 1 );
25782574 if (res_proj != nullptr ) {
25792575 assert (_igvn->type (res_proj)->isa_ptr (), " " );
25802576 if (res_proj->_con == TypeFunc::Parms) {
0 commit comments