changeset 9188:18fd6d87f16f

8211232: GraphKit::make_runtime_call() sometimes attaches wrong memory state to call Reviewed-by: kvn
author roland
date Fri, 28 Sep 2018 14:24:22 +0200
parents c06dc174d786
children bf9503046dd4
files src/share/vm/opto/graphKit.cpp src/share/vm/opto/graphKit.hpp
diffstat 2 files changed, 5 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/src/share/vm/opto/graphKit.cpp	Mon Jan 21 13:31:42 2019 +0800
+++ b/src/share/vm/opto/graphKit.cpp	Fri Sep 28 14:24:22 2018 +0200
@@ -1787,12 +1787,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, Node* narrow_mem) {
   // Set fixed predefined input arguments
   Node* memory = reset_memory();
+  Node* m = narrow_mem == NULL ? memory : narrow_mem;
   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;
@@ -2382,9 +2383,7 @@
   } 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, narrow_mem);
   }
 
   // Hook each parm in order.  Stop looking at the first NULL.
--- a/src/share/vm/opto/graphKit.hpp	Mon Jan 21 13:31:42 2019 +0800
+++ b/src/share/vm/opto/graphKit.hpp	Fri Sep 28 14:24:22 2018 +0200
@@ -700,7 +700,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, Node* narrow_mem = NULL);
 
   // Replace the call with the current state of the kit.  Requires
   // that the call was generated with separate io_projs so that