< prev index next >

src/hotspot/share/c1/c1_Instruction.cpp

Print this page

@@ -27,10 +27,12 @@
 #include "c1/c1_Instruction.hpp"
 #include "c1/c1_InstructionPrinter.hpp"
 #include "c1/c1_ValueStack.hpp"
 #include "ci/ciObjArrayKlass.hpp"
 #include "ci/ciTypeArrayKlass.hpp"
+#include "ci/ciValueArrayKlass.hpp"
+#include "ci/ciValueKlass.hpp"
 
 
 // Implementation of Instruction
 
 

@@ -110,10 +112,22 @@
     return t->as_klass()->exact_klass();
   }
   return NULL;
 }
 
+bool Instruction::is_flattened_array() const {
+  if (ValueArrayFlatten) {
+    ciType* type = declared_type();
+    if (type != NULL &&
+        type->is_value_array_klass() &&
+        type->as_value_array_klass()->element_klass()->as_value_klass()->flatten_array()) {
+    return true;
+    }
+  }
+
+  return false;
+}
 
 #ifndef PRODUCT
 void Instruction::check_state(ValueStack* state) {
   if (state != NULL) {
     state->verify();

@@ -221,10 +235,27 @@
 
 ciType* NewInstance::declared_type() const {
   return exact_type();
 }
 
+Value NewValueTypeInstance::depends_on() {
+  if (_depends_on != this) {
+    if (_depends_on->as_NewValueTypeInstance() != NULL) {
+      return _depends_on->as_NewValueTypeInstance()->depends_on();
+    }
+  }
+  return _depends_on;
+}
+
+ciType* NewValueTypeInstance::exact_type() const {
+  return klass();
+}
+
+ciType* NewValueTypeInstance::declared_type() const {
+  return exact_type();
+}
+
 ciType* CheckCast::declared_type() const {
   return klass();
 }
 
 // Implementation of ArithmeticOp
< prev index next >