< prev index next >
src/share/vm/opto/escape.cpp
Print this page
*** 1,7 ****
/*
! * Copyright (c) 2005, 2016, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
--- 1,7 ----
/*
! * Copyright (c) 2005, 2017, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*** 510,524 ****
const Type *adr_type = igvn->type(adr);
adr_type = adr_type->make_ptr();
if (adr_type == NULL) {
break; // skip dead nodes
}
! if (adr_type->isa_oopptr() ||
! (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) &&
! (adr_type == TypeRawPtr::NOTNULL &&
! adr->in(AddPNode::Address)->is_Proj() &&
! adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
delayed_worklist->push(n); // Process it later.
#ifdef ASSERT
assert(adr->is_AddP(), "expecting an AddP");
if (adr_type == TypeRawPtr::NOTNULL) {
// Verify a raw address for a store captured by Initialize node.
--- 510,524 ----
const Type *adr_type = igvn->type(adr);
adr_type = adr_type->make_ptr();
if (adr_type == NULL) {
break; // skip dead nodes
}
! if ( adr_type->isa_oopptr()
! || ( (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass)
! && adr_type == TypeRawPtr::NOTNULL
! && adr->in(AddPNode::Address)->is_Proj()
! && adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
delayed_worklist->push(n); // Process it later.
#ifdef ASSERT
assert(adr->is_AddP(), "expecting an AddP");
if (adr_type == TypeRawPtr::NOTNULL) {
// Verify a raw address for a store captured by Initialize node.
*** 723,737 ****
#endif
if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) {
add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL);
}
! if (adr_type->isa_oopptr() ||
! (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass) &&
! (adr_type == TypeRawPtr::NOTNULL &&
! adr->in(AddPNode::Address)->is_Proj() &&
! adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
// Point Address to Value
PointsToNode* adr_ptn = ptnode_adr(adr->_idx);
assert(adr_ptn != NULL &&
adr_ptn->as_Field()->is_oop(), "node should be registered");
Node *val = n->in(MemNode::ValueIn);
--- 723,737 ----
#endif
if (opcode == Op_GetAndSetP || opcode == Op_GetAndSetN ||
opcode == Op_CompareAndExchangeN || opcode == Op_CompareAndExchangeP) {
add_local_var_and_edge(n, PointsToNode::NoEscape, adr, NULL);
}
! if ( adr_type->isa_oopptr()
! || ( (opcode == Op_StoreP || opcode == Op_StoreN || opcode == Op_StoreNKlass)
! && adr_type == TypeRawPtr::NOTNULL
! && adr->in(AddPNode::Address)->is_Proj()
! && adr->in(AddPNode::Address)->in(0)->is_Allocate())) {
// Point Address to Value
PointsToNode* adr_ptn = ptnode_adr(adr->_idx);
assert(adr_ptn != NULL &&
adr_ptn->as_Field()->is_oop(), "node should be registered");
Node *val = n->in(MemNode::ValueIn);
*** 1962,1973 ****
// Sets are disjoint.
bool set1_has_unknown_ptr = ptn1->points_to(phantom_obj);
bool set2_has_unknown_ptr = ptn2->points_to(phantom_obj);
bool set1_has_null_ptr = ptn1->points_to(null_obj);
bool set2_has_null_ptr = ptn2->points_to(null_obj);
! if (set1_has_unknown_ptr && set2_has_null_ptr ||
! set2_has_unknown_ptr && set1_has_null_ptr) {
// Check nullness of unknown object.
return NULL;
}
// Disjointness by itself is not sufficient since
--- 1962,1973 ----
// Sets are disjoint.
bool set1_has_unknown_ptr = ptn1->points_to(phantom_obj);
bool set2_has_unknown_ptr = ptn2->points_to(phantom_obj);
bool set1_has_null_ptr = ptn1->points_to(null_obj);
bool set2_has_null_ptr = ptn2->points_to(null_obj);
! if ((set1_has_unknown_ptr && set2_has_null_ptr) ||
! (set2_has_unknown_ptr && set1_has_null_ptr)) {
// Check nullness of unknown object.
return NULL;
}
// Disjointness by itself is not sufficient since
*** 2622,2632 ****
// Don't move related membars.
record_for_optimizer(use);
continue;
}
tp = use->as_MemBar()->adr_type()->isa_ptr();
! if (tp != NULL && C->get_alias_index(tp) == alias_idx ||
alias_idx == general_idx) {
continue; // Nothing to do
}
// Move to general memory slice.
uint orig_uniq = C->unique();
--- 2622,2632 ----
// Don't move related membars.
record_for_optimizer(use);
continue;
}
tp = use->as_MemBar()->adr_type()->isa_ptr();
! if ((tp != NULL && C->get_alias_index(tp) == alias_idx) ||
alias_idx == general_idx) {
continue; // Nothing to do
}
// Move to general memory slice.
uint orig_uniq = C->unique();
< prev index next >