< prev index next >

src/hotspot/share/opto/parse2.cpp

Print this page




1511       if (con_type != NULL) {
1512         push_node(con_type->basic_type(), makecon(con_type));
1513       }
1514     }
1515 
1516     break;
1517 
1518   case Bytecodes::_aload_0:
1519     push( local(0) );
1520     break;
1521   case Bytecodes::_aload_1:
1522     push( local(1) );
1523     break;
1524   case Bytecodes::_aload_2:
1525     push( local(2) );
1526     break;
1527   case Bytecodes::_aload_3:
1528     push( local(3) );
1529     break;
1530   case Bytecodes::_aload:
1531   case Bytecodes::_vload:
1532     push( local(iter().get_index()) );
1533     break;
1534 
1535   case Bytecodes::_fload_0:
1536   case Bytecodes::_iload_0:
1537     push( local(0) );
1538     break;
1539   case Bytecodes::_fload_1:
1540   case Bytecodes::_iload_1:
1541     push( local(1) );
1542     break;
1543   case Bytecodes::_fload_2:
1544   case Bytecodes::_iload_2:
1545     push( local(2) );
1546     break;
1547   case Bytecodes::_fload_3:
1548   case Bytecodes::_iload_3:
1549     push( local(3) );
1550     break;
1551   case Bytecodes::_fload:


1589     set_local( 0, pop() );
1590     break;
1591   case Bytecodes::_fstore_1:
1592   case Bytecodes::_istore_1:
1593   case Bytecodes::_astore_1:
1594     set_local( 1, pop() );
1595     break;
1596   case Bytecodes::_fstore_2:
1597   case Bytecodes::_istore_2:
1598   case Bytecodes::_astore_2:
1599     set_local( 2, pop() );
1600     break;
1601   case Bytecodes::_fstore_3:
1602   case Bytecodes::_istore_3:
1603   case Bytecodes::_astore_3:
1604     set_local( 3, pop() );
1605     break;
1606   case Bytecodes::_fstore:
1607   case Bytecodes::_istore:
1608   case Bytecodes::_astore:
1609   case Bytecodes::_vstore:
1610     set_local( iter().get_index(), pop() );
1611     break;
1612   // long stores
1613   case Bytecodes::_lstore_0:
1614     set_pair_local( 0, pop_pair() );
1615     break;
1616   case Bytecodes::_lstore_1:
1617     set_pair_local( 1, pop_pair() );
1618     break;
1619   case Bytecodes::_lstore_2:
1620     set_pair_local( 2, pop_pair() );
1621     break;
1622   case Bytecodes::_lstore_3:
1623     set_pair_local( 3, pop_pair() );
1624     break;
1625   case Bytecodes::_lstore:
1626     set_pair_local( iter().get_index(), pop_pair() );
1627     break;
1628 
1629   // double stores


1708     push( c );
1709     push( b );
1710     push( a );
1711     break;
1712 
1713   case Bytecodes::_arraylength: {
1714     // Must do null-check with value on expression stack
1715     Node *ary = null_check(peek(), T_ARRAY);
1716     // Compile-time detect of null-exception?
1717     if (stopped())  return;
1718     a = pop();
1719     push(load_array_length(a));
1720     break;
1721   }
1722 
1723   case Bytecodes::_baload: array_load(T_BYTE);   break;
1724   case Bytecodes::_caload: array_load(T_CHAR);   break;
1725   case Bytecodes::_iaload: array_load(T_INT);    break;
1726   case Bytecodes::_saload: array_load(T_SHORT);  break;
1727   case Bytecodes::_faload: array_load(T_FLOAT);  break;
1728   case Bytecodes::_vaload: array_load(T_VALUETYPE); break;
1729   case Bytecodes::_aaload: array_load(T_OBJECT); break;
1730   case Bytecodes::_laload: {
1731     a = array_addressing(T_LONG, 0);
1732     if (stopped())  return;     // guaranteed null or range check
1733     dec_sp(2);                  // Pop array and index
1734     push_pair(make_load(control(), a, TypeLong::LONG, T_LONG, TypeAryPtr::LONGS, MemNode::unordered));
1735     break;
1736   }
1737   case Bytecodes::_daload: {
1738     a = array_addressing(T_DOUBLE, 0);
1739     if (stopped())  return;     // guaranteed null or range check
1740     dec_sp(2);                  // Pop array and index
1741     push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1742     break;
1743   }
1744   case Bytecodes::_bastore: array_store(T_BYTE);  break;
1745   case Bytecodes::_castore: array_store(T_CHAR);  break;
1746   case Bytecodes::_iastore: array_store(T_INT);   break;
1747   case Bytecodes::_sastore: array_store(T_SHORT); break;
1748   case Bytecodes::_fastore: array_store(T_FLOAT); break;
1749   case Bytecodes::_vastore: {
1750     d = array_addressing(T_OBJECT, 1);
1751     if (stopped())  return;     // guaranteed null or range check
1752     array_store_check(true);
1753     c = pop();                  // Oop to store
1754     b = pop();                  // index (already used)
1755     a = pop();                  // the array itself
1756     const TypeAryPtr* arytype = _gvn.type(a)->is_aryptr();
1757     const Type* elemtype = arytype->elem();
1758 
1759     if (elemtype->isa_valuetype()) {
1760       c->as_ValueType()->store_flattened(this, a, d);
1761       break;
1762     }
1763 
1764     const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1765     Node* oop = c->as_ValueType()->allocate(this)->get_oop();
1766     Node* store = store_oop_to_array(control(), a, d, adr_type, oop, elemtype->make_oopptr(), T_OBJECT,
1767                                      StoreNode::release_if_reference(T_OBJECT));
1768     break;
1769   }

1770   case Bytecodes::_aastore: {
1771     d = array_addressing(T_OBJECT, 1);
1772     if (stopped())  return;     // guaranteed null or range check
1773     array_store_check();
1774     c = pop();                  // Oop to store
1775     b = pop();                  // index (already used)
1776     a = pop();                  // the array itself
1777     const TypeOopPtr* elemtype  = _gvn.type(a)->is_aryptr()->elem()->make_oopptr();
1778     const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1779     Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT,
1780                                      StoreNode::release_if_reference(T_OBJECT));
1781     break;
1782   }
1783   case Bytecodes::_lastore: {
1784     a = array_addressing(T_LONG, 2);
1785     if (stopped())  return;     // guaranteed null or range check
1786     c = pop_pair();
1787     dec_sp(2);                  // Pop array and index
1788     store_to_memory(control(), a, c, T_LONG, TypeAryPtr::LONGS, MemNode::unordered);
1789     break;


2234     break;
2235 
2236   case Bytecodes::_i2d:
2237     a = pop();
2238     b = _gvn.transform( new ConvI2DNode(a));
2239     push_pair(b);
2240     break;
2241 
2242   case Bytecodes::_iinc:        // Increment local
2243     i = iter().get_index();     // Get local index
2244     set_local( i, _gvn.transform( new AddINode( _gvn.intcon(iter().get_iinc_con()), local(i) ) ) );
2245     break;
2246 
2247   // Exit points of synchronized methods must have an unlock node
2248   case Bytecodes::_return:
2249     return_current(NULL);
2250     break;
2251 
2252   case Bytecodes::_ireturn:
2253   case Bytecodes::_areturn:
2254   case Bytecodes::_vreturn:
2255   case Bytecodes::_freturn:
2256     return_current(pop());
2257     break;
2258   case Bytecodes::_lreturn:
2259     return_current(pop_pair());
2260     break;
2261   case Bytecodes::_dreturn:
2262     return_current(pop_pair());
2263     break;
2264 
2265   case Bytecodes::_athrow:
2266     // null exception oop throws NULL pointer exception
2267     null_check(peek());
2268     if (stopped())  return;
2269     // Hook the thrown exception directly to subsequent handlers.
2270     if (BailoutToInterpreterForThrows) {
2271       // Keep method interpreted from now on.
2272       uncommon_trap(Deoptimization::Reason_unhandled,
2273                     Deoptimization::Action_make_not_compilable);
2274       return;


2389     do_call();
2390     break;
2391   case Bytecodes::_checkcast:
2392     do_checkcast();
2393     break;
2394   case Bytecodes::_instanceof:
2395     do_instanceof();
2396     break;
2397   case Bytecodes::_anewarray:
2398     do_newarray();
2399     break;
2400   case Bytecodes::_newarray:
2401     do_newarray((BasicType)iter().get_index());
2402     break;
2403   case Bytecodes::_multianewarray:
2404     do_multianewarray();
2405     break;
2406   case Bytecodes::_new:
2407     do_new();
2408     break;
2409   case Bytecodes::_vdefault:
2410     do_vdefault();
2411     break;
2412   case Bytecodes::_vwithfield:
2413     do_vwithfield();
2414     break;
2415 
2416   case Bytecodes::_jsr:
2417   case Bytecodes::_jsr_w:
2418     do_jsr();
2419     break;
2420 
2421   case Bytecodes::_ret:
2422     do_ret();
2423     break;
2424 
2425 
2426   case Bytecodes::_monitorenter:
2427     do_monitor_enter();
2428     break;
2429 
2430   case Bytecodes::_monitorexit:
2431     do_monitor_exit();
2432     break;
2433 
2434   case Bytecodes::_vunbox:
2435     do_vunbox();
2436     break;
2437 
2438   case Bytecodes::_vbox:
2439     do_vbox();
2440     break;
2441 
2442   case Bytecodes::_breakpoint:
2443     // Breakpoint set concurrently to compile
2444     // %%% use an uncommon trap?
2445     C->record_failure("breakpoint in method");
2446     return;
2447 
2448   default:
2449 #ifndef PRODUCT
2450     map()->dump(99);
2451 #endif
2452     tty->print("\nUnhandled bytecode %s\n", Bytecodes::name(bc()) );
2453     ShouldNotReachHere();
2454   }
2455 
2456 #ifndef PRODUCT
2457   IdealGraphPrinter *printer = C->printer();
2458   if (printer && printer->should_print(1)) {
2459     char buffer[256];
2460     sprintf(buffer, "Bytecode %d: %s", bci(), Bytecodes::name(bc()));
2461     bool old = printer->traverse_outs();


1511       if (con_type != NULL) {
1512         push_node(con_type->basic_type(), makecon(con_type));
1513       }
1514     }
1515 
1516     break;
1517 
1518   case Bytecodes::_aload_0:
1519     push( local(0) );
1520     break;
1521   case Bytecodes::_aload_1:
1522     push( local(1) );
1523     break;
1524   case Bytecodes::_aload_2:
1525     push( local(2) );
1526     break;
1527   case Bytecodes::_aload_3:
1528     push( local(3) );
1529     break;
1530   case Bytecodes::_aload:

1531     push( local(iter().get_index()) );
1532     break;
1533 
1534   case Bytecodes::_fload_0:
1535   case Bytecodes::_iload_0:
1536     push( local(0) );
1537     break;
1538   case Bytecodes::_fload_1:
1539   case Bytecodes::_iload_1:
1540     push( local(1) );
1541     break;
1542   case Bytecodes::_fload_2:
1543   case Bytecodes::_iload_2:
1544     push( local(2) );
1545     break;
1546   case Bytecodes::_fload_3:
1547   case Bytecodes::_iload_3:
1548     push( local(3) );
1549     break;
1550   case Bytecodes::_fload:


1588     set_local( 0, pop() );
1589     break;
1590   case Bytecodes::_fstore_1:
1591   case Bytecodes::_istore_1:
1592   case Bytecodes::_astore_1:
1593     set_local( 1, pop() );
1594     break;
1595   case Bytecodes::_fstore_2:
1596   case Bytecodes::_istore_2:
1597   case Bytecodes::_astore_2:
1598     set_local( 2, pop() );
1599     break;
1600   case Bytecodes::_fstore_3:
1601   case Bytecodes::_istore_3:
1602   case Bytecodes::_astore_3:
1603     set_local( 3, pop() );
1604     break;
1605   case Bytecodes::_fstore:
1606   case Bytecodes::_istore:
1607   case Bytecodes::_astore:

1608     set_local( iter().get_index(), pop() );
1609     break;
1610   // long stores
1611   case Bytecodes::_lstore_0:
1612     set_pair_local( 0, pop_pair() );
1613     break;
1614   case Bytecodes::_lstore_1:
1615     set_pair_local( 1, pop_pair() );
1616     break;
1617   case Bytecodes::_lstore_2:
1618     set_pair_local( 2, pop_pair() );
1619     break;
1620   case Bytecodes::_lstore_3:
1621     set_pair_local( 3, pop_pair() );
1622     break;
1623   case Bytecodes::_lstore:
1624     set_pair_local( iter().get_index(), pop_pair() );
1625     break;
1626 
1627   // double stores


1706     push( c );
1707     push( b );
1708     push( a );
1709     break;
1710 
1711   case Bytecodes::_arraylength: {
1712     // Must do null-check with value on expression stack
1713     Node *ary = null_check(peek(), T_ARRAY);
1714     // Compile-time detect of null-exception?
1715     if (stopped())  return;
1716     a = pop();
1717     push(load_array_length(a));
1718     break;
1719   }
1720 
1721   case Bytecodes::_baload: array_load(T_BYTE);   break;
1722   case Bytecodes::_caload: array_load(T_CHAR);   break;
1723   case Bytecodes::_iaload: array_load(T_INT);    break;
1724   case Bytecodes::_saload: array_load(T_SHORT);  break;
1725   case Bytecodes::_faload: array_load(T_FLOAT);  break;

1726   case Bytecodes::_aaload: array_load(T_OBJECT); break;
1727   case Bytecodes::_laload: {
1728     a = array_addressing(T_LONG, 0);
1729     if (stopped())  return;     // guaranteed null or range check
1730     dec_sp(2);                  // Pop array and index
1731     push_pair(make_load(control(), a, TypeLong::LONG, T_LONG, TypeAryPtr::LONGS, MemNode::unordered));
1732     break;
1733   }
1734   case Bytecodes::_daload: {
1735     a = array_addressing(T_DOUBLE, 0);
1736     if (stopped())  return;     // guaranteed null or range check
1737     dec_sp(2);                  // Pop array and index
1738     push_pair(make_load(control(), a, Type::DOUBLE, T_DOUBLE, TypeAryPtr::DOUBLES, MemNode::unordered));
1739     break;
1740   }
1741   case Bytecodes::_bastore: array_store(T_BYTE);  break;
1742   case Bytecodes::_castore: array_store(T_CHAR);  break;
1743   case Bytecodes::_iastore: array_store(T_INT);   break;
1744   case Bytecodes::_sastore: array_store(T_SHORT); break;
1745   case Bytecodes::_fastore: array_store(T_FLOAT); break;
1746 //  The vastore case has to merged into the aastore case
1747 //  case Bytecodes::_vastore: {
1748 //    d = array_addressing(T_OBJECT, 1);
1749 //    if (stopped())  return;     // guaranteed null or range check
1750 //    array_store_check(true);
1751 //    c = pop();                  // Oop to store
1752 //    b = pop();                  // index (already used)
1753 //    a = pop();                  // the array itself
1754 //    const TypeAryPtr* arytype = _gvn.type(a)->is_aryptr();
1755 //    const Type* elemtype = arytype->elem();
1756 //
1757 //    if (elemtype->isa_valuetype()) {
1758 //      c->as_ValueType()->store_flattened(this, a, d);
1759 //      break;
1760 //    }
1761 //
1762 //    const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1763 //    Node* oop = c->as_ValueType()->allocate(this)->get_oop();
1764 //    Node* store = store_oop_to_array(control(), a, d, adr_type, oop, elemtype->make_oopptr(), T_OBJECT,
1765 //                                     StoreNode::release_if_reference(T_OBJECT));
1766 //    break;
1767 //  }
1768   case Bytecodes::_aastore: {
1769     d = array_addressing(T_OBJECT, 1);
1770     if (stopped())  return;     // guaranteed null or range check
1771     array_store_check();
1772     c = pop();                  // Oop to store
1773     b = pop();                  // index (already used)
1774     a = pop();                  // the array itself
1775     const TypeOopPtr* elemtype  = _gvn.type(a)->is_aryptr()->elem()->make_oopptr();
1776     const TypeAryPtr* adr_type = TypeAryPtr::OOPS;
1777     Node* store = store_oop_to_array(control(), a, d, adr_type, c, elemtype, T_OBJECT,
1778                                      StoreNode::release_if_reference(T_OBJECT));
1779     break;
1780   }
1781   case Bytecodes::_lastore: {
1782     a = array_addressing(T_LONG, 2);
1783     if (stopped())  return;     // guaranteed null or range check
1784     c = pop_pair();
1785     dec_sp(2);                  // Pop array and index
1786     store_to_memory(control(), a, c, T_LONG, TypeAryPtr::LONGS, MemNode::unordered);
1787     break;


2232     break;
2233 
2234   case Bytecodes::_i2d:
2235     a = pop();
2236     b = _gvn.transform( new ConvI2DNode(a));
2237     push_pair(b);
2238     break;
2239 
2240   case Bytecodes::_iinc:        // Increment local
2241     i = iter().get_index();     // Get local index
2242     set_local( i, _gvn.transform( new AddINode( _gvn.intcon(iter().get_iinc_con()), local(i) ) ) );
2243     break;
2244 
2245   // Exit points of synchronized methods must have an unlock node
2246   case Bytecodes::_return:
2247     return_current(NULL);
2248     break;
2249 
2250   case Bytecodes::_ireturn:
2251   case Bytecodes::_areturn:

2252   case Bytecodes::_freturn:
2253     return_current(pop());
2254     break;
2255   case Bytecodes::_lreturn:
2256     return_current(pop_pair());
2257     break;
2258   case Bytecodes::_dreturn:
2259     return_current(pop_pair());
2260     break;
2261 
2262   case Bytecodes::_athrow:
2263     // null exception oop throws NULL pointer exception
2264     null_check(peek());
2265     if (stopped())  return;
2266     // Hook the thrown exception directly to subsequent handlers.
2267     if (BailoutToInterpreterForThrows) {
2268       // Keep method interpreted from now on.
2269       uncommon_trap(Deoptimization::Reason_unhandled,
2270                     Deoptimization::Action_make_not_compilable);
2271       return;


2386     do_call();
2387     break;
2388   case Bytecodes::_checkcast:
2389     do_checkcast();
2390     break;
2391   case Bytecodes::_instanceof:
2392     do_instanceof();
2393     break;
2394   case Bytecodes::_anewarray:
2395     do_newarray();
2396     break;
2397   case Bytecodes::_newarray:
2398     do_newarray((BasicType)iter().get_index());
2399     break;
2400   case Bytecodes::_multianewarray:
2401     do_multianewarray();
2402     break;
2403   case Bytecodes::_new:
2404     do_new();
2405     break;
2406   case Bytecodes::_defaultvalue:
2407     do_defaultvalue();
2408     break;
2409   case Bytecodes::_withfield:
2410     do_withfield();
2411     break;
2412 
2413   case Bytecodes::_jsr:
2414   case Bytecodes::_jsr_w:
2415     do_jsr();
2416     break;
2417 
2418   case Bytecodes::_ret:
2419     do_ret();
2420     break;
2421 
2422 
2423   case Bytecodes::_monitorenter:
2424     do_monitor_enter();
2425     break;
2426 
2427   case Bytecodes::_monitorexit:
2428     do_monitor_exit();
2429     break;
2430 








2431   case Bytecodes::_breakpoint:
2432     // Breakpoint set concurrently to compile
2433     // %%% use an uncommon trap?
2434     C->record_failure("breakpoint in method");
2435     return;
2436 
2437   default:
2438 #ifndef PRODUCT
2439     map()->dump(99);
2440 #endif
2441     tty->print("\nUnhandled bytecode %s\n", Bytecodes::name(bc()) );
2442     ShouldNotReachHere();
2443   }
2444 
2445 #ifndef PRODUCT
2446   IdealGraphPrinter *printer = C->printer();
2447   if (printer && printer->should_print(1)) {
2448     char buffer[256];
2449     sprintf(buffer, "Bytecode %d: %s", bci(), Bytecodes::name(bc()));
2450     bool old = printer->traverse_outs();
< prev index next >