< prev index next >
src/hotspot/share/gc/shared/c2/barrierSetC2.cpp
Print this page
rev 56288 : 8231085: C2/GC: Better GC-interface for expanding clone
*** 28,37 ****
--- 28,38 ----
#include "opto/convertnode.hpp"
#include "opto/graphKit.hpp"
#include "opto/idealKit.hpp"
#include "opto/macro.hpp"
#include "opto/narrowptrnode.hpp"
+ #include "opto/runtime.hpp"
#include "utilities/macros.hpp"
// By default this is a no-op.
void BarrierSetC2::resolve_address(C2Access& access) const { }
*** 792,800 ****
0, new_alloc_bytes, T_LONG);
}
return fast_oop;
}
! void BarrierSetC2::clone_barrier_at_expansion(ArrayCopyNode* ac, Node* call, PhaseIterGVN& igvn) const {
! // no barrier
! igvn.replace_node(ac, call);
}
--- 793,823 ----
0, new_alloc_bytes, T_LONG);
}
return fast_oop;
}
! #define XTOP LP64_ONLY(COMMA phase->top())
!
! void BarrierSetC2::clone_at_expansion(PhaseMacroExpand* phase, ArrayCopyNode* ac) const {
! Node* ctrl = ac->in(TypeFunc::Control);
! Node* mem = ac->in(TypeFunc::Memory);
! Node* src = ac->in(ArrayCopyNode::Src);
! Node* src_offset = ac->in(ArrayCopyNode::SrcPos);
! Node* dest = ac->in(ArrayCopyNode::Dest);
! Node* dest_offset = ac->in(ArrayCopyNode::DestPos);
! Node* length = ac->in(ArrayCopyNode::Length);
!
! assert (src_offset == NULL && dest_offset == NULL, "for clone offsets should be null");
!
! const char* copyfunc_name = "arraycopy";
! address copyfunc_addr =
! phase->basictype2arraycopy(T_LONG, NULL, NULL,
! true, copyfunc_name, true);
!
! const TypePtr* raw_adr_type = TypeRawPtr::BOTTOM;
! const TypeFunc* call_type = OptoRuntime::fast_arraycopy_Type();
!
! Node* call = phase->make_leaf_call(ctrl, mem, call_type, copyfunc_addr, copyfunc_name, raw_adr_type, src, dest, length XTOP);
! phase->transform_later(call);
!
! phase->igvn().replace_node(ac, call);
}
< prev index next >