1675 if (use_op == Op_LoadP && use->bottom_type()->isa_rawptr()) { 1676 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1677 Node* u = use->fast_out(i2); 1678 const Type* ut = u->bottom_type(); 1679 if (u->Opcode() == Op_LoadP && ut->isa_instptr()) { 1680 if (has_load_barriers) { 1681 // Search for load barriers behind the load 1682 for (DUIterator_Fast i3max, i3 = u->fast_outs(i3max); i3 < i3max; i3++) { 1683 Node* b = u->fast_out(i3); 1684 if (bs->is_gc_barrier_node(b)) { 1685 _worklist.push(b); 1686 } 1687 } 1688 } 1689 _worklist.push(u); 1690 } 1691 } 1692 } 1693 1694 BarrierSet::barrier_set()->barrier_set_c2()->igvn_add_users_to_worklist(this, use); 1695 } 1696 } 1697 1698 /** 1699 * Remove the speculative part of all types that we know of 1700 */ 1701 void PhaseIterGVN::remove_speculative_types() { 1702 assert(UseTypeSpeculation, "speculation is off"); 1703 for (uint i = 0; i < _types.Size(); i++) { 1704 const Type* t = _types.fast_lookup(i); 1705 if (t != NULL) { 1706 _types.map(i, t->remove_speculative()); 1707 } 1708 } 1709 _table.check_no_speculative_types(); 1710 } 1711 1712 //============================================================================= 1713 #ifndef PRODUCT 1714 uint PhaseCCP::_total_invokes = 0; | 1675 if (use_op == Op_LoadP && use->bottom_type()->isa_rawptr()) { 1676 for (DUIterator_Fast i2max, i2 = use->fast_outs(i2max); i2 < i2max; i2++) { 1677 Node* u = use->fast_out(i2); 1678 const Type* ut = u->bottom_type(); 1679 if (u->Opcode() == Op_LoadP && ut->isa_instptr()) { 1680 if (has_load_barriers) { 1681 // Search for load barriers behind the load 1682 for (DUIterator_Fast i3max, i3 = u->fast_outs(i3max); i3 < i3max; i3++) { 1683 Node* b = u->fast_out(i3); 1684 if (bs->is_gc_barrier_node(b)) { 1685 _worklist.push(b); 1686 } 1687 } 1688 } 1689 _worklist.push(u); 1690 } 1691 } 1692 } 1693 1694 BarrierSet::barrier_set()->barrier_set_c2()->igvn_add_users_to_worklist(this, use); 1695 if (use->is_Region()) { 1696 Node* c = use; 1697 do { 1698 c = c->unique_ctrl_out(); 1699 } while (c != NULL && c->is_Region()); 1700 if (c != NULL && c->is_CallStaticJava() && c->as_CallStaticJava()->uncommon_trap_request() != 0) { 1701 _worklist.push(c); 1702 } 1703 } 1704 } 1705 } 1706 1707 /** 1708 * Remove the speculative part of all types that we know of 1709 */ 1710 void PhaseIterGVN::remove_speculative_types() { 1711 assert(UseTypeSpeculation, "speculation is off"); 1712 for (uint i = 0; i < _types.Size(); i++) { 1713 const Type* t = _types.fast_lookup(i); 1714 if (t != NULL) { 1715 _types.map(i, t->remove_speculative()); 1716 } 1717 } 1718 _table.check_no_speculative_types(); 1719 } 1720 1721 //============================================================================= 1722 #ifndef PRODUCT 1723 uint PhaseCCP::_total_invokes = 0; |