comparison src/share/vm/opto/macro.cpp @ 4790:b0ff910edfc9

7128355: assert(!nocreate) failed: Cannot build a phi for a block already parsed Summary: Do not common BoxLock nodes and avoid creating phis of boxes. Reviewed-by: never
author kvn
date Thu, 12 Jan 2012 14:45:04 -0800
parents 35acf8f0a2e4
children 89d0a5d40008
comparison
equal deleted inserted replaced
4779:c8d8e124380c 4790:b0ff910edfc9
1827 return; 1827 return;
1828 } 1828 }
1829 1829
1830 // Create new "eliminated" BoxLock node and use it in monitor debug info 1830 // Create new "eliminated" BoxLock node and use it in monitor debug info
1831 // instead of oldbox for the same object. 1831 // instead of oldbox for the same object.
1832 BoxLockNode* box = BoxLockNode::box_node(oldbox); 1832 BoxLockNode* newbox = oldbox->clone()->as_BoxLock();
1833 BoxLockNode* newbox = box->clone()->as_BoxLock();
1834 1833
1835 // Note: BoxLock node is marked eliminated only here and it is used 1834 // Note: BoxLock node is marked eliminated only here and it is used
1836 // to indicate that all associated lock and unlock nodes are marked 1835 // to indicate that all associated lock and unlock nodes are marked
1837 // for elimination. 1836 // for elimination.
1838 newbox->set_eliminated(); 1837 newbox->set_eliminated();
2045 Node* mem = lock->in(TypeFunc::Memory); 2044 Node* mem = lock->in(TypeFunc::Memory);
2046 Node* obj = lock->obj_node(); 2045 Node* obj = lock->obj_node();
2047 Node* box = lock->box_node(); 2046 Node* box = lock->box_node();
2048 Node* flock = lock->fastlock_node(); 2047 Node* flock = lock->fastlock_node();
2049 2048
2050 assert(!BoxLockNode::box_node(box)->is_eliminated(), "sanity"); 2049 assert(!box->as_BoxLock()->is_eliminated(), "sanity");
2051 2050
2052 // Make the merge point 2051 // Make the merge point
2053 Node *region; 2052 Node *region;
2054 Node *mem_phi; 2053 Node *mem_phi;
2055 Node *slow_path; 2054 Node *slow_path;
2281 Node* ctrl = unlock->in(TypeFunc::Control); 2280 Node* ctrl = unlock->in(TypeFunc::Control);
2282 Node* mem = unlock->in(TypeFunc::Memory); 2281 Node* mem = unlock->in(TypeFunc::Memory);
2283 Node* obj = unlock->obj_node(); 2282 Node* obj = unlock->obj_node();
2284 Node* box = unlock->box_node(); 2283 Node* box = unlock->box_node();
2285 2284
2286 assert(!BoxLockNode::box_node(box)->is_eliminated(), "sanity"); 2285 assert(!box->as_BoxLock()->is_eliminated(), "sanity");
2287 2286
2288 // No need for a null check on unlock 2287 // No need for a null check on unlock
2289 2288
2290 // Make the merge point 2289 // Make the merge point
2291 Node *region; 2290 Node *region;