--- old/src/share/vm/ci/ciValueKlass.hpp 2017-07-04 18:39:47.056152912 +0200 +++ new/src/share/vm/ci/ciValueKlass.hpp 2017-07-04 18:39:46.982153253 +0200 @@ -26,9 +26,11 @@ #define SHARE_VM_CI_CIVALUEKLASS_HPP #include "ci/ciConstantPoolCache.hpp" +#include "ci/ciEnv.hpp" #include "ci/ciFlags.hpp" #include "ci/ciInstanceKlass.hpp" #include "ci/ciSymbol.hpp" +#include "oops/valueKlass.hpp" // ciValueKlass // @@ -52,6 +54,10 @@ const char* type_string() { return "ciValueKlass"; } int compute_field_index_map(); + ValueKlass* get_valueKlass() const { + return ValueKlass::cast(get_Klass()); + } + public: bool is_valuetype() const { return true; } bool flatten_array() const; @@ -69,6 +75,12 @@ int first_field_offset() const; int value_arg_slots(); + + // Can a value type instance of this type be returned as multiple + // returned values? + bool can_be_returned_as_fields() const { + return this != ciEnv::current()->___Value_klass() && get_valueKlass()->return_regs() != NULL; + } }; #endif // SHARE_VM_CI_CIVALUEKLASS_HPP