< prev index next > src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp
Print this page
{ -1, ShenandoahNone}, { -1, ShenandoahNone}, { -1, ShenandoahNone} },
};
if (call->is_call_to_arraycopystub()) {
Node* dest = nullptr;
- const TypeTuple* args = n->as_Call()->_tf->domain();
+ const TypeTuple* args = n->as_Call()->_tf->domain_sig();
for (uint i = TypeFunc::Parms, j = 0; i < args->cnt(); i++) {
if (args->field_at(i)->isa_ptr()) {
j++;
if (j == 2) {
dest = n->in(i);
for (; i < others_len; i++) {
if (others[i].opcode == n->Opcode()) {
break;
}
}
- uint stop = n->is_Call() ? n->as_Call()->tf()->domain()->cnt() : n->req();
+ uint stop = n->is_Call() ? n->as_Call()->tf()->domain_sig()->cnt() : n->req();
if (i != others_len) {
const uint inputs_len = sizeof(others[0].inputs) / sizeof(others[0].inputs[0]);
for (uint j = 0; j < inputs_len; j++) {
int pos = others[i].inputs[j].pos;
if (pos == -1) {
}
}
}
} else {
if (c->is_Call() && c->as_Call()->adr_type() != nullptr) {
- CallProjections projs;
- c->as_Call()->extract_projections(&projs, true, false);
- if (projs.fallthrough_memproj != nullptr) {
- if (projs.fallthrough_memproj->adr_type() == TypePtr::BOTTOM) {
- if (projs.catchall_memproj == nullptr) {
- mem = projs.fallthrough_memproj;
+ CallProjections* projs = c->as_Call()->extract_projections(true, false);
+ if (projs->fallthrough_memproj != nullptr) {
+ if (projs->fallthrough_memproj->adr_type() == TypePtr::BOTTOM) {
+ if (projs->catchall_memproj == nullptr) {
+ mem = projs->fallthrough_memproj;
} else {
- if (phase->is_dominator(projs.fallthrough_catchproj, ctrl)) {
- mem = projs.fallthrough_memproj;
+ if (phase->is_dominator(projs->fallthrough_catchproj, ctrl)) {
+ mem = projs->fallthrough_memproj;
} else {
- assert(phase->is_dominator(projs.catchall_catchproj, ctrl), "one proj must dominate barrier");
- mem = projs.catchall_memproj;
+ assert(phase->is_dominator(projs->catchall_catchproj, ctrl), "one proj must dominate barrier");
+ mem = projs->catchall_memproj;
}
}
}
} else {
Node* proj = c->as_Call()->proj_out(TypeFunc::Memory);
}
}
}
}
- static Node* create_phis_on_call_return(Node* ctrl, Node* c, Node* n, Node* n_clone, const CallProjections& projs, PhaseIdealLoop* phase) {
+ static Node* create_phis_on_call_return(Node* ctrl, Node* c, Node* n, Node* n_clone, const CallProjections* projs, PhaseIdealLoop* phase) {
Node* region = nullptr;
while (c != ctrl) {
if (c->is_Region()) {
region = c;
}
}
assert(region != nullptr, "");
Node* phi = new PhiNode(region, n->bottom_type());
for (uint j = 1; j < region->req(); j++) {
Node* in = region->in(j);
- if (phase->is_dominator(projs.fallthrough_catchproj, in)) {
+ if (phase->is_dominator(projs->fallthrough_catchproj, in)) {
phi->init_req(j, n);
- } else if (phase->is_dominator(projs.catchall_catchproj, in)) {
+ } else if (phase->is_dominator(projs->catchall_catchproj, in)) {
phi->init_req(j, n_clone);
} else {
phi->init_req(j, create_phis_on_call_return(ctrl, in, n, n_clone, projs, phase));
}
}
stack.pop();
}
} while(stack.size() > 0);
continue;
}
- CallProjections projs;
- call->extract_projections(&projs, false, false);
-
+ CallProjections* projs = call->extract_projections(false, false);
#ifdef ASSERT
VectorSet cloned;
#endif
Node* lrb_clone = lrb->clone();
- phase->register_new_node(lrb_clone, projs.catchall_catchproj);
- phase->set_ctrl(lrb, projs.fallthrough_catchproj);
+ phase->register_new_node(lrb_clone, projs->catchall_catchproj);
+ phase->set_ctrl(lrb, projs->fallthrough_catchproj);
stack.push(lrb, 0);
clones.push(lrb_clone);
do {
uint idx = stack.index();
Node* n_clone = clones.at(clones.size()-1);
if (idx < n->outcnt()) {
Node* u = n->raw_out(idx);
Node* c = phase->ctrl_or_self(u);
- if (phase->is_dominator(call, c) && phase->is_dominator(c, projs.fallthrough_proj)) {
+ if (phase->is_dominator(call, c) && phase->is_dominator(c, projs->fallthrough_proj)) {
stack.set_index(idx+1);
assert(!u->is_CFG(), "");
stack.push(u, 0);
assert(!cloned.test_set(u->_idx), "only one clone");
Node* u_clone = u->clone();
int nb = u_clone->replace_edge(n, n_clone, &phase->igvn());
assert(nb > 0, "should have replaced some uses");
- phase->register_new_node(u_clone, projs.catchall_catchproj);
+ phase->register_new_node(u_clone, projs->catchall_catchproj);
clones.push(u_clone);
- phase->set_ctrl(u, projs.fallthrough_catchproj);
+ phase->set_ctrl(u, projs->fallthrough_catchproj);
} else {
bool replaced = false;
if (u->is_Phi()) {
for (uint k = 1; k < u->req(); k++) {
if (u->in(k) == n) {
- if (phase->is_dominator(projs.catchall_catchproj, u->in(0)->in(k))) {
+ if (phase->is_dominator(projs->catchall_catchproj, u->in(0)->in(k))) {
phase->igvn().replace_input_of(u, k, n_clone);
replaced = true;
- } else if (!phase->is_dominator(projs.fallthrough_catchproj, u->in(0)->in(k))) {
+ } else if (!phase->is_dominator(projs->fallthrough_catchproj, u->in(0)->in(k))) {
phase->igvn().replace_input_of(u, k, create_phis_on_call_return(ctrl, u->in(0)->in(k), n, n_clone, projs, phase));
replaced = true;
}
}
}
} else {
- if (phase->is_dominator(projs.catchall_catchproj, c)) {
+ if (phase->is_dominator(projs->catchall_catchproj, c)) {
phase->igvn().rehash_node_delayed(u);
int nb = u->replace_edge(n, n_clone, &phase->igvn());
assert(nb > 0, "should have replaced some uses");
replaced = true;
- } else if (!phase->is_dominator(projs.fallthrough_catchproj, c)) {
+ } else if (!phase->is_dominator(projs->fallthrough_catchproj, c)) {
if (u->is_If()) {
// Can't break If/Bool/Cmp chain
assert(n->is_Bool(), "unexpected If shape");
assert(stack.node_at(stack.size()-2)->is_Cmp(), "unexpected If shape");
assert(n_clone->is_Bool(), "unexpected clone");
Node* MemoryGraphFixer::get_ctrl(Node* n) const {
Node* c = _phase->get_ctrl(n);
if (n->is_Proj() && n->in(0) != nullptr && n->in(0)->is_Call()) {
assert(c == n->in(0), "");
CallNode* call = c->as_Call();
- CallProjections projs;
- call->extract_projections(&projs, true, false);
- if (projs.catchall_memproj != nullptr) {
- if (projs.fallthrough_memproj == n) {
- c = projs.fallthrough_catchproj;
+ CallProjections* projs = call->extract_projections(true, false);
+ if (projs->catchall_memproj != nullptr) {
+ if (projs->fallthrough_memproj == n) {
+ c = projs->fallthrough_catchproj;
} else {
- assert(projs.catchall_memproj == n, "");
- c = projs.catchall_catchproj;
+ assert(projs->catchall_memproj == n, "");
+ c = projs->catchall_catchproj;
}
}
}
return c;
}
< prev index next >