Mercurial > hg > graal-jvmci-8
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) { |