< 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 >