8211232: GraphKit::make_runtime_call() sometimes attaches wrong memory state to call

Fri, 28 Sep 2018 14:24:22 +0200

author
roland
date
Fri, 28 Sep 2018 14:24:22 +0200
changeset 9738
18fd6d87f16f
parent 9737
c06dc174d786
child 9739
bf9503046dd4

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

mercurial