# HG changeset patch # User eosterlund # Date 1536135102 -7200 # Node ID 8267d480566f7d72b985063f7f70760fbbd209df # Parent d4099c45f14884cc8e4c6d379ed07e0130c8b681 8210158: Accessorize JFR getEventWriter() intrinsics Reviewed-by: kvn, neliasso, roland, rbackman diff -r d4099c45f148 -r 8267d480566f src/hotspot/share/c1/c1_LIRGenerator.cpp --- a/src/hotspot/share/c1/c1_LIRGenerator.cpp Wed Sep 05 11:52:08 2018 +0100 +++ b/src/hotspot/share/c1/c1_LIRGenerator.cpp Wed Sep 05 10:11:42 2018 +0200 @@ -2979,7 +2979,10 @@ __ move_wide(jobj_addr, result); __ cmp(lir_cond_equal, result, LIR_OprFact::oopConst(NULL)); __ branch(lir_cond_equal, T_OBJECT, L_end->label()); - __ move_wide(new LIR_Address(result, T_OBJECT), result); + + LIR_Opr jobj = new_register(T_OBJECT); + __ move(result, jobj); + access_load(IN_NATIVE, T_OBJECT, LIR_OprFact::address(new LIR_Address(jobj, T_OBJECT)), result); __ branch_destination(L_end->label()); } diff -r d4099c45f148 -r 8267d480566f src/hotspot/share/opto/library_call.cpp --- a/src/hotspot/share/opto/library_call.cpp Wed Sep 05 11:52:08 2018 +0100 +++ b/src/hotspot/share/opto/library_call.cpp Wed Sep 05 10:11:42 2018 +0200 @@ -2863,8 +2863,7 @@ Node* tls_ptr = _gvn.transform(new ThreadLocalNode()); Node* jobj_ptr = basic_plus_adr(top(), tls_ptr, - in_bytes(THREAD_LOCAL_WRITER_OFFSET_JFR) - ); + in_bytes(THREAD_LOCAL_WRITER_OFFSET_JFR)); Node* jobj = make_load(control(), jobj_ptr, TypeRawPtr::BOTTOM, T_ADDRESS, MemNode::unordered); @@ -2879,16 +2878,17 @@ PATH_LIMIT }; RegionNode* result_rgn = new RegionNode(PATH_LIMIT); - PhiNode* result_val = new PhiNode(result_rgn, TypePtr::BOTTOM); + PhiNode* result_val = new PhiNode(result_rgn, TypeInstPtr::BOTTOM); Node* jobj_is_null = _gvn.transform(new IfTrueNode(iff_jobj_null)); result_rgn->init_req(_null_path, jobj_is_null); result_val->init_req(_null_path, null()); Node* jobj_is_not_null = _gvn.transform(new IfFalseNode(iff_jobj_null)); - result_rgn->init_req(_normal_path, jobj_is_not_null); - - Node* res = make_load(jobj_is_not_null, jobj, TypeInstPtr::NOTNULL, T_OBJECT, MemNode::unordered); + set_control(jobj_is_not_null); + Node* res = access_load(jobj, TypeInstPtr::NOTNULL, T_OBJECT, + IN_NATIVE | C2_CONTROL_DEPENDENT_LOAD); + result_rgn->init_req(_normal_path, control()); result_val->init_req(_normal_path, res); set_result(result_rgn, result_val);