< prev index next >
src/hotspot/share/runtime/deoptimization.cpp
Print this page
*** 47,56 ****
--- 47,57 ----
#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,1010 ****
--- 1001,1019 ----
}
}
#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,1346 ****
--- 1346,1360 ----
// 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 >