< 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     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;


< prev index next >