Fri, 28 Sep 2018 14:24:22 +0200
8211232: GraphKit::make_runtime_call() sometimes attaches wrong memory state to call
Reviewed-by: kvn
src/share/vm/opto/graphKit.cpp | file | annotate | diff | comparison | revisions | |
src/share/vm/opto/graphKit.hpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/opto/graphKit.cpp Mon Jan 21 13:31:42 2019 +0800 1.2 +++ b/src/share/vm/opto/graphKit.cpp Fri Sep 28 14:24:22 2018 +0200 1.3 @@ -1787,12 +1787,13 @@ 1.4 // A better answer would be to separate out card marks from other memory. 1.5 // For now, return the input memory state, so that it can be reused 1.6 // after the call, if this call has restricted memory effects. 1.7 -Node* GraphKit::set_predefined_input_for_runtime_call(SafePointNode* call) { 1.8 +Node* GraphKit::set_predefined_input_for_runtime_call(SafePointNode* call, Node* narrow_mem) { 1.9 // Set fixed predefined input arguments 1.10 Node* memory = reset_memory(); 1.11 + Node* m = narrow_mem == NULL ? memory : narrow_mem; 1.12 call->init_req( TypeFunc::Control, control() ); 1.13 call->init_req( TypeFunc::I_O, top() ); // does no i/o 1.14 - call->init_req( TypeFunc::Memory, memory ); // may gc ptrs 1.15 + call->init_req( TypeFunc::Memory, m ); // may gc ptrs 1.16 call->init_req( TypeFunc::FramePtr, frameptr() ); 1.17 call->init_req( TypeFunc::ReturnAdr, top() ); 1.18 return memory; 1.19 @@ -2382,9 +2383,7 @@ 1.20 } else { 1.21 assert(!wide_out, "narrow in => narrow out"); 1.22 Node* narrow_mem = memory(adr_type); 1.23 - prev_mem = reset_memory(); 1.24 - map()->set_memory(narrow_mem); 1.25 - set_predefined_input_for_runtime_call(call); 1.26 + prev_mem = set_predefined_input_for_runtime_call(call, narrow_mem); 1.27 } 1.28 1.29 // Hook each parm in order. Stop looking at the first NULL.
2.1 --- a/src/share/vm/opto/graphKit.hpp Mon Jan 21 13:31:42 2019 +0800 2.2 +++ b/src/share/vm/opto/graphKit.hpp Fri Sep 28 14:24:22 2018 +0200 2.3 @@ -700,7 +700,7 @@ 2.4 void set_predefined_output_for_runtime_call(Node* call, 2.5 Node* keep_mem, 2.6 const TypePtr* hook_mem); 2.7 - Node* set_predefined_input_for_runtime_call(SafePointNode* call); 2.8 + Node* set_predefined_input_for_runtime_call(SafePointNode* call, Node* narrow_mem = NULL); 2.9 2.10 // Replace the call with the current state of the kit. Requires 2.11 // that the call was generated with separate io_projs so that