Merge
This commit is contained in:
commit
4a2266601a
@ -465,9 +465,11 @@ void TemplateInterpreterGenerator::set_wide_entry_point(Template* t, address& we
|
|||||||
void TemplateInterpreterGenerator::set_short_entry_points(Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& vep) {
|
void TemplateInterpreterGenerator::set_short_entry_points(Template* t, address& bep, address& cep, address& sep, address& aep, address& iep, address& lep, address& fep, address& dep, address& vep) {
|
||||||
assert(t->is_valid(), "template must exist");
|
assert(t->is_valid(), "template must exist");
|
||||||
switch (t->tos_in()) {
|
switch (t->tos_in()) {
|
||||||
case btos: vep = __ pc(); __ pop(btos); bep = __ pc(); generate_and_dispatch(t); break;
|
case btos:
|
||||||
case ctos: vep = __ pc(); __ pop(ctos); sep = __ pc(); generate_and_dispatch(t); break;
|
case ctos:
|
||||||
case stos: vep = __ pc(); __ pop(stos); sep = __ pc(); generate_and_dispatch(t); break;
|
case stos:
|
||||||
|
ShouldNotReachHere(); // btos/ctos/stos should use itos.
|
||||||
|
break;
|
||||||
case atos: vep = __ pc(); __ pop(atos); aep = __ pc(); generate_and_dispatch(t); break;
|
case atos: vep = __ pc(); __ pop(atos); aep = __ pc(); generate_and_dispatch(t); break;
|
||||||
case itos: vep = __ pc(); __ pop(itos); iep = __ pc(); generate_and_dispatch(t); break;
|
case itos: vep = __ pc(); __ pop(itos); iep = __ pc(); generate_and_dispatch(t); break;
|
||||||
case ltos: vep = __ pc(); __ pop(ltos); lep = __ pc(); generate_and_dispatch(t); break;
|
case ltos: vep = __ pc(); __ pop(ltos); lep = __ pc(); generate_and_dispatch(t); break;
|
||||||
|
@ -1150,7 +1150,6 @@ void ConnectionGraph::split_unique_types(GrowableArray<Node *> &alloc_worklist)
|
|||||||
} else {
|
} else {
|
||||||
assert(n->is_Mem(), "memory node required.");
|
assert(n->is_Mem(), "memory node required.");
|
||||||
Node *addr = n->in(MemNode::Address);
|
Node *addr = n->in(MemNode::Address);
|
||||||
assert(addr->is_AddP(), "AddP required");
|
|
||||||
const Type *addr_t = igvn->type(addr);
|
const Type *addr_t = igvn->type(addr);
|
||||||
if (addr_t == Type::TOP)
|
if (addr_t == Type::TOP)
|
||||||
continue;
|
continue;
|
||||||
|
@ -231,12 +231,13 @@ void Parse::load_interpreter_state(Node* osr_buf) {
|
|||||||
|
|
||||||
// Use the raw liveness computation to make sure that unexpected
|
// Use the raw liveness computation to make sure that unexpected
|
||||||
// values don't propagate into the OSR frame.
|
// values don't propagate into the OSR frame.
|
||||||
MethodLivenessResult live_locals = method()->raw_liveness_at_bci(osr_bci());
|
MethodLivenessResult live_locals = method()->liveness_at_bci(osr_bci());
|
||||||
if (!live_locals.is_valid()) {
|
if (!live_locals.is_valid()) {
|
||||||
// Degenerate or breakpointed method.
|
// Degenerate or breakpointed method.
|
||||||
C->record_method_not_compilable("OSR in empty or breakpointed method");
|
C->record_method_not_compilable("OSR in empty or breakpointed method");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
MethodLivenessResult raw_live_locals = method()->raw_liveness_at_bci(osr_bci());
|
||||||
|
|
||||||
// Extract the needed locals from the interpreter frame.
|
// Extract the needed locals from the interpreter frame.
|
||||||
Node *locals_addr = basic_plus_adr(osr_buf, osr_buf, (max_locals-1)*wordSize);
|
Node *locals_addr = basic_plus_adr(osr_buf, osr_buf, (max_locals-1)*wordSize);
|
||||||
@ -316,6 +317,10 @@ void Parse::load_interpreter_state(Node* osr_buf) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (type->basic_type() == T_ADDRESS && !raw_live_locals.at(index)) {
|
||||||
|
// Skip type check for dead address locals
|
||||||
|
continue;
|
||||||
|
}
|
||||||
set_local(index, check_interpreter_type(l, type, bad_type_exit));
|
set_local(index, check_interpreter_type(l, type, bad_type_exit));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user