comparison src/share/vm/opto/callnode.cpp @ 5948:ee138854b3a6

7147744: CTW: assert(false) failed: infinite EA connection graph build Summary: rewrote Connection graph construction code in EA to reduce time spent there. Reviewed-by: never
author kvn
date Mon, 12 Mar 2012 10:46:47 -0700
parents b0ff910edfc9
children 1d7922586cf6
comparison
equal deleted inserted replaced
5933:fde683df4c27 5948:ee138854b3a6
1 /* 1 /*
2 * Copyright (c) 1997, 2010, Oracle and/or its affiliates. All rights reserved. 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 * 4 *
5 * This code is free software; you can redistribute it and/or modify it 5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as 6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
1536 if (can_reshape && EliminateLocks && !is_non_esc_obj()) { 1536 if (can_reshape && EliminateLocks && !is_non_esc_obj()) {
1537 // 1537 //
1538 // If we are locking an unescaped object, the lock/unlock is unnecessary 1538 // If we are locking an unescaped object, the lock/unlock is unnecessary
1539 // 1539 //
1540 ConnectionGraph *cgr = phase->C->congraph(); 1540 ConnectionGraph *cgr = phase->C->congraph();
1541 PointsToNode::EscapeState es = PointsToNode::GlobalEscape; 1541 if (cgr != NULL && cgr->not_global_escape(obj_node())) {
1542 if (cgr != NULL)
1543 es = cgr->escape_state(obj_node());
1544 if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) {
1545 assert(!is_eliminated() || is_coarsened(), "sanity"); 1542 assert(!is_eliminated() || is_coarsened(), "sanity");
1546 // The lock could be marked eliminated by lock coarsening 1543 // The lock could be marked eliminated by lock coarsening
1547 // code during first IGVN before EA. Replace coarsened flag 1544 // code during first IGVN before EA. Replace coarsened flag
1548 // to eliminate all associated locks/unlocks. 1545 // to eliminate all associated locks/unlocks.
1549 this->set_non_esc_obj(); 1546 this->set_non_esc_obj();
1678 if (can_reshape && EliminateLocks && !is_non_esc_obj()) { 1675 if (can_reshape && EliminateLocks && !is_non_esc_obj()) {
1679 // 1676 //
1680 // If we are unlocking an unescaped object, the lock/unlock is unnecessary. 1677 // If we are unlocking an unescaped object, the lock/unlock is unnecessary.
1681 // 1678 //
1682 ConnectionGraph *cgr = phase->C->congraph(); 1679 ConnectionGraph *cgr = phase->C->congraph();
1683 PointsToNode::EscapeState es = PointsToNode::GlobalEscape; 1680 if (cgr != NULL && cgr->not_global_escape(obj_node())) {
1684 if (cgr != NULL)
1685 es = cgr->escape_state(obj_node());
1686 if (es != PointsToNode::UnknownEscape && es != PointsToNode::GlobalEscape) {
1687 assert(!is_eliminated() || is_coarsened(), "sanity"); 1681 assert(!is_eliminated() || is_coarsened(), "sanity");
1688 // The lock could be marked eliminated by lock coarsening 1682 // The lock could be marked eliminated by lock coarsening
1689 // code during first IGVN before EA. Replace coarsened flag 1683 // code during first IGVN before EA. Replace coarsened flag
1690 // to eliminate all associated locks/unlocks. 1684 // to eliminate all associated locks/unlocks.
1691 this->set_non_esc_obj(); 1685 this->set_non_esc_obj();