< prev index next >

src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp

Print this page
rev 56465 : [mq]: fix.patch
rev 56466 : [mq]: fix-addr.patch

@@ -1528,10 +1528,23 @@
       VectorSet visited(Thread::current()->resource_area());
       addr = get_load_addr(phase, visited, lrb);
     } else {
       addr = phase->igvn().zerocon(T_OBJECT);
     }
+    if (addr->Opcode() == Op_AddP) {
+      Node* base = addr->in(AddPNode::Base);
+      base = new CheckCastPPNode(ctrl, base, base->bottom_type(), true);
+      phase->register_new_node(base, ctrl);
+      Node* address = addr->in(AddPNode::Address);
+      address = new CheckCastPPNode(ctrl, address, address->bottom_type(), true);
+      phase->register_new_node(address, ctrl);
+
+      addr = addr->clone();
+      addr->set_req(AddPNode::Base, base);
+      addr->set_req(AddPNode::Address, address);
+      phase->register_new_node(addr, ctrl);
+    }
     call_lrb_stub(ctrl, fwd, addr, result_mem, raw_mem, phase);
     region->init_req(_evac_path, ctrl);
     val_phi->init_req(_evac_path, fwd);
     raw_mem_phi->init_req(_evac_path, result_mem);
 

@@ -1777,10 +1790,11 @@
     case Op_CallDynamicJava:
     case Op_CallLeaf:
     case Op_CallStaticJava:
     case Op_ConN:
     case Op_ConP:
+    case Op_Parm:
       return phase->igvn().zerocon(T_OBJECT);
     default:
 #ifdef ASSERT
       in->dump();
       ShouldNotReachHere();
< prev index next >