comparison src/share/vm/opto/escape.cpp @ 3278:66b0e2371912

7026700: regression in 6u24-rev-b23: Crash in C2 compiler in PhaseIdealLoop::build_loop_late_post Summary: memory slices should be always created for non-static fields after allocation Reviewed-by: never
author kvn
date Wed, 20 Apr 2011 18:29:35 -0700
parents 55973726c600
children 293f68bda347
comparison
equal deleted inserted replaced
3277:d934e4b931e9 3278:66b0e2371912
1435 record_for_optimizer(phi); 1435 record_for_optimizer(phi);
1436 } 1436 }
1437 1437
1438 // Update the memory inputs of MemNodes with the value we computed 1438 // Update the memory inputs of MemNodes with the value we computed
1439 // in Phase 2 and move stores memory users to corresponding memory slices. 1439 // in Phase 2 and move stores memory users to corresponding memory slices.
1440 #ifdef ASSERT 1440
1441 // Disable memory split verification code until the fix for 6984348.
1442 // Currently it produces false negative results since it does not cover all cases.
1443 #if 0 // ifdef ASSERT
1441 visited.Reset(); 1444 visited.Reset();
1442 Node_Stack old_mems(arena, _compile->unique() >> 2); 1445 Node_Stack old_mems(arena, _compile->unique() >> 2);
1443 #endif 1446 #endif
1444 for (uint i = 0; i < nodes_size(); i++) { 1447 for (uint i = 0; i < nodes_size(); i++) {
1445 Node *nmem = get_map(i); 1448 Node *nmem = get_map(i);
1446 if (nmem != NULL) { 1449 if (nmem != NULL) {
1447 Node *n = ptnode_adr(i)->_node; 1450 Node *n = ptnode_adr(i)->_node;
1448 assert(n != NULL, "sanity"); 1451 assert(n != NULL, "sanity");
1449 if (n->is_Mem()) { 1452 if (n->is_Mem()) {
1450 #ifdef ASSERT 1453 #if 0 // ifdef ASSERT
1451 Node* old_mem = n->in(MemNode::Memory); 1454 Node* old_mem = n->in(MemNode::Memory);
1452 if (!visited.test_set(old_mem->_idx)) { 1455 if (!visited.test_set(old_mem->_idx)) {
1453 old_mems.push(old_mem, old_mem->outcnt()); 1456 old_mems.push(old_mem, old_mem->outcnt());
1454 } 1457 }
1455 #endif 1458 #endif
1467 assert(n->is_Allocate() || n->is_CheckCastPP() || 1470 assert(n->is_Allocate() || n->is_CheckCastPP() ||
1468 n->is_AddP() || n->is_Phi(), "unknown node used for set_map()"); 1471 n->is_AddP() || n->is_Phi(), "unknown node used for set_map()");
1469 } 1472 }
1470 } 1473 }
1471 } 1474 }
1472 #ifdef ASSERT 1475 #if 0 // ifdef ASSERT
1473 // Verify that memory was split correctly 1476 // Verify that memory was split correctly
1474 while (old_mems.is_nonempty()) { 1477 while (old_mems.is_nonempty()) {
1475 Node* old_mem = old_mems.node(); 1478 Node* old_mem = old_mems.node();
1476 uint old_cnt = old_mems.index(); 1479 uint old_cnt = old_mems.index();
1477 old_mems.pop(); 1480 old_mems.pop();
1478 assert(old_cnt = old_mem->outcnt(), "old mem could be lost"); 1481 assert(old_cnt == old_mem->outcnt(), "old mem could be lost");
1479 } 1482 }
1480 #endif 1483 #endif
1481 } 1484 }
1482 1485
1483 bool ConnectionGraph::has_candidates(Compile *C) { 1486 bool ConnectionGraph::has_candidates(Compile *C) {