< prev index next >

src/hotspot/share/ci/ciTypeFlow.hpp

Print this page
@@ -329,18 +329,19 @@
      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
+     // pop_objOrFlatArray and pop_typeArray narrow the tos to ciObjArrayKlass,
+     // ciFlatArrayKlass or ciTypeArrayKlass (resp.). In the rare case that an explicit
      // null is popped from the stack, we return null.  Caller beware.
-     ciObjArrayKlass* pop_objArray() {
+     ciArrayKlass* pop_objOrFlatArray() {
        ciType* array = pop_value();
        if (array == null_type())  return nullptr;
-       assert(array->is_obj_array_klass(), "must be object array type");
-       return array->as_obj_array_klass();
+       assert(array->is_obj_array_klass() || array->is_flat_array_klass(),
+              "must be a flat or an object array type");
+       return array->as_array_klass();
      }
      ciTypeArrayKlass* pop_typeArray() {
        ciType* array = pop_value();
        if (array == null_type())  return nullptr;
        assert(array->is_type_array_klass(), "must be prim array type");

@@ -350,11 +351,11 @@
        push(null_type());
      }
      void      do_null_assert(ciKlass* unloaded_klass);
  
      // Helper convenience routines.
-     void do_aaload(ciBytecodeStream* str);
+     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);

@@ -847,10 +848,12 @@
    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_null_free(ciType* type);
+ 
  private:
    // A work list used during flow analysis.
    Block* _work_list;
  
    // List of blocks in reverse post order
< prev index next >