Mercurial > hg > graal-jvmci-8
comparison src/share/vm/opto/parse1.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 | e9a5e0a812c8 |
children | 1d7922586cf6 |
comparison
equal
deleted
inserted
replaced
4779:c8d8e124380c | 4790:b0ff910edfc9 |
---|---|
1602 assert(phi == NULL, "the merge contains phis, not vice versa"); | 1602 assert(phi == NULL, "the merge contains phis, not vice versa"); |
1603 merge_memory_edges(n->as_MergeMem(), pnum, nophi); | 1603 merge_memory_edges(n->as_MergeMem(), pnum, nophi); |
1604 continue; | 1604 continue; |
1605 default: // All normal stuff | 1605 default: // All normal stuff |
1606 if (phi == NULL) { | 1606 if (phi == NULL) { |
1607 if (!check_elide_phi || !target->can_elide_SEL_phi(j)) { | 1607 const JVMState* jvms = map()->jvms(); |
1608 if (EliminateNestedLocks && | |
1609 jvms->is_mon(j) && jvms->is_monitor_box(j)) { | |
1610 // BoxLock nodes are not commoning. | |
1611 // Use old BoxLock node as merged box. | |
1612 assert(newin->jvms()->is_monitor_box(j), "sanity"); | |
1613 // This assert also tests that nodes are BoxLock. | |
1614 assert(BoxLockNode::same_slot(n, m), "sanity"); | |
1615 C->gvn_replace_by(n, m); | |
1616 } else if (!check_elide_phi || !target->can_elide_SEL_phi(j)) { | |
1608 phi = ensure_phi(j, nophi); | 1617 phi = ensure_phi(j, nophi); |
1609 } | 1618 } |
1610 } | 1619 } |
1611 break; | 1620 break; |
1612 } | 1621 } |
1817 if (jvms->is_loc(idx)) { | 1826 if (jvms->is_loc(idx)) { |
1818 t = block()->local_type_at(idx - jvms->locoff()); | 1827 t = block()->local_type_at(idx - jvms->locoff()); |
1819 } else if (jvms->is_stk(idx)) { | 1828 } else if (jvms->is_stk(idx)) { |
1820 t = block()->stack_type_at(idx - jvms->stkoff()); | 1829 t = block()->stack_type_at(idx - jvms->stkoff()); |
1821 } else if (jvms->is_mon(idx)) { | 1830 } else if (jvms->is_mon(idx)) { |
1822 if (EliminateNestedLocks && jvms->is_monitor_box(idx)) { | 1831 assert(!jvms->is_monitor_box(idx), "no phis for boxes"); |
1823 // BoxLock nodes are not commoning. Create Phi. | 1832 t = TypeInstPtr::BOTTOM; // this is sufficient for a lock object |
1824 t = o->bottom_type(); // TypeRawPtr::BOTTOM | |
1825 } else { | |
1826 t = TypeInstPtr::BOTTOM; // this is sufficient for a lock object | |
1827 } | |
1828 } else if ((uint)idx < TypeFunc::Parms) { | 1833 } else if ((uint)idx < TypeFunc::Parms) { |
1829 t = o->bottom_type(); // Type::RETURN_ADDRESS or such-like. | 1834 t = o->bottom_type(); // Type::RETURN_ADDRESS or such-like. |
1830 } else { | 1835 } else { |
1831 assert(false, "no type information for this phi"); | 1836 assert(false, "no type information for this phi"); |
1832 } | 1837 } |