941 // Don't add edges in such cases.
942 //
943 bool arg_is_arraycopy_dest = src_has_oops && is_arraycopy &&
944 arg_has_oops && (i > TypeFunc::Parms);
945 #ifdef ASSERT
946 if (!(is_arraycopy ||
947 (call->as_CallLeaf()->_name != NULL &&
948 (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 ||
949 strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 ||
950 strcmp(call->as_CallLeaf()->_name, "updateBytesCRC32") == 0 ||
951 strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 ||
952 strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 ||
953 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 ||
954 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0 ||
955 strcmp(call->as_CallLeaf()->_name, "sha1_implCompress") == 0 ||
956 strcmp(call->as_CallLeaf()->_name, "sha1_implCompressMB") == 0 ||
957 strcmp(call->as_CallLeaf()->_name, "sha256_implCompress") == 0 ||
958 strcmp(call->as_CallLeaf()->_name, "sha256_implCompressMB") == 0 ||
959 strcmp(call->as_CallLeaf()->_name, "sha512_implCompress") == 0 ||
960 strcmp(call->as_CallLeaf()->_name, "sha512_implCompressMB") == 0 ||
961 strcmp(call->as_CallLeaf()->_name, "multiplyToLen") == 0)
962 ))) {
963 call->dump();
964 fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name));
965 }
966 #endif
967 // Always process arraycopy's destination object since
968 // we need to add all possible edges to references in
969 // source object.
970 if (arg_esc >= PointsToNode::ArgEscape &&
971 !arg_is_arraycopy_dest) {
972 continue;
973 }
974 set_escape_state(arg_ptn, PointsToNode::ArgEscape);
975 if (arg_is_arraycopy_dest) {
976 Node* src = call->in(TypeFunc::Parms);
977 if (src->is_AddP()) {
978 src = get_addp_base(src);
979 }
980 PointsToNode* src_ptn = ptnode_adr(src->_idx);
981 assert(src_ptn != NULL, "should be registered");
|
941 // Don't add edges in such cases.
942 //
943 bool arg_is_arraycopy_dest = src_has_oops && is_arraycopy &&
944 arg_has_oops && (i > TypeFunc::Parms);
945 #ifdef ASSERT
946 if (!(is_arraycopy ||
947 (call->as_CallLeaf()->_name != NULL &&
948 (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 ||
949 strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 ||
950 strcmp(call->as_CallLeaf()->_name, "updateBytesCRC32") == 0 ||
951 strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 ||
952 strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 ||
953 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 ||
954 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0 ||
955 strcmp(call->as_CallLeaf()->_name, "sha1_implCompress") == 0 ||
956 strcmp(call->as_CallLeaf()->_name, "sha1_implCompressMB") == 0 ||
957 strcmp(call->as_CallLeaf()->_name, "sha256_implCompress") == 0 ||
958 strcmp(call->as_CallLeaf()->_name, "sha256_implCompressMB") == 0 ||
959 strcmp(call->as_CallLeaf()->_name, "sha512_implCompress") == 0 ||
960 strcmp(call->as_CallLeaf()->_name, "sha512_implCompressMB") == 0 ||
961 strcmp(call->as_CallLeaf()->_name, "multiplyToLen") == 0 ||
962 strcmp(call->as_CallLeaf()->_name, "squareToLen") == 0 ||
963 strcmp(call->as_CallLeaf()->_name, "mulAdd") == 0)
964 ))) {
965 call->dump();
966 fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name));
967 }
968 #endif
969 // Always process arraycopy's destination object since
970 // we need to add all possible edges to references in
971 // source object.
972 if (arg_esc >= PointsToNode::ArgEscape &&
973 !arg_is_arraycopy_dest) {
974 continue;
975 }
976 set_escape_state(arg_ptn, PointsToNode::ArgEscape);
977 if (arg_is_arraycopy_dest) {
978 Node* src = call->in(TypeFunc::Parms);
979 if (src->is_AddP()) {
980 src = get_addp_base(src);
981 }
982 PointsToNode* src_ptn = ptnode_adr(src->_idx);
983 assert(src_ptn != NULL, "should be registered");
|