< prev index next >

src/hotspot/share/opto/phaseX.cpp

Print this page




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;


< prev index next >