< prev index next > src/hotspot/share/opto/phaseX.cpp
Print this page
//=============================================================================
Node* PhaseGVN::apply_ideal(Node* k, bool can_reshape) {
- Node* i = BarrierSet::barrier_set()->barrier_set_c2()->ideal_node(this, k, can_reshape);
- if (i == nullptr) {
- i = k->Ideal(this, can_reshape);
- }
- return i;
+ return k->Ideal(this, can_reshape);
}
//------------------------------transform--------------------------------------
// Return a node which computes the same function as this node, but
// in a faster or cheaper fashion.
}
assert(!(i < imax), "sanity");
}
} else if (dead->is_data_proj_of_pure_function(in)) {
_worklist.push(in);
- } else {
- BarrierSet::barrier_set()->barrier_set_c2()->enqueue_useful_gc_barrier(this, in);
}
if (ReduceFieldZeroing && dead->is_Load() && i == MemNode::Memory &&
in->is_Proj() && in->in(0) != nullptr && in->in(0)->is_Initialize()) {
// A Load that directly follows an InitializeNode is
// going away. The Stores that follow are candidates
Node* imem = use->as_Initialize()->proj_out_or_null(TypeFunc::Memory);
if (imem != nullptr) add_users_to_worklist0(imem, worklist);
}
// Loading the java mirror from a Klass requires two loads and the type
// of the mirror load depends on the type of 'n'. See LoadNode::Value().
- // LoadBarrier?(LoadP(LoadP(AddP(foo:Klass, #java_mirror))))
- BarrierSetC2* bs = BarrierSet::barrier_set()->barrier_set_c2();
- bool has_load_barrier_nodes = bs->has_load_barrier_nodes();
-
+ // LoadP(LoadP(AddP(foo:Klass, #java_mirror)))
if (use_op == Op_LoadP && use->bottom_type()->isa_rawptr()) {
for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) {
Node* u = use->fast_out(i2);
const Type* ut = u->bottom_type();
if (u->Opcode() == Op_LoadP && ut->isa_instptr()) {
- if (has_load_barrier_nodes) {
- // Search for load barriers behind the load
- for (DUIterator_Fast i3max, i3 = u->fast_outs(i3max); i3 < i3max; i3++) {
- Node* b = u->fast_out(i3);
- if (bs->is_gc_barrier_node(b)) {
- worklist.push(b);
- }
- }
- }
worklist.push(u);
}
}
}
if (use->Opcode() == Op_OpaqueZeroTripGuard) {
}
// Loading the java mirror from a Klass requires two loads and the type of the mirror load depends on the type of 'n'.
// See LoadNode::Value().
void PhaseCCP::push_loadp(Unique_Node_List& worklist, const Node* use) const {
- BarrierSetC2* barrier_set = BarrierSet::barrier_set()->barrier_set_c2();
- bool has_load_barrier_nodes = barrier_set->has_load_barrier_nodes();
-
if (use->Opcode() == Op_LoadP && use->bottom_type()->isa_rawptr()) {
for (DUIterator_Fast imax, i = use->fast_outs(imax); i < imax; i++) {
Node* loadp = use->fast_out(i);
const Type* ut = loadp->bottom_type();
if (loadp->Opcode() == Op_LoadP && ut->isa_instptr() && ut != type(loadp)) {
- if (has_load_barrier_nodes) {
- // Search for load barriers behind the load
- push_load_barrier(worklist, barrier_set, loadp);
- }
worklist.push(loadp);
}
}
}
}
}
break;
default:
break;
}
-
- BarrierSet::barrier_set()->barrier_set_c2()->enqueue_useful_gc_barrier(igvn, old);
}
}
void Node::set_req_X(uint i, Node *n, PhaseGVN *gvn) {
PhaseIterGVN* igvn = gvn->is_IterGVN();
< prev index next >