8210853: JIT: C2 doesn't skip post barrier for new allocated objects

Skip copy Region node when look for last allocation

Reviewed-by: thartmann, kvn
This commit is contained in:
Kuai Wei 2018-10-30 14:38:59 -07:00 committed by Vladimir Kozlov
parent 0aa4581229
commit dcb6e1dda8

View File

@ -2116,8 +2116,17 @@ void GraphKit::uncommon_trap(int trap_request,
// We use this to determine if an object is so "fresh" that
// it does not require card marks.
Node* GraphKit::just_allocated_object(Node* current_control) {
if (C->recent_alloc_ctl() == current_control)
return C->recent_alloc_obj();
Node* ctrl = current_control;
// Object::<init> is invoked after allocation, most of invoke nodes
// will be reduced, but a region node is kept in parse time, we check
// the pattern and skip the region node if it degraded to a copy.
if (ctrl != NULL && ctrl->is_Region() && ctrl->req() == 2 &&
ctrl->as_Region()->is_copy()) {
ctrl = ctrl->as_Region()->is_copy();
}
if (C->recent_alloc_ctl() == ctrl) {
return C->recent_alloc_obj();
}
return NULL;
}