540 ArgumentMap arr = state.apop(); 541 set_method_escape(arr); 542 set_modified(arr, OFFSET_ANY, type2size[T_INT]*HeapWordSize); 543 break; 544 } 545 case Bytecodes::_lastore: 546 case Bytecodes::_dastore: 547 { 548 state.lpop(); 549 state.spop(); 550 ArgumentMap arr = state.apop(); 551 set_method_escape(arr); 552 set_modified(arr, OFFSET_ANY, type2size[T_LONG]*HeapWordSize); 553 break; 554 } 555 case Bytecodes::_aastore: 556 { 557 set_global_escape(state.apop()); 558 state.spop(); 559 ArgumentMap arr = state.apop(); 560 set_modified(arr, OFFSET_ANY, type2size[T_OBJECT]*HeapWordSize); 561 break; 562 } 563 case Bytecodes::_pop: 564 state.raw_pop(); 565 break; 566 case Bytecodes::_pop2: 567 state.raw_pop(); 568 state.raw_pop(); 569 break; 570 case Bytecodes::_dup: 571 { ArgumentMap w1 = state.raw_pop(); 572 state.raw_push(w1); 573 state.raw_push(w1); 574 } 575 break; 576 case Bytecodes::_dup_x1: 577 { ArgumentMap w1 = state.raw_pop(); 578 ArgumentMap w2 = state.raw_pop(); 579 state.raw_push(w1); 924 Bytecodes::has_optional_appendix(s.cur_bc_raw()) && 925 target->intrinsic_id() != vmIntrinsics::_invokeBasic) { 926 state.apush(unknown_obj); 927 } 928 // Pass in raw bytecode because we need to see invokehandle instructions. 929 invoke(state, s.cur_bc_raw(), target, holder); 930 // We are using the return type of the declared signature here because 931 // it might be a more concrete type than the one from the target (for 932 // e.g. invokedynamic and invokehandle). 933 ciType* return_type = declared_signature->return_type(); 934 if (!return_type->is_primitive_type()) { 935 state.apush(unknown_obj); 936 } else if (return_type->is_one_word()) { 937 state.spush(); 938 } else if (return_type->is_two_word()) { 939 state.lpush(); 940 } 941 } 942 break; 943 case Bytecodes::_new: 944 state.apush(allocated_obj); 945 break; 946 case Bytecodes::_newarray: 947 case Bytecodes::_anewarray: 948 state.spop(); 949 state.apush(allocated_obj); 950 break; 951 case Bytecodes::_multianewarray: 952 { int i = s.cur_bcp()[3]; 953 while (i-- > 0) state.spop(); 954 state.apush(allocated_obj); 955 } 956 break; 957 case Bytecodes::_arraylength: 958 set_method_escape(state.apop()); 959 state.spush(); 960 break; 961 case Bytecodes::_athrow: 962 set_global_escape(state.apop()); 963 fall_through = false; 964 break; 965 case Bytecodes::_checkcast: | 540 ArgumentMap arr = state.apop(); 541 set_method_escape(arr); 542 set_modified(arr, OFFSET_ANY, type2size[T_INT]*HeapWordSize); 543 break; 544 } 545 case Bytecodes::_lastore: 546 case Bytecodes::_dastore: 547 { 548 state.lpop(); 549 state.spop(); 550 ArgumentMap arr = state.apop(); 551 set_method_escape(arr); 552 set_modified(arr, OFFSET_ANY, type2size[T_LONG]*HeapWordSize); 553 break; 554 } 555 case Bytecodes::_aastore: 556 { 557 set_global_escape(state.apop()); 558 state.spop(); 559 ArgumentMap arr = state.apop(); 560 // If the array is flattened, a larger part of it is modified than 561 // the size of a reference. However, if OFFSET_ANY is given as 562 // parameter to set_modified(), size is not taken into account. 563 set_modified(arr, OFFSET_ANY, type2size[T_OBJECT]*HeapWordSize); 564 break; 565 } 566 case Bytecodes::_pop: 567 state.raw_pop(); 568 break; 569 case Bytecodes::_pop2: 570 state.raw_pop(); 571 state.raw_pop(); 572 break; 573 case Bytecodes::_dup: 574 { ArgumentMap w1 = state.raw_pop(); 575 state.raw_push(w1); 576 state.raw_push(w1); 577 } 578 break; 579 case Bytecodes::_dup_x1: 580 { ArgumentMap w1 = state.raw_pop(); 581 ArgumentMap w2 = state.raw_pop(); 582 state.raw_push(w1); 927 Bytecodes::has_optional_appendix(s.cur_bc_raw()) && 928 target->intrinsic_id() != vmIntrinsics::_invokeBasic) { 929 state.apush(unknown_obj); 930 } 931 // Pass in raw bytecode because we need to see invokehandle instructions. 932 invoke(state, s.cur_bc_raw(), target, holder); 933 // We are using the return type of the declared signature here because 934 // it might be a more concrete type than the one from the target (for 935 // e.g. invokedynamic and invokehandle). 936 ciType* return_type = declared_signature->return_type(); 937 if (!return_type->is_primitive_type()) { 938 state.apush(unknown_obj); 939 } else if (return_type->is_one_word()) { 940 state.spush(); 941 } else if (return_type->is_two_word()) { 942 state.lpush(); 943 } 944 } 945 break; 946 case Bytecodes::_new: 947 case Bytecodes::_defaultvalue: 948 state.apush(allocated_obj); 949 break; 950 case Bytecodes::_withfield: { 951 bool will_link; 952 ciField* field = s.get_field(will_link); 953 BasicType field_type = field->type()->basic_type(); 954 if (field_type == T_OBJECT || field_type == T_ARRAY) { 955 set_global_escape(state.apop()); 956 } else if (type2size[field_type] == 1) { 957 state.spop(); 958 } else { 959 state.lpop(); 960 } 961 set_method_escape(state.apop()); 962 state.apush(allocated_obj); 963 break; 964 } 965 case Bytecodes::_newarray: 966 case Bytecodes::_anewarray: 967 state.spop(); 968 state.apush(allocated_obj); 969 break; 970 case Bytecodes::_multianewarray: 971 { int i = s.cur_bcp()[3]; 972 while (i-- > 0) state.spop(); 973 state.apush(allocated_obj); 974 } 975 break; 976 case Bytecodes::_arraylength: 977 set_method_escape(state.apop()); 978 state.spush(); 979 break; 980 case Bytecodes::_athrow: 981 set_global_escape(state.apop()); 982 fall_through = false; 983 break; 984 case Bytecodes::_checkcast: |