1733 if (use_op == Op_LoadP && use->bottom_type()->isa_rawptr()) { 1734 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1735 Node* u = use->fast_out(i2); 1736 const Type* ut = u->bottom_type(); 1737 if (u->Opcode() == Op_LoadP && ut->isa_instptr()) { 1738 if (has_load_barriers) { 1739 // Search for load barriers behind the load 1740 for (DUIterator_Fast i3max, i3 = u->fast_outs(i3max); i3 < i3max; i3++) { 1741 Node* b = u->fast_out(i3); 1742 if (bs->is_gc_barrier_node(b)) { 1743 _worklist.push(b); 1744 } 1745 } 1746 } 1747 _worklist.push(u); 1748 } 1749 } 1750 } 1751 1752 BarrierSet::barrier_set()->barrier_set_c2()->igvn_add_users_to_worklist(this, use); 1753 } 1754 } 1755 1756 /** 1757 * Remove the speculative part of all types that we know of 1758 */ 1759 void PhaseIterGVN::remove_speculative_types() { 1760 assert(UseTypeSpeculation, "speculation is off"); 1761 for (uint i = 0; i < _types.Size(); i++) { 1762 const Type* t = _types.fast_lookup(i); 1763 if (t != NULL) { 1764 _types.map(i, t->remove_speculative()); 1765 } 1766 } 1767 _table.check_no_speculative_types(); 1768 } 1769 1770 //============================================================================= 1771 #ifndef PRODUCT 1772 uint PhaseCCP::_total_invokes = 0; | 1733 if (use_op == Op_LoadP && use->bottom_type()->isa_rawptr()) { 1734 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1735 Node* u = use->fast_out(i2); 1736 const Type* ut = u->bottom_type(); 1737 if (u->Opcode() == Op_LoadP && ut->isa_instptr()) { 1738 if (has_load_barriers) { 1739 // Search for load barriers behind the load 1740 for (DUIterator_Fast i3max, i3 = u->fast_outs(i3max); i3 < i3max; i3++) { 1741 Node* b = u->fast_out(i3); 1742 if (bs->is_gc_barrier_node(b)) { 1743 _worklist.push(b); 1744 } 1745 } 1746 } 1747 _worklist.push(u); 1748 } 1749 } 1750 } 1751 1752 BarrierSet::barrier_set()->barrier_set_c2()->igvn_add_users_to_worklist(this, use); 1753 if (use->is_Region()) { 1754 Node* c = use; 1755 do { 1756 c = c->unique_ctrl_out(); 1757 } while (c != NULL && c->is_Region()); 1758 if (c != NULL && c->is_CallStaticJava() && c->as_CallStaticJava()->uncommon_trap_request() != 0) { 1759 _worklist.push(c); 1760 } 1761 } 1762 } 1763 } 1764 1765 /** 1766 * Remove the speculative part of all types that we know of 1767 */ 1768 void PhaseIterGVN::remove_speculative_types() { 1769 assert(UseTypeSpeculation, "speculation is off"); 1770 for (uint i = 0; i < _types.Size(); i++) { 1771 const Type* t = _types.fast_lookup(i); 1772 if (t != NULL) { 1773 _types.map(i, t->remove_speculative()); 1774 } 1775 } 1776 _table.check_no_speculative_types(); 1777 } 1778 1779 //============================================================================= 1780 #ifndef PRODUCT 1781 uint PhaseCCP::_total_invokes = 0; |