Mercurial > hg > truffle
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; |