RFR: Fix ExtendedDTraceProbes with Shenandoah

Roland Westrelin rwestrel at redhat.com
Fri Sep 21 13:09:11 UTC 2018


> Passed most tier2 with ExtendedDTraceProbes (some of tests timeout).  Of 
> course, still failed CriticalNativeArgs.java with C2/traversal.

The C2 fix is below. Let me know if that works ok.

Roland.

diff --git a/src/hotspot/share/opto/arraycopynode.cpp b/src/hotspot/share/opto/arraycopynode.cpp
--- a/src/hotspot/share/opto/arraycopynode.cpp
+++ b/src/hotspot/share/opto/arraycopynode.cpp
@@ -60,7 +60,7 @@
                                    Node* src_length, Node* dest_length) {
 
   ArrayCopyNode* ac = new ArrayCopyNode(kit->C, alloc_tightly_coupled, has_negative_length_guard);
-  Node* prev_mem = kit->set_predefined_input_for_runtime_call(ac);
+  Node* prev_mem = kit->set_predefined_input_for_runtime_call(ac, Compile::AliasIdxBot);
 
   ac->init_req(ArrayCopyNode::Src, src);
   ac->init_req(ArrayCopyNode::SrcPos, src_offset);
diff --git a/src/hotspot/share/opto/graphKit.cpp b/src/hotspot/share/opto/graphKit.cpp
--- a/src/hotspot/share/opto/graphKit.cpp
+++ b/src/hotspot/share/opto/graphKit.cpp
@@ -1812,12 +1812,13 @@
 // A better answer would be to separate out card marks from other memory.
 // For now, return the input memory state, so that it can be reused
 // after the call, if this call has restricted memory effects.
-Node* GraphKit::set_predefined_input_for_runtime_call(SafePointNode* call) {
+Node* GraphKit::set_predefined_input_for_runtime_call(SafePointNode* call, int alias_idx) {
   // Set fixed predefined input arguments
   Node* memory = reset_memory();
+  Node* m = (alias_idx == Compile::AliasIdxBot || !memory->is_MergeMem()) ? memory : memory->as_MergeMem()->memory_at(alias_idx);
   call->init_req( TypeFunc::Control,   control()  );
   call->init_req( TypeFunc::I_O,       top()      ); // does no i/o
-  call->init_req( TypeFunc::Memory,    memory     ); // may gc ptrs
+  call->init_req( TypeFunc::Memory,    m          ); // may gc ptrs
   call->init_req( TypeFunc::FramePtr,  frameptr() );
   call->init_req( TypeFunc::ReturnAdr, top()      );
   return memory;
@@ -2469,13 +2470,10 @@
 
   Node* prev_mem = NULL;
   if (wide_in) {
-    prev_mem = set_predefined_input_for_runtime_call(call);
+    prev_mem = set_predefined_input_for_runtime_call(call, Compile::AliasIdxBot);
   } else {
     assert(!wide_out, "narrow in => narrow out");
-    Node* narrow_mem = memory(adr_type);
-    prev_mem = reset_memory();
-    map()->set_memory(narrow_mem);
-    set_predefined_input_for_runtime_call(call);
+    prev_mem = set_predefined_input_for_runtime_call(call, C->get_alias_index(adr_type));
   }
 
   // Hook each parm in order.  Stop looking at the first NULL.
diff --git a/src/hotspot/share/opto/graphKit.hpp b/src/hotspot/share/opto/graphKit.hpp
--- a/src/hotspot/share/opto/graphKit.hpp
+++ b/src/hotspot/share/opto/graphKit.hpp
@@ -701,7 +701,7 @@
   void  set_predefined_output_for_runtime_call(Node* call,
                                                Node* keep_mem,
                                                const TypePtr* hook_mem);
-  Node* set_predefined_input_for_runtime_call(SafePointNode* call);
+  Node* set_predefined_input_for_runtime_call(SafePointNode* call, int alias_idx);
 
   // Replace the call with the current state of the kit.  Requires
   // that the call was generated with separate io_projs so that


More information about the shenandoah-dev mailing list