< prev index next >
src/hotspot/share/opto/callGenerator.cpp
Print this page
rev 52371 : [mq]: lvb.patch
@@ -38,10 +38,13 @@
#include "opto/parse.hpp"
#include "opto/rootnode.hpp"
#include "opto/runtime.hpp"
#include "opto/subnode.hpp"
#include "runtime/sharedRuntime.hpp"
+#if INCLUDE_SHENANDOAHGC
+#include "gc/shenandoah/c2/shenandoahSupport.hpp"
+#endif
// Utility function.
const TypeFunc* CallGenerator::tf() const {
return TypeFunc::make(method());
}
@@ -832,10 +835,13 @@
switch (iid) {
case vmIntrinsics::_invokeBasic:
{
// Get MethodHandle receiver:
Node* receiver = kit.argument(0);
+ #if INCLUDE_SHENANDOAHGC
+ receiver = ShenandoahBarrierNode::skip_through_barrier(receiver);
+ #endif
if (receiver->Opcode() == Op_ConP) {
input_not_const = false;
const TypeOopPtr* oop_ptr = receiver->bottom_type()->is_oopptr();
ciMethod* target = oop_ptr->const_oop()->as_method_handle()->get_vmtarget();
const int vtable_index = Method::invalid_vtable_index;
@@ -859,15 +865,19 @@
}
break;
case vmIntrinsics::_linkToVirtual:
case vmIntrinsics::_linkToStatic:
+
case vmIntrinsics::_linkToSpecial:
case vmIntrinsics::_linkToInterface:
{
// Get MemberName argument:
Node* member_name = kit.argument(callee->arg_size() - 1);
+ #if INCLUDE_SHENANDOAHGC
+ member_name = ShenandoahBarrierNode::skip_through_barrier(member_name);
+ #endif
if (member_name->Opcode() == Op_ConP) {
input_not_const = false;
const TypeOopPtr* oop_ptr = member_name->bottom_type()->is_oopptr();
ciMethod* target = oop_ptr->const_oop()->as_member_name()->get_vmtarget();
< prev index next >