From nobody Sun Sep 25 23:07:23 2022 X-Original-To: dev-commits-ports-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4MbM3b5lhwz4dBKw; Sun, 25 Sep 2022 23:07:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4MbM3b5XyHz3sJG; Sun, 25 Sep 2022 23:07:23 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664147243; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XycLRuP+Ix8YdZyg4nggnikxJAng+kxyfTliuAZtr1g=; b=Lo+gjJMzofRis//fN9moRnoYOpZCiUIzHx5fGn1RCo0oZ1P9MnTvaeci/v0J4D6fHQvNdu UwlnisUiW5UHN+sZRHUb8RjbZQdM62HuHfMkQBogg1+E6b6mDcV3gCV08xxPekZnPd7nkb DX1EYNjFxZDnTTi2AHU1yeh4AjYFt7LJNBswOll3CPB+yVUD686kNIvYDY9b45MhMAjFgN 9kV5ZTC/jBSmESksLlMTSS01KZNvXIi+uzmT6HLKvBybhGCAJSD3rMbPb2zjk4zZnISD5e 8Xoi1tm1fts6Ds3K9cAQ+cE1o50v0bnQtFBW6ndFcVYkxtunKw3k4+ux3sFVNA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4MbM3b42RNzZZ8; Sun, 25 Sep 2022 23:07:23 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 28PN7NHW016589; Sun, 25 Sep 2022 23:07:23 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 28PN7NAx016588; Sun, 25 Sep 2022 23:07:23 GMT (envelope-from git) Date: Sun, 25 Sep 2022 23:07:23 GMT Message-Id: <202209252307.28PN7NAx016588@gitrepo.freebsd.org> To: ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org From: Greg Lewis Subject: git: 749c57a8a8b8 - main - java/openjdk11: Update to 11.0.16.1 List-Id: Commit messages for all branches of the ports repository List-Archive: https://lists.freebsd.org/archives/dev-commits-ports-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-ports-all@freebsd.org X-BeenThere: dev-commits-ports-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glewis X-Git-Repository: ports X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 749c57a8a8b8f36b8b6abeb48c64697f6dfc8f0a Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1664147243; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=XycLRuP+Ix8YdZyg4nggnikxJAng+kxyfTliuAZtr1g=; b=dzbvQjfBauYrVakTdjkVi3bjZU+VuX2mWtodExo/yudzRquzpsHDJMRBV+9bysfIBExvIl Ea4xNNBfqynJMV9I18+/hvfd3s8Czr/28/ua5mnoh0vGGR7eBzeOgSJeLoov3ZM5+fGtaW gnzplbWTkmlV+XCaYDgwTet8021aka9/jy2Xfv/0obj+caJskMw5LEPFfbV1Svy1ZUhgU6 Bb6zuCLYJ4HfhotEQbusC9KNkoFcX1lsR0UrL4r1oCsZV1bTOTuTvUgzJ/MpCPq/aPxQ00 GZnISzIcyudjwEj2N/sxgNVY47dC6ii6kDPN5SPS2/UxpGeCV+e/WJZE8FCUOQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1664147243; a=rsa-sha256; cv=none; b=WFPLcYmgD+HFhhZb93+dFIbPWF+4/2fVuobspoYVMhmQwlsxeKGwDMocgbStz3tjUVmIQV oLcSRjsuzDBOEXrOQteUQr6ln2V1f3yBAO184mDFU2pjNDJT2chxdOPBouB9/wlOU+JpMr M+rhdA6kDXJeXid+NWm0ILf87YJ4wRWQ2meysOePiOewU/GKlf/7JEO5f7LhCQ0rd7IjkZ F3A72S4n5nI/57YeUxZ5Y6sBiPq2kJCOZS9uGl1b6u2ym6H3ooEXAVlZyiSL2y1KZb67EJ m8JjYypsaMW6h/gUDNYz7x4HgnRLE8yZ5WclPls0B5fkjXEr9FP8H1ovF90T9g== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by glewis: URL: https://cgit.FreeBSD.org/ports/commit/?id=749c57a8a8b8f36b8b6abeb48c64697f6dfc8f0a commit 749c57a8a8b8f36b8b6abeb48c64697f6dfc8f0a Author: Greg Lewis AuthorDate: 2022-09-25 23:06:16 +0000 Commit: Greg Lewis CommitDate: 2022-09-25 23:06:16 +0000 java/openjdk11: Update to 11.0.16.1 --- java/openjdk11/Makefile | 2 +- java/openjdk11/files/patch-16-1 | 543 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 544 insertions(+), 1 deletion(-) diff --git a/java/openjdk11/Makefile b/java/openjdk11/Makefile index f8baec3ea93c..60ef9756b3a5 100644 --- a/java/openjdk11/Makefile +++ b/java/openjdk11/Makefile @@ -1,7 +1,7 @@ PORTNAME= openjdk DISTVERSIONPREFIX= jdk- DISTVERSION= ${JDK_MAJOR_VERSION}.${JDK_MINOR_VERSION}.${JDK_PATCH_VERSION}+${JDK_BUILD_NUMBER}-${BSD_JDK_VERSION} -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= java devel PKGNAMESUFFIX?= ${JDK_MAJOR_VERSION} diff --git a/java/openjdk11/files/patch-16-1 b/java/openjdk11/files/patch-16-1 new file mode 100644 index 000000000000..57aa64ecbb75 --- /dev/null +++ b/java/openjdk11/files/patch-16-1 @@ -0,0 +1,543 @@ +--- .jcheck/conf ++++ .jcheck/conf +@@ -1,7 +1,7 @@ + [general] + project=jdk-updates + jbs=JDK +-version=11.0.16 ++version=11.0.16.1 + + [checks] + error=author,committer,reviewers,merge,issues,executable,symlink,message,hg-tag,whitespace +--- make/autoconf/version-numbers ++++ make/autoconf/version-numbers +@@ -29,11 +29,11 @@ + DEFAULT_VERSION_FEATURE=11 + DEFAULT_VERSION_INTERIM=0 + DEFAULT_VERSION_UPDATE=16 +-DEFAULT_VERSION_PATCH=0 ++DEFAULT_VERSION_PATCH=1 + DEFAULT_VERSION_EXTRA1=0 + DEFAULT_VERSION_EXTRA2=0 + DEFAULT_VERSION_EXTRA3=0 +-DEFAULT_VERSION_DATE=2022-07-19 ++DEFAULT_VERSION_DATE=2022-08-12 + DEFAULT_VERSION_CLASSFILE_MAJOR=55 # "`$EXPR $DEFAULT_VERSION_FEATURE + 44`" + DEFAULT_VERSION_CLASSFILE_MINOR=0 + DEFAULT_ACCEPTABLE_BOOT_VERSIONS="10 11" +--- src/hotspot/share/opto/callnode.cpp ++++ src/hotspot/share/opto/callnode.cpp +@@ -1378,7 +1378,6 @@ AllocateNode::AllocateNode(Compile* C, const TypeFunc *atype, + init_req( KlassNode , klass_node); + init_req( InitialTest , initial_test); + init_req( ALength , topnode); +- init_req( ValidLengthTest , topnode); + C->add_macro_node(this); + } + +@@ -1399,6 +1398,54 @@ void AllocateNode::compute_MemBar_redundancy(ciMethod* initializer) + } + } + ++//============================================================================= ++Node* AllocateArrayNode::Ideal(PhaseGVN *phase, bool can_reshape) { ++ if (remove_dead_region(phase, can_reshape)) return this; ++ // Don't bother trying to transform a dead node ++ if (in(0) && in(0)->is_top()) return NULL; ++ ++ const Type* type = phase->type(Ideal_length()); ++ if (type->isa_int() && type->is_int()->_hi < 0) { ++ if (can_reshape) { ++ PhaseIterGVN *igvn = phase->is_IterGVN(); ++ // Unreachable fall through path (negative array length), ++ // the allocation can only throw so disconnect it. ++ Node* proj = proj_out_or_null(TypeFunc::Control); ++ Node* catchproj = NULL; ++ if (proj != NULL) { ++ for (DUIterator_Fast imax, i = proj->fast_outs(imax); i < imax; i++) { ++ Node *cn = proj->fast_out(i); ++ if (cn->is_Catch()) { ++ catchproj = cn->as_Multi()->proj_out_or_null(CatchProjNode::fall_through_index); ++ break; ++ } ++ } ++ } ++ if (catchproj != NULL && catchproj->outcnt() > 0 && ++ (catchproj->outcnt() > 1 || ++ catchproj->unique_out()->Opcode() != Op_Halt)) { ++ assert(catchproj->is_CatchProj(), "must be a CatchProjNode"); ++ Node* nproj = catchproj->clone(); ++ igvn->register_new_node_with_optimizer(nproj); ++ ++ Node *frame = new ParmNode( phase->C->start(), TypeFunc::FramePtr ); ++ frame = phase->transform(frame); ++ // Halt & Catch Fire ++ Node* halt = new HaltNode(nproj, frame, "unexpected negative array length"); ++ phase->C->root()->add_req(halt); ++ phase->transform(halt); ++ ++ igvn->replace_node(catchproj, phase->C->top()); ++ return this; ++ } ++ } else { ++ // Can't correct it during regular GVN so register for IGVN ++ phase->C->record_for_igvn(this); ++ } ++ } ++ return NULL; ++} ++ + // Retrieve the length from the AllocateArrayNode. Narrow the type with a + // CastII, if appropriate. If we are not allowed to create new nodes, and + // a CastII is appropriate, return NULL. +--- src/hotspot/share/opto/callnode.hpp ++++ src/hotspot/share/opto/callnode.hpp +@@ -839,7 +839,6 @@ public: + KlassNode, // type (maybe dynamic) of the obj. + InitialTest, // slow-path test (may be constant) + ALength, // array length (or TOP if none) +- ValidLengthTest, + ParmLimit + }; + +@@ -849,7 +848,6 @@ public: + fields[KlassNode] = TypeInstPtr::NOTNULL; + fields[InitialTest] = TypeInt::BOOL; + fields[ALength] = t; // length (can be a bad length) +- fields[ValidLengthTest] = TypeInt::BOOL; + + const TypeTuple *domain = TypeTuple::make(ParmLimit, fields); + +@@ -947,16 +945,18 @@ public: + // + class AllocateArrayNode : public AllocateNode { + public: +- AllocateArrayNode(Compile* C, const TypeFunc* atype, Node* ctrl, Node* mem, Node* abio, Node* size, Node* klass_node, +- Node* initial_test, Node* count_val, Node* valid_length_test) ++ AllocateArrayNode(Compile* C, const TypeFunc *atype, Node *ctrl, Node *mem, Node *abio, ++ Node* size, Node* klass_node, Node* initial_test, ++ Node* count_val ++ ) + : AllocateNode(C, atype, ctrl, mem, abio, size, klass_node, + initial_test) + { + init_class_id(Class_AllocateArray); + set_req(AllocateNode::ALength, count_val); +- set_req(AllocateNode::ValidLengthTest, valid_length_test); + } + virtual int Opcode() const; ++ virtual Node *Ideal(PhaseGVN *phase, bool can_reshape); + + // Dig the length operand out of a array allocation site. + Node* Ideal_length() { +--- src/hotspot/share/opto/cfgnode.cpp ++++ src/hotspot/share/opto/cfgnode.cpp +@@ -2352,17 +2352,6 @@ const Type* CatchNode::Value(PhaseGVN* phase) const { + // Rethrows always throw exceptions, never return + if (call->entry_point() == OptoRuntime::rethrow_stub()) { + f[CatchProjNode::fall_through_index] = Type::TOP; +- } else if (call->is_AllocateArray()) { +- Node* klass_node = call->in(AllocateNode::KlassNode); +- Node* length = call->in(AllocateNode::ALength); +- const Type* length_type = phase->type(length); +- const Type* klass_type = phase->type(klass_node); +- Node* valid_length_test = call->in(AllocateNode::ValidLengthTest); +- const Type* valid_length_test_t = phase->type(valid_length_test); +- if (length_type == Type::TOP || klass_type == Type::TOP || valid_length_test_t == Type::TOP || +- valid_length_test_t->is_int()->is_con(0)) { +- f[CatchProjNode::fall_through_index] = Type::TOP; +- } + } else if( call->req() > TypeFunc::Parms ) { + const Type *arg0 = phase->type( call->in(TypeFunc::Parms) ); + // Check for null receiver to virtual or interface calls +--- src/hotspot/share/opto/compile.cpp ++++ src/hotspot/share/opto/compile.cpp +@@ -3706,7 +3706,7 @@ bool Compile::final_graph_reshaping() { + // 'fall-thru' path, so expected kids is 1 less. + if (n->is_PCTable() && n->in(0) && n->in(0)->in(0)) { + if (n->in(0)->in(0)->is_Call()) { +- CallNode* call = n->in(0)->in(0)->as_Call(); ++ CallNode *call = n->in(0)->in(0)->as_Call(); + if (call->entry_point() == OptoRuntime::rethrow_stub()) { + required_outcnt--; // Rethrow always has 1 less kid + } else if (call->req() > TypeFunc::Parms && +@@ -3715,25 +3715,22 @@ bool Compile::final_graph_reshaping() { + // detected that the virtual call will always result in a null + // pointer exception. The fall-through projection of this CatchNode + // will not be populated. +- Node* arg0 = call->in(TypeFunc::Parms); ++ Node *arg0 = call->in(TypeFunc::Parms); + if (arg0->is_Type() && + arg0->as_Type()->type()->higher_equal(TypePtr::NULL_PTR)) { + required_outcnt--; + } +- } else if (call->entry_point() == OptoRuntime::new_array_Java() || +- call->entry_point() == OptoRuntime::new_array_nozero_Java()) { +- // Check for illegal array length. In such case, the optimizer has ++ } else if (call->entry_point() == OptoRuntime::new_array_Java() && ++ call->req() > TypeFunc::Parms+1 && ++ call->is_CallStaticJava()) { ++ // Check for negative array length. In such case, the optimizer has + // detected that the allocation attempt will always result in an + // exception. There is no fall-through projection of this CatchNode . +- assert(call->is_CallStaticJava(), "static call expected"); +- assert(call->req() == call->jvms()->endoff() + 1, "missing extra input"); +- Node* valid_length_test = call->in(call->req()-1); +- call->del_req(call->req()-1); +- if (valid_length_test->find_int_con(1) == 0) { ++ Node *arg1 = call->in(TypeFunc::Parms+1); ++ if (arg1->is_Type() && ++ arg1->as_Type()->type()->join(TypeInt::POS)->empty()) { + required_outcnt--; + } +- assert(n->outcnt() == required_outcnt, "malformed control flow"); +- continue; + } + } + } +@@ -3742,14 +3739,6 @@ bool Compile::final_graph_reshaping() { + record_method_not_compilable("malformed control flow"); + return true; // Not all targets reachable! + } +- } else if (n->is_PCTable() && n->in(0) && n->in(0)->in(0) && n->in(0)->in(0)->is_Call()) { +- CallNode* call = n->in(0)->in(0)->as_Call(); +- if (call->entry_point() == OptoRuntime::new_array_Java() || +- call->entry_point() == OptoRuntime::new_array_nozero_Java()) { +- assert(call->is_CallStaticJava(), "static call expected"); +- assert(call->req() == call->jvms()->endoff() + 1, "missing extra input"); +- call->del_req(call->req()-1); // valid length test useless now +- } + } + // Check that I actually visited all kids. Unreached kids + // must be infinite loops. +--- src/hotspot/share/opto/graphKit.cpp ++++ src/hotspot/share/opto/graphKit.cpp +@@ -2593,9 +2593,7 @@ void GraphKit::make_slow_call_ex(Node* call, ciInstanceKlass* ex_klass, bool sep + // Make a catch node with just two handlers: fall-through and catch-all + Node* i_o = _gvn.transform( new ProjNode(call, TypeFunc::I_O, separate_io_proj) ); + Node* catc = _gvn.transform( new CatchNode(control(), i_o, 2) ); +- Node* norm = new CatchProjNode(catc, CatchProjNode::fall_through_index, CatchProjNode::no_handler_bci); +- _gvn.set_type_bottom(norm); +- C->record_for_igvn(norm); ++ Node* norm = _gvn.transform( new CatchProjNode(catc, CatchProjNode::fall_through_index, CatchProjNode::no_handler_bci) ); + Node* excp = _gvn.transform( new CatchProjNode(catc, CatchProjNode::catch_all_index, CatchProjNode::no_handler_bci) ); + + { PreserveJVMState pjvms(this); +@@ -3731,28 +3729,20 @@ Node* GraphKit::new_array(Node* klass_node, // array klass (maybe variable) + initial_slow_test = initial_slow_test->as_Bool()->as_int_value(&_gvn); + } + +- const TypeOopPtr* ary_type = _gvn.type(klass_node)->is_klassptr()->as_instance_type(); +- Node* valid_length_test = _gvn.intcon(1); +- if (ary_type->klass()->is_array_klass()) { +- BasicType bt = ary_type->klass()->as_array_klass()->element_type()->basic_type(); +- jint max = TypeAryPtr::max_array_length(bt); +- Node* valid_length_cmp = _gvn.transform(new CmpUNode(length, intcon(max))); +- valid_length_test = _gvn.transform(new BoolNode(valid_length_cmp, BoolTest::le)); +- } +- + // Create the AllocateArrayNode and its result projections + AllocateArrayNode* alloc + = new AllocateArrayNode(C, AllocateArrayNode::alloc_type(TypeInt::INT), + control(), mem, i_o(), + size, klass_node, + initial_slow_test, +- length, valid_length_test); ++ length); + + // Cast to correct type. Note that the klass_node may be constant or not, + // and in the latter case the actual array type will be inexact also. + // (This happens via a non-constant argument to inline_native_newArray.) + // In any case, the value of klass_node provides the desired array type. + const TypeInt* length_type = _gvn.find_int_type(length); ++ const TypeOopPtr* ary_type = _gvn.type(klass_node)->is_klassptr()->as_instance_type(); + if (ary_type->isa_aryptr() && length_type != NULL) { + // Try to get a better type than POS for the size + ary_type = ary_type->is_aryptr()->cast_to_size(length_type); +--- src/hotspot/share/opto/macro.cpp ++++ src/hotspot/share/opto/macro.cpp +@@ -1288,8 +1288,7 @@ void PhaseMacroExpand::expand_allocate_common( + AllocateNode* alloc, // allocation node to be expanded + Node* length, // array length for an array allocation + const TypeFunc* slow_call_type, // Type of slow call +- address slow_call_address, // Address of slow call +- Node* valid_length_test // whether length is valid or not ++ address slow_call_address // Address of slow call + ) + { + +@@ -1629,12 +1628,6 @@ void PhaseMacroExpand::expand_allocate_common( + // Copy debug information and adjust JVMState information, then replace + // allocate node with the call + copy_call_debug_info((CallNode *) alloc, call); +- // For array allocations, copy the valid length check to the call node so Compile::final_graph_reshaping() can verify +- // that the call has the expected number of CatchProj nodes (in case the allocation always fails and the fallthrough +- // path dies). +- if (valid_length_test != NULL) { +- call->add_req(valid_length_test); +- } + if (!always_slow) { + call->set_cnt(PROB_UNLIKELY_MAG(4)); // Same effect as RC_UNCOMMON. + } else { +@@ -1989,12 +1982,11 @@ Node* PhaseMacroExpand::prefetch_allocation(Node* i_o, Node*& needgc_false, + void PhaseMacroExpand::expand_allocate(AllocateNode *alloc) { + expand_allocate_common(alloc, NULL, + OptoRuntime::new_instance_Type(), +- OptoRuntime::new_instance_Java(), NULL); ++ OptoRuntime::new_instance_Java()); + } + + void PhaseMacroExpand::expand_allocate_array(AllocateArrayNode *alloc) { + Node* length = alloc->in(AllocateNode::ALength); +- Node* valid_length_test = alloc->in(AllocateNode::ValidLengthTest); + InitializeNode* init = alloc->initialization(); + Node* klass_node = alloc->in(AllocateNode::KlassNode); + ciKlass* k = _igvn.type(klass_node)->is_klassptr()->klass(); +@@ -2009,7 +2001,7 @@ void PhaseMacroExpand::expand_allocate_array(AllocateArrayNode *alloc) { + } + expand_allocate_common(alloc, length, + OptoRuntime::new_array_Type(), +- slow_call_address, valid_length_test); ++ slow_call_address); + } + + //-------------------mark_eliminated_box---------------------------------- +--- src/hotspot/share/opto/macro.hpp ++++ src/hotspot/share/opto/macro.hpp +@@ -98,8 +98,7 @@ private: + void expand_allocate_common(AllocateNode* alloc, + Node* length, + const TypeFunc* slow_call_type, +- address slow_call_address, +- Node* valid_length_test); ++ address slow_call_address); + Node *value_from_mem(Node *mem, Node *ctl, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc); + Node *value_from_mem_phi(Node *mem, BasicType ft, const Type *ftype, const TypeOopPtr *adr_t, AllocateNode *alloc, Node_Stack *value_phis, int level); + +--- src/hotspot/share/opto/split_if.cpp ++++ src/hotspot/share/opto/split_if.cpp +@@ -128,8 +128,8 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) { + } + } else { + // We might see an Opaque1 from a loop limit check here +- assert(use->is_If() || use->is_CMove() || use->Opcode() == Op_Opaque1 || use->is_AllocateArray(), "unexpected node type"); +- Node *use_c = (use->is_If() || use->is_AllocateArray()) ? use->in(0) : get_ctrl(use); ++ assert(use->is_If() || use->is_CMove() || use->Opcode() == Op_Opaque1, "unexpected node type"); ++ Node *use_c = use->is_If() ? use->in(0) : get_ctrl(use); + if (use_c == blk1 || use_c == blk2) { + assert(use->is_CMove(), "unexpected node type"); + continue; +@@ -166,15 +166,14 @@ bool PhaseIdealLoop::split_up( Node *n, Node *blk1, Node *blk2 ) { + --j; + } else { + // We might see an Opaque1 from a loop limit check here +- assert(u->is_If() || u->is_CMove() || u->Opcode() == Op_Opaque1 || u->is_AllocateArray(), "unexpected node type"); +- assert(u->is_AllocateArray() || u->in(1) == bol, ""); +- assert(!u->is_AllocateArray() || u->in(AllocateNode::ValidLengthTest) == bol, "wrong input to AllocateArray"); ++ assert(u->is_If() || u->is_CMove() || u->Opcode() == Op_Opaque1, "unexpected node type"); ++ assert(u->in(1) == bol, ""); + // Get control block of either the CMove or the If input +- Node *u_ctrl = (u->is_If() || u->is_AllocateArray()) ? u->in(0) : get_ctrl(u); ++ Node *u_ctrl = u->is_If() ? u->in(0) : get_ctrl(u); + assert((u_ctrl != blk1 && u_ctrl != blk2) || u->is_CMove(), "won't converge"); + Node *x = bol->clone(); + register_new_node(x, u_ctrl); +- _igvn.replace_input_of(u, u->is_AllocateArray() ? AllocateNode::ValidLengthTest : 1, x); ++ _igvn.replace_input_of(u, 1, x); + --j; + } + } +--- test/hotspot/jtreg/compiler/allocation/TestAllocArrayAfterAllocNoUse.java ++++ /dev/null +@@ -1,52 +0,0 @@ +-/* +- * Copyright (c) 2022, Red Hat, Inc. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-/** +- * @test +- * @bug 8279125 +- * @summary fatal error: no reachable node should have no use +- * @requires vm.flavor == "server" +- * +- * @run main/othervm -XX:-BackgroundCompilation -XX:-DoEscapeAnalysis TestAllocArrayAfterAllocNoUse +- * +- */ +- +-public class TestAllocArrayAfterAllocNoUse { +- private static Object field; +- +- public static void main(String[] args) { +- for (int i = 0; i < 20_000; i++) { +- test(); +- } +- } +- +- private static void test() { +- try { +- final TestAllocArrayAfterAllocNoUse o = new TestAllocArrayAfterAllocNoUse(); +- } catch (Exception e) { +- final int[] array = new int[100]; +- field = array; +- } +- +- } +-} +--- test/hotspot/jtreg/compiler/allocation/TestCCPAllocateArray.java ++++ /dev/null +@@ -1,53 +0,0 @@ +-/* +- * Copyright (c) 2022, Red Hat, Inc. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-/** +- * @test +- * @bug 8279062 +- * @summary C2: assert(t->meet(t0) == t) failed: Not monotonic after JDK-8278413 +- * +- * @run main/othervm -XX:-BackgroundCompilation TestCCPAllocateArray +- * +- */ +- +-public class TestCCPAllocateArray { +- public static void main(String[] args) { +- for (int i = 0; i < 20_000; i++) { +- try { +- test(); +- } catch (OutOfMemoryError e) { +- } +- length(42); +- } +- } +- +- private static int[] test() { +- int i = 2; +- for (; i < 4; i *= 2); +- return new int[length(i)]; +- } +- +- private static int length(int i) { +- return i == 4 ? Integer.MAX_VALUE : 0; +- } +-} +--- test/hotspot/jtreg/compiler/allocation/TestFailedAllocationBadGraph.java ++++ /dev/null +@@ -1,80 +0,0 @@ +-/* +- * Copyright (c) 2022, Red Hat, Inc. All rights reserved. +- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. +- * +- * This code is free software; you can redistribute it and/or modify it +- * under the terms of the GNU General Public License version 2 only, as +- * published by the Free Software Foundation. +- * +- * This code is distributed in the hope that it will be useful, but WITHOUT +- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +- * version 2 for more details (a copy is included in the LICENSE file that +- * accompanied this code). +- * +- * You should have received a copy of the GNU General Public License version +- * 2 along with this work; if not, write to the Free Software Foundation, +- * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. +- * +- * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA +- * or visit www.oracle.com if you need additional information or have any +- * questions. +- */ +- +-/* +- * @test +- * bug 8279219 +- * @summary C2 crash when allocating array of size too large +- * @requires vm.compiler2.enabled +- * @library /test/lib / +- * @build sun.hotspot.WhiteBox +- * @run driver ClassFileInstaller sun.hotspot.WhiteBox +- * @run main/othervm -ea -Xbootclasspath/a:. -XX:+UnlockDiagnosticVMOptions -XX:+WhiteBoxAPI -XX:-BackgroundCompilation TestFailedAllocationBadGraph +- */ +- +-import sun.hotspot.WhiteBox; +-import java.lang.reflect.Method; +-import compiler.whitebox.CompilerWhiteBoxTest; +- +-public class TestFailedAllocationBadGraph { +- private static final WhiteBox WHITE_BOX = WhiteBox.getWhiteBox(); +- +- private static long[] array; +- private static int field; +- private static volatile int barrier; +- +- public static void main(String[] args) throws Exception { +- run("test1"); +- run("test2"); +- } +- +- private static void run(String method) throws Exception { +- Method m = TestFailedAllocationBadGraph.class.getDeclaredMethod(method); +- WHITE_BOX.enqueueMethodForCompilation(m, CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION); +- if (!WHITE_BOX.isMethodCompiled(m) || WHITE_BOX.getMethodCompilationLevel(m) != CompilerWhiteBoxTest.COMP_LEVEL_FULL_OPTIMIZATION) { +- throw new RuntimeException("should still be compiled"); +- } +- } +- +- private static int test1() { +- int length = Integer.MAX_VALUE; +- try { +- array = new long[length]; +- } catch (OutOfMemoryError outOfMemoryError) { +- barrier = 0x42; +- length = field; +- } +- return length; +- } +- +- private static int test2() { +- int length = -1; +- try { +- array = new long[length]; +- } catch (OutOfMemoryError outOfMemoryError) { +- barrier = 0x42; +- length = field; +- } +- return length; +- } +-}