< prev index next >

src/hotspot/share/ci/ciArray.cpp

Print this page
*** 25,20 ***
--- 25,23 ---
  #include "ci/ciArray.hpp"
  #include "ci/ciArrayKlass.hpp"
  #include "ci/ciConstant.hpp"
  #include "ci/ciKlass.hpp"
  #include "ci/ciUtilities.inline.hpp"
+ #include "oops/flatArrayKlass.hpp"
+ #include "oops/layoutKind.hpp"
  #include "oops/objArrayOop.inline.hpp"
  #include "oops/oop.inline.hpp"
  #include "oops/typeArrayOop.inline.hpp"
  #include "utilities/powerOfTwo.hpp"
  
  // ciArray
  //
  // This class represents an arrayOop in the HotSpot virtual
  // machine.
  static BasicType fixup_element_type(BasicType bt) {
+   if (bt == T_FLAT_ELEMENT) return T_OBJECT;
    if (is_reference_type(bt))  return T_OBJECT;
    if (bt == T_BOOLEAN)  return T_BYTE;
    return bt;
  }
  

*** 117,10 ***
--- 120,21 ---
      return ciConstant();
    }
    return element_value((jint) index);
  }
  
+ bool ciArray::is_null_free() {
+   VM_ENTRY_MARK;
+   return get_oop()->is_null_free_array();
+ }
+ 
+ bool ciArray::is_atomic() {
+   VM_ENTRY_MARK;
+   arrayOop oop = get_arrayOop();
+   return !oop->is_flatArray() || LayoutKindHelper::is_atomic_flat(FlatArrayKlass::cast(oop->klass())->layout_kind());
+ }
+ 
  // ------------------------------------------------------------------
  // ciArray::print_impl
  //
  // Implementation of the print method.
  void ciArray::print_impl(outputStream* st) {
< prev index next >