< prev index next >
src/hotspot/share/gc/shenandoah/c2/shenandoahSupport.cpp
Print this page
*** 1029,1039 ****
{ -1, ShenandoahNone}, { -1, ShenandoahNone}, { -1, ShenandoahNone} },
};
if (call->is_call_to_arraycopystub()) {
Node* dest = NULL;
! const TypeTuple* args = n->as_Call()->_tf->domain();
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);
--- 1029,1039 ----
{ -1, ShenandoahNone}, { -1, ShenandoahNone}, { -1, ShenandoahNone} },
};
if (call->is_call_to_arraycopystub()) {
Node* dest = NULL;
! 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);
*** 1155,1165 ****
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();
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) {
--- 1155,1165 ----
for (; i < others_len; i++) {
if (others[i].opcode == n->Opcode()) {
break;
}
}
! 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) {
*** 2312,2333 ****
}
}
}
} else {
if (c->is_Call() && c->as_Call()->adr_type() != NULL) {
! CallProjections projs;
! c->as_Call()->extract_projections(&projs, true, false);
! if (projs.fallthrough_memproj != NULL) {
! if (projs.fallthrough_memproj->adr_type() == TypePtr::BOTTOM) {
! if (projs.catchall_memproj == NULL) {
! mem = projs.fallthrough_memproj;
} else {
! 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;
}
}
}
} else {
Node* proj = c->as_Call()->proj_out(TypeFunc::Memory);
--- 2312,2332 ----
}
}
}
} else {
if (c->is_Call() && c->as_Call()->adr_type() != NULL) {
! CallProjections* projs = c->as_Call()->extract_projections(true, false);
! if (projs->fallthrough_memproj != NULL) {
! if (projs->fallthrough_memproj->adr_type() == TypePtr::BOTTOM) {
! if (projs->catchall_memproj == NULL) {
! mem = projs->fallthrough_memproj;
} else {
! 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;
}
}
}
} else {
Node* proj = c->as_Call()->proj_out(TypeFunc::Memory);
*** 3756,3773 ****
Node* MemoryGraphFixer::get_ctrl(Node* n) const {
Node* c = _phase->get_ctrl(n);
if (n->is_Proj() && n->in(0) != NULL && 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 != NULL) {
! if (projs.fallthrough_memproj == n) {
! c = projs.fallthrough_catchproj;
} else {
! assert(projs.catchall_memproj == n, "");
! c = projs.catchall_catchproj;
}
}
}
return c;
}
--- 3755,3771 ----
Node* MemoryGraphFixer::get_ctrl(Node* n) const {
Node* c = _phase->get_ctrl(n);
if (n->is_Proj() && n->in(0) != NULL && n->in(0)->is_Call()) {
assert(c == n->in(0), "");
CallNode* call = c->as_Call();
! CallProjections* projs = call->extract_projections(true, false);
! if (projs->catchall_memproj != NULL) {
! if (projs->fallthrough_memproj == n) {
! c = projs->fallthrough_catchproj;
} else {
! assert(projs->catchall_memproj == n, "");
! c = projs->catchall_catchproj;
}
}
}
return c;
}
< prev index next >