< prev index next >

src/hotspot/share/ci/bcEscapeAnalyzer.cpp

Print this page




 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:


< prev index next >