< prev index next >

src/hotspot/share/opto/phaseX.cpp

Print this page




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     // Give CallStaticJavaNode::remove_useless_allocation a chance to run
1696     if (use->is_Region()) {
1697       Node* c = use;
1698       do {
1699         c = c->unique_ctrl_out();
1700       } while (c != NULL && c->is_Region());
1701       if (c != NULL && c->is_CallStaticJava() && c->as_CallStaticJava()->uncommon_trap_request() != 0) {
1702         _worklist.push(c);
1703       }
1704     }
1705   }
1706 }
1707 
1708 /**
1709  * Remove the speculative part of all types that we know of
1710  */
1711 void PhaseIterGVN::remove_speculative_types()  {
1712   assert(UseTypeSpeculation, "speculation is off");
1713   for (uint i = 0; i < _types.Size(); i++)  {
1714     const Type* t = _types.fast_lookup(i);
1715     if (t != NULL) {
1716       _types.map(i, t->remove_speculative());
1717     }
1718   }
1719   _table.check_no_speculative_types();
1720 }
1721 
1722 //=============================================================================
1723 #ifndef PRODUCT
1724 uint PhaseCCP::_total_invokes   = 0;


< prev index next >