916 (aat->isa_oopptr()->klass() == NULL || aat->isa_instptr() ||
917 (aat->isa_aryptr() && aat->isa_aryptr()->klass()->is_obj_array_klass()));
918 if (i == TypeFunc::Parms) {
919 src_has_oops = arg_has_oops;
920 }
921 //
922 // src or dst could be j.l.Object when other is basic type array:
923 //
924 // arraycopy(char[],0,Object*,0,size);
925 // arraycopy(Object*,0,char[],0,size);
926 //
927 // Don't add edges in such cases.
928 //
929 bool arg_is_arraycopy_dest = src_has_oops && is_arraycopy &&
930 arg_has_oops && (i > TypeFunc::Parms);
931 #ifdef ASSERT
932 if (!(is_arraycopy ||
933 (call->as_CallLeaf()->_name != NULL &&
934 (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 ||
935 strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 ||
936 strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 ||
937 strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 ||
938 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 ||
939 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0)
940 ))) {
941 call->dump();
942 fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name));
943 }
944 #endif
945 // Always process arraycopy's destination object since
946 // we need to add all possible edges to references in
947 // source object.
948 if (arg_esc >= PointsToNode::ArgEscape &&
949 !arg_is_arraycopy_dest) {
950 continue;
951 }
952 set_escape_state(arg_ptn, PointsToNode::ArgEscape);
953 if (arg_is_arraycopy_dest) {
954 Node* src = call->in(TypeFunc::Parms);
955 if (src->is_AddP()) {
|
916 (aat->isa_oopptr()->klass() == NULL || aat->isa_instptr() ||
917 (aat->isa_aryptr() && aat->isa_aryptr()->klass()->is_obj_array_klass()));
918 if (i == TypeFunc::Parms) {
919 src_has_oops = arg_has_oops;
920 }
921 //
922 // src or dst could be j.l.Object when other is basic type array:
923 //
924 // arraycopy(char[],0,Object*,0,size);
925 // arraycopy(Object*,0,char[],0,size);
926 //
927 // Don't add edges in such cases.
928 //
929 bool arg_is_arraycopy_dest = src_has_oops && is_arraycopy &&
930 arg_has_oops && (i > TypeFunc::Parms);
931 #ifdef ASSERT
932 if (!(is_arraycopy ||
933 (call->as_CallLeaf()->_name != NULL &&
934 (strcmp(call->as_CallLeaf()->_name, "g1_wb_pre") == 0 ||
935 strcmp(call->as_CallLeaf()->_name, "g1_wb_post") == 0 ||
936 strcmp(call->as_CallLeaf()->_name, "updateBytesCRC32") == 0 ||
937 strcmp(call->as_CallLeaf()->_name, "aescrypt_encryptBlock") == 0 ||
938 strcmp(call->as_CallLeaf()->_name, "aescrypt_decryptBlock") == 0 ||
939 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_encryptAESCrypt") == 0 ||
940 strcmp(call->as_CallLeaf()->_name, "cipherBlockChaining_decryptAESCrypt") == 0)
941 ))) {
942 call->dump();
943 fatal(err_msg_res("EA unexpected CallLeaf %s", call->as_CallLeaf()->_name));
944 }
945 #endif
946 // Always process arraycopy's destination object since
947 // we need to add all possible edges to references in
948 // source object.
949 if (arg_esc >= PointsToNode::ArgEscape &&
950 !arg_is_arraycopy_dest) {
951 continue;
952 }
953 set_escape_state(arg_ptn, PointsToNode::ArgEscape);
954 if (arg_is_arraycopy_dest) {
955 Node* src = call->in(TypeFunc::Parms);
956 if (src->is_AddP()) {
|