< prev index next >

src/hotspot/share/ci/ciTypeFlow.hpp

Print this page

        

*** 333,350 **** void pop_array() { assert(type_at_tos() == null_type() || type_at_tos()->is_array_klass(), "must be array type"); pop(); } ! // pop_objArray and pop_typeArray narrow the tos to ciObjArrayKlass ! // or ciTypeArrayKlass (resp.). In the rare case that an explicit // null is popped from the stack, we return NULL. Caller beware. ! ciObjArrayKlass* pop_objArray() { ciType* array = pop_value(); if (array == null_type()) return NULL; ! assert(array->is_obj_array_klass(), "must be object array type"); ! return array->as_obj_array_klass(); } ciTypeArrayKlass* pop_typeArray() { ciType* array = pop_value(); if (array == null_type()) return NULL; assert(array->is_type_array_klass(), "must be prim array type"); --- 333,352 ---- void pop_array() { assert(type_at_tos() == null_type() || type_at_tos()->is_array_klass(), "must be array type"); pop(); } ! // pop_valueOrobjArray and pop_typeArray narrow the tos to ciObjArrayKlass, ! // ciValueArrayKlass or ciTypeArrayKlass (resp.). In the rare case that an explicit // null is popped from the stack, we return NULL. Caller beware. ! ciArrayKlass* pop_objOrValueArray() { ciType* array = pop_value(); if (array == null_type()) return NULL; ! // Value type arrays may contain oop or flattened representation ! assert(array->is_obj_array_klass() || (ValueArrayFlatten && array->is_value_array_klass()), ! "must be value or object array type"); ! return array->as_array_klass(); } ciTypeArrayKlass* pop_typeArray() { ciType* array = pop_value(); if (array == null_type()) return NULL; assert(array->is_type_array_klass(), "must be prim array type");
*** 354,372 **** push(null_type()); } void do_null_assert(ciKlass* unloaded_klass); // Helper convenience routines. ! void do_aaload(ciBytecodeStream* str); void do_checkcast(ciBytecodeStream* str); void do_getfield(ciBytecodeStream* str); void do_getstatic(ciBytecodeStream* str); void do_invoke(ciBytecodeStream* str, bool has_receiver); void do_jsr(ciBytecodeStream* str); void do_ldc(ciBytecodeStream* str); void do_multianewarray(ciBytecodeStream* str); void do_new(ciBytecodeStream* str); void do_newarray(ciBytecodeStream* str); void do_putfield(ciBytecodeStream* str); void do_putstatic(ciBytecodeStream* str); void do_ret(ciBytecodeStream* str); --- 356,376 ---- push(null_type()); } void do_null_assert(ciKlass* unloaded_klass); // Helper convenience routines. ! void do_aload(ciBytecodeStream* str); void do_checkcast(ciBytecodeStream* str); void do_getfield(ciBytecodeStream* str); void do_getstatic(ciBytecodeStream* str); void do_invoke(ciBytecodeStream* str, bool has_receiver); void do_jsr(ciBytecodeStream* str); void do_ldc(ciBytecodeStream* str); void do_multianewarray(ciBytecodeStream* str); void do_new(ciBytecodeStream* str); + void do_defaultvalue(ciBytecodeStream* str); + void do_withfield(ciBytecodeStream* str); void do_newarray(ciBytecodeStream* str); void do_putfield(ciBytecodeStream* str); void do_putstatic(ciBytecodeStream* str); void do_ret(ciBytecodeStream* str);
*** 841,850 **** --- 845,856 ---- int start_block_num() const { return 0; } Block* rpo_at(int rpo) const { assert(0 <= rpo && rpo < block_count(), "out of bounds"); return _block_map[rpo]; } int inc_next_pre_order() { return _next_pre_order++; } + ciType* mark_as_never_null(ciType* type); + private: // A work list used during flow analysis. Block* _work_list; // List of blocks in reverse post order
< prev index next >