< prev index next >
src/hotspot/share/runtime/deoptimization.cpp
Print this page
@@ -47,10 +47,11 @@
#include "oops/oop.inline.hpp"
#include "oops/fieldStreams.inline.hpp"
#include "oops/typeArrayOop.inline.hpp"
#include "oops/verifyOopClosure.hpp"
#include "prims/jvmtiThreadState.hpp"
+#include "prims/vectorSupport.hpp"
#include "runtime/atomic.hpp"
#include "runtime/biasedLocking.hpp"
#include "runtime/deoptimization.hpp"
#include "runtime/fieldDescriptor.hpp"
#include "runtime/fieldDescriptor.inline.hpp"
@@ -1000,11 +1001,19 @@
}
}
#endif // INCLUDE_JVMCI || INCLUDE_AOT
InstanceKlass* ik = InstanceKlass::cast(k);
if (obj == NULL) {
+#ifdef COMPILER2
+ if (EnableVectorSupport && VectorSupport::is_vector(ik)) {
+ obj = VectorSupport::allocate_vector(ik, fr, reg_map, sv, THREAD);
+ } else {
+ obj = ik->allocate_instance(THREAD);
+ }
+#else
obj = ik->allocate_instance(THREAD);
+#endif // COMPILER2
}
} else if (k->is_typeArray_klass()) {
TypeArrayKlass* ak = TypeArrayKlass::cast(k);
assert(sv->field_size() % type2size[ak->element_type()] == 0, "non-integral array length");
int len = sv->field_size() / type2size[ak->element_type()];
@@ -1337,10 +1346,15 @@
// Don't reassign fields of boxes that came from a cache. Caches may be in CDS.
if (sv->is_auto_box() && ((AutoBoxObjectValue*) sv)->is_cached()) {
continue;
}
#endif // INCLUDE_JVMCI || INCLUDE_AOT
+#ifdef COMPILER2
+ if (EnableVectorSupport && VectorSupport::is_vector(k)) {
+ continue; // skip field reassignment for vectors
+ }
+#endif
if (k->is_instance_klass()) {
InstanceKlass* ik = InstanceKlass::cast(k);
reassign_fields_by_klass(ik, fr, reg_map, sv, 0, obj(), skip_internal);
} else if (k->is_typeArray_klass()) {
TypeArrayKlass* ak = TypeArrayKlass::cast(k);
< prev index next >