< prev index next >

src/hotspot/share/opto/graphKit.cpp

Print this page

   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "asm/register.hpp"


  26 #include "ci/ciObjArray.hpp"
  27 #include "ci/ciUtilities.hpp"
  28 #include "classfile/javaClasses.hpp"
  29 #include "compiler/compileLog.hpp"
  30 #include "gc/shared/barrierSet.hpp"
  31 #include "gc/shared/c2/barrierSetC2.hpp"
  32 #include "interpreter/interpreter.hpp"
  33 #include "memory/resourceArea.hpp"

  34 #include "opto/addnode.hpp"
  35 #include "opto/castnode.hpp"
  36 #include "opto/convertnode.hpp"
  37 #include "opto/graphKit.hpp"
  38 #include "opto/idealKit.hpp"

  39 #include "opto/intrinsicnode.hpp"
  40 #include "opto/locknode.hpp"
  41 #include "opto/machnode.hpp"


  42 #include "opto/opaquenode.hpp"
  43 #include "opto/parse.hpp"
  44 #include "opto/rootnode.hpp"
  45 #include "opto/runtime.hpp"
  46 #include "opto/subtypenode.hpp"

  47 #include "runtime/deoptimization.hpp"
  48 #include "runtime/sharedRuntime.hpp"

  49 #include "utilities/bitMap.inline.hpp"
  50 #include "utilities/growableArray.hpp"
  51 #include "utilities/powerOfTwo.hpp"
  52 
  53 //----------------------------GraphKit-----------------------------------------
  54 // Main utility constructor.
  55 GraphKit::GraphKit(JVMState* jvms)
  56   : Phase(Phase::Parser),
  57     _env(C->env()),
  58     _gvn(*C->initial_gvn()),
  59     _barrier_set(BarrierSet::barrier_set()->barrier_set_c2())
  60 {

  61   _exceptions = jvms->map()->next_exception();
  62   if (_exceptions != nullptr)  jvms->map()->set_next_exception(nullptr);
  63   set_jvms(jvms);







  64 }
  65 
  66 // Private constructor for parser.
  67 GraphKit::GraphKit()
  68   : Phase(Phase::Parser),
  69     _env(C->env()),
  70     _gvn(*C->initial_gvn()),
  71     _barrier_set(BarrierSet::barrier_set()->barrier_set_c2())
  72 {
  73   _exceptions = nullptr;
  74   set_map(nullptr);
  75   DEBUG_ONLY(_sp = -99);
  76   DEBUG_ONLY(set_bci(-99));
  77 }
  78 
  79 
  80 
  81 //---------------------------clean_stack---------------------------------------
  82 // Clear away rubbish from the stack area of the JVM state.
  83 // This destroys any arguments that may be waiting on the stack.

 328 }
 329 static inline void add_one_req(Node* dstphi, Node* src) {
 330   assert(is_hidden_merge(dstphi), "must be a special merge node");
 331   assert(!is_hidden_merge(src), "must not be a special merge node");
 332   dstphi->add_req(src);
 333 }
 334 
 335 //-----------------------combine_exception_states------------------------------
 336 // This helper function combines exception states by building phis on a
 337 // specially marked state-merging region.  These regions and phis are
 338 // untransformed, and can build up gradually.  The region is marked by
 339 // having a control input of its exception map, rather than null.  Such
 340 // regions do not appear except in this function, and in use_exception_state.
 341 void GraphKit::combine_exception_states(SafePointNode* ex_map, SafePointNode* phi_map) {
 342   if (failing_internal()) {
 343     return;  // dying anyway...
 344   }
 345   JVMState* ex_jvms = ex_map->_jvms;
 346   assert(ex_jvms->same_calls_as(phi_map->_jvms), "consistent call chains");
 347   assert(ex_jvms->stkoff() == phi_map->_jvms->stkoff(), "matching locals");
 348   assert(ex_jvms->sp() == phi_map->_jvms->sp(), "matching stack sizes");

 349   assert(ex_jvms->monoff() == phi_map->_jvms->monoff(), "matching JVMS");
 350   assert(ex_jvms->scloff() == phi_map->_jvms->scloff(), "matching scalar replaced objects");
 351   assert(ex_map->req() == phi_map->req(), "matching maps");
 352   uint tos = ex_jvms->stkoff() + ex_jvms->sp();
 353   Node*         hidden_merge_mark = root();
 354   Node*         region  = phi_map->control();
 355   MergeMemNode* phi_mem = phi_map->merged_memory();
 356   MergeMemNode* ex_mem  = ex_map->merged_memory();
 357   if (region->in(0) != hidden_merge_mark) {
 358     // The control input is not (yet) a specially-marked region in phi_map.
 359     // Make it so, and build some phis.
 360     region = new RegionNode(2);
 361     _gvn.set_type(region, Type::CONTROL);
 362     region->set_req(0, hidden_merge_mark);  // marks an internal ex-state
 363     region->init_req(1, phi_map->control());
 364     phi_map->set_control(region);
 365     Node* io_phi = PhiNode::make(region, phi_map->i_o(), Type::ABIO);
 366     record_for_igvn(io_phi);
 367     _gvn.set_type(io_phi, Type::ABIO);
 368     phi_map->set_i_o(io_phi);

 856         if (PrintMiscellaneous && (Verbose || WizardMode)) {
 857           tty->print_cr("Zombie local %d: ", local);
 858           jvms->dump();
 859         }
 860         return false;
 861       }
 862     }
 863   }
 864   return true;
 865 }
 866 
 867 #endif //ASSERT
 868 
 869 // Helper function for enforcing certain bytecodes to reexecute if deoptimization happens.
 870 static bool should_reexecute_implied_by_bytecode(JVMState *jvms, bool is_anewarray) {
 871   ciMethod* cur_method = jvms->method();
 872   int       cur_bci   = jvms->bci();
 873   if (cur_method != nullptr && cur_bci != InvocationEntryBci) {
 874     Bytecodes::Code code = cur_method->java_code_at_bci(cur_bci);
 875     return Interpreter::bytecode_should_reexecute(code) ||
 876            (is_anewarray && code == Bytecodes::_multianewarray);
 877     // Reexecute _multianewarray bytecode which was replaced with
 878     // sequence of [a]newarray. See Parse::do_multianewarray().
 879     //
 880     // Note: interpreter should not have it set since this optimization
 881     // is limited by dimensions and guarded by flag so in some cases
 882     // multianewarray() runtime calls will be generated and
 883     // the bytecode should not be reexecutes (stack will not be reset).
 884   } else {
 885     return false;
 886   }
 887 }
 888 
 889 // Helper function for adding JVMState and debug information to node
 890 void GraphKit::add_safepoint_edges(SafePointNode* call, bool must_throw) {
 891   // Add the safepoint edges to the call (or other safepoint).
 892 
 893   // Make sure dead locals are set to top.  This
 894   // should help register allocation time and cut down on the size
 895   // of the deoptimization information.
 896   assert(dead_locals_are_killed(), "garbage in debug info before safepoint");

 924 
 925   if (env()->should_retain_local_variables()) {
 926     // At any safepoint, this method can get breakpointed, which would
 927     // then require an immediate deoptimization.
 928     can_prune_locals = false;  // do not prune locals
 929     stack_slots_not_pruned = 0;
 930   }
 931 
 932   // do not scribble on the input jvms
 933   JVMState* out_jvms = youngest_jvms->clone_deep(C);
 934   call->set_jvms(out_jvms); // Start jvms list for call node
 935 
 936   // For a known set of bytecodes, the interpreter should reexecute them if
 937   // deoptimization happens. We set the reexecute state for them here
 938   if (out_jvms->is_reexecute_undefined() && //don't change if already specified
 939       should_reexecute_implied_by_bytecode(out_jvms, call->is_AllocateArray())) {
 940 #ifdef ASSERT
 941     int inputs = 0, not_used; // initialized by GraphKit::compute_stack_effects()
 942     assert(method() == youngest_jvms->method(), "sanity");
 943     assert(compute_stack_effects(inputs, not_used), "unknown bytecode: %s", Bytecodes::name(java_bc()));
 944     assert(out_jvms->sp() >= (uint)inputs, "not enough operands for reexecution");

 945 #endif // ASSERT
 946     out_jvms->set_should_reexecute(true); //NOTE: youngest_jvms not changed
 947   }
 948 
 949   // Presize the call:
 950   DEBUG_ONLY(uint non_debug_edges = call->req());
 951   call->add_req_batch(top(), youngest_jvms->debug_depth());
 952   assert(call->req() == non_debug_edges + youngest_jvms->debug_depth(), "");
 953 
 954   // Set up edges so that the call looks like this:
 955   //  Call [state:] ctl io mem fptr retadr
 956   //       [parms:] parm0 ... parmN
 957   //       [root:]  loc0 ... locN stk0 ... stkSP mon0 obj0 ... monN objN
 958   //    [...mid:]   loc0 ... locN stk0 ... stkSP mon0 obj0 ... monN objN [...]
 959   //       [young:] loc0 ... locN stk0 ... stkSP mon0 obj0 ... monN objN
 960   // Note that caller debug info precedes callee debug info.
 961 
 962   // Fill pointer walks backwards from "young:" to "root:" in the diagram above:
 963   uint debug_ptr = call->req();
 964 
 965   // Loop over the map input edges associated with jvms, add them
 966   // to the call node, & reset all offsets to match call node array.


 967   for (JVMState* in_jvms = youngest_jvms; in_jvms != nullptr; ) {
 968     uint debug_end   = debug_ptr;
 969     uint debug_start = debug_ptr - in_jvms->debug_size();
 970     debug_ptr = debug_start;  // back up the ptr
 971 
 972     uint p = debug_start;  // walks forward in [debug_start, debug_end)
 973     uint j, k, l;
 974     SafePointNode* in_map = in_jvms->map();
 975     out_jvms->set_map(call);
 976 
 977     if (can_prune_locals) {
 978       assert(in_jvms->method() == out_jvms->method(), "sanity");
 979       // If the current throw can reach an exception handler in this JVMS,
 980       // then we must keep everything live that can reach that handler.
 981       // As a quick and dirty approximation, we look for any handlers at all.
 982       if (in_jvms->method()->has_exception_handlers()) {
 983         can_prune_locals = false;
 984       }
 985     }
 986 
 987     // Add the Locals
 988     k = in_jvms->locoff();
 989     l = in_jvms->loc_size();
 990     out_jvms->set_locoff(p);
 991     if (!can_prune_locals) {
 992       for (j = 0; j < l; j++)
 993         call->set_req(p++, in_map->in(k+j));

 994     } else {
 995       p += l;  // already set to top above by add_req_batch
 996     }
 997 
 998     // Add the Expression Stack
 999     k = in_jvms->stkoff();
1000     l = in_jvms->sp();
1001     out_jvms->set_stkoff(p);
1002     if (!can_prune_locals) {
1003       for (j = 0; j < l; j++)
1004         call->set_req(p++, in_map->in(k+j));

1005     } else if (can_prune_locals && stack_slots_not_pruned != 0) {
1006       // Divide stack into {S0,...,S1}, where S0 is set to top.
1007       uint s1 = stack_slots_not_pruned;
1008       stack_slots_not_pruned = 0;  // for next iteration
1009       if (s1 > l)  s1 = l;
1010       uint s0 = l - s1;
1011       p += s0;  // skip the tops preinstalled by add_req_batch
1012       for (j = s0; j < l; j++)
1013         call->set_req(p++, in_map->in(k+j));
1014     } else {
1015       p += l;  // already set to top above by add_req_batch
1016     }
1017 
1018     // Add the Monitors
1019     k = in_jvms->monoff();
1020     l = in_jvms->mon_size();
1021     out_jvms->set_monoff(p);
1022     for (j = 0; j < l; j++)
1023       call->set_req(p++, in_map->in(k+j));
1024 
1025     // Copy any scalar object fields.
1026     k = in_jvms->scloff();
1027     l = in_jvms->scl_size();
1028     out_jvms->set_scloff(p);
1029     for (j = 0; j < l; j++)
1030       call->set_req(p++, in_map->in(k+j));
1031 
1032     // Finish the new jvms.
1033     out_jvms->set_endoff(p);
1034 
1035     assert(out_jvms->endoff()     == debug_end,             "fill ptr must match");
1036     assert(out_jvms->depth()      == in_jvms->depth(),      "depth must match");
1037     assert(out_jvms->loc_size()   == in_jvms->loc_size(),   "size must match");
1038     assert(out_jvms->mon_size()   == in_jvms->mon_size(),   "size must match");
1039     assert(out_jvms->scl_size()   == in_jvms->scl_size(),   "size must match");
1040     assert(out_jvms->debug_size() == in_jvms->debug_size(), "size must match");
1041 
1042     // Update the two tail pointers in parallel.

1043     out_jvms = out_jvms->caller();
1044     in_jvms  = in_jvms->caller();
1045   }
1046 
1047   assert(debug_ptr == non_debug_edges, "debug info must fit exactly");
1048 
1049   // Test the correctness of JVMState::debug_xxx accessors:
1050   assert(call->jvms()->debug_start() == non_debug_edges, "");
1051   assert(call->jvms()->debug_end()   == call->req(), "");
1052   assert(call->jvms()->debug_depth() == call->req() - non_debug_edges, "");
1053 }
1054 
1055 bool GraphKit::compute_stack_effects(int& inputs, int& depth) {
1056   Bytecodes::Code code = java_bc();
1057   if (code == Bytecodes::_wide) {
1058     code = method()->java_code_at_bci(bci() + 1);
1059   }
1060 
1061   if (code != Bytecodes::_illegal) {
1062     depth = Bytecodes::depth(code); // checkcast=0, athrow=-1

1198   Node* conv = _gvn.transform( new ConvI2LNode(offset));
1199   Node* mask = _gvn.transform(ConLNode::make((julong) max_juint));
1200   return _gvn.transform( new AndLNode(conv, mask) );
1201 }
1202 
1203 Node* GraphKit::ConvL2I(Node* offset) {
1204   // short-circuit a common case
1205   jlong offset_con = find_long_con(offset, (jlong)Type::OffsetBot);
1206   if (offset_con != (jlong)Type::OffsetBot) {
1207     return intcon((int) offset_con);
1208   }
1209   return _gvn.transform( new ConvL2INode(offset));
1210 }
1211 
1212 //-------------------------load_object_klass-----------------------------------
1213 Node* GraphKit::load_object_klass(Node* obj) {
1214   // Special-case a fresh allocation to avoid building nodes:
1215   Node* akls = AllocateNode::Ideal_klass(obj, &_gvn);
1216   if (akls != nullptr)  return akls;
1217   Node* k_adr = basic_plus_adr(obj, oopDesc::klass_offset_in_bytes());
1218   return _gvn.transform(LoadKlassNode::make(_gvn, immutable_memory(), k_adr, TypeInstPtr::KLASS));
1219 }
1220 
1221 //-------------------------load_array_length-----------------------------------
1222 Node* GraphKit::load_array_length(Node* array) {
1223   // Special-case a fresh allocation to avoid building nodes:
1224   AllocateArrayNode* alloc = AllocateArrayNode::Ideal_array_allocation(array);
1225   Node *alen;
1226   if (alloc == nullptr) {
1227     Node *r_adr = basic_plus_adr(array, arrayOopDesc::length_offset_in_bytes());
1228     alen = _gvn.transform( new LoadRangeNode(nullptr, immutable_memory(), r_adr, TypeInt::POS));
1229   } else {
1230     alen = array_ideal_length(alloc, _gvn.type(array)->is_oopptr(), false);
1231   }
1232   return alen;
1233 }
1234 
1235 Node* GraphKit::array_ideal_length(AllocateArrayNode* alloc,
1236                                    const TypeOopPtr* oop_type,
1237                                    bool replace_length_in_map) {
1238   Node* length = alloc->Ideal_length();

1247         replace_in_map(length, ccast);
1248       }
1249       return ccast;
1250     }
1251   }
1252   return length;
1253 }
1254 
1255 //------------------------------do_null_check----------------------------------
1256 // Helper function to do a null pointer check.  Returned value is
1257 // the incoming address with null casted away.  You are allowed to use the
1258 // not-null value only if you are control dependent on the test.
1259 #ifndef PRODUCT
1260 extern uint explicit_null_checks_inserted,
1261             explicit_null_checks_elided;
1262 #endif
1263 Node* GraphKit::null_check_common(Node* value, BasicType type,
1264                                   // optional arguments for variations:
1265                                   bool assert_null,
1266                                   Node* *null_control,
1267                                   bool speculative) {

1268   assert(!assert_null || null_control == nullptr, "not both at once");
1269   if (stopped())  return top();
1270   NOT_PRODUCT(explicit_null_checks_inserted++);
1271 























1272   // Construct null check
1273   Node *chk = nullptr;
1274   switch(type) {
1275     case T_LONG   : chk = new CmpLNode(value, _gvn.zerocon(T_LONG)); break;
1276     case T_INT    : chk = new CmpINode(value, _gvn.intcon(0)); break;
1277     case T_ARRAY  : // fall through
1278       type = T_OBJECT;  // simplify further tests
1279     case T_OBJECT : {
1280       const Type *t = _gvn.type( value );
1281 
1282       const TypeOopPtr* tp = t->isa_oopptr();
1283       if (tp != nullptr && !tp->is_loaded()
1284           // Only for do_null_check, not any of its siblings:
1285           && !assert_null && null_control == nullptr) {
1286         // Usually, any field access or invocation on an unloaded oop type
1287         // will simply fail to link, since the statically linked class is
1288         // likely also to be unloaded.  However, in -Xcomp mode, sometimes
1289         // the static class is loaded but the sharper oop type is not.
1290         // Rather than checking for this obscure case in lots of places,
1291         // we simply observe that a null check on an unloaded class

1355         }
1356         Node *oldcontrol = control();
1357         set_control(cfg);
1358         Node *res = cast_not_null(value);
1359         set_control(oldcontrol);
1360         NOT_PRODUCT(explicit_null_checks_elided++);
1361         return res;
1362       }
1363       cfg = IfNode::up_one_dom(cfg, /*linear_only=*/ true);
1364       if (cfg == nullptr)  break;  // Quit at region nodes
1365       depth++;
1366     }
1367   }
1368 
1369   //-----------
1370   // Branch to failure if null
1371   float ok_prob = PROB_MAX;  // a priori estimate:  nulls never happen
1372   Deoptimization::DeoptReason reason;
1373   if (assert_null) {
1374     reason = Deoptimization::reason_null_assert(speculative);
1375   } else if (type == T_OBJECT) {
1376     reason = Deoptimization::reason_null_check(speculative);
1377   } else {
1378     reason = Deoptimization::Reason_div0_check;
1379   }
1380   // %%% Since Reason_unhandled is not recorded on a per-bytecode basis,
1381   // ciMethodData::has_trap_at will return a conservative -1 if any
1382   // must-be-null assertion has failed.  This could cause performance
1383   // problems for a method after its first do_null_assert failure.
1384   // Consider using 'Reason_class_check' instead?
1385 
1386   // To cause an implicit null check, we set the not-null probability
1387   // to the maximum (PROB_MAX).  For an explicit check the probability
1388   // is set to a smaller value.
1389   if (null_control != nullptr || too_many_traps(reason)) {
1390     // probability is less likely
1391     ok_prob =  PROB_LIKELY_MAG(3);
1392   } else if (!assert_null &&
1393              (ImplicitNullCheckThreshold > 0) &&
1394              method() != nullptr &&
1395              (method()->method_data()->trap_count(reason)

1429   }
1430 
1431   if (assert_null) {
1432     // Cast obj to null on this path.
1433     replace_in_map(value, zerocon(type));
1434     return zerocon(type);
1435   }
1436 
1437   // Cast obj to not-null on this path, if there is no null_control.
1438   // (If there is a null_control, a non-null value may come back to haunt us.)
1439   if (type == T_OBJECT) {
1440     Node* cast = cast_not_null(value, false);
1441     if (null_control == nullptr || (*null_control) == top())
1442       replace_in_map(value, cast);
1443     value = cast;
1444   }
1445 
1446   return value;
1447 }
1448 
1449 
1450 //------------------------------cast_not_null----------------------------------
1451 // Cast obj to not-null on this path
1452 Node* GraphKit::cast_not_null(Node* obj, bool do_replace_in_map) {









1453   const Type *t = _gvn.type(obj);
1454   const Type *t_not_null = t->join_speculative(TypePtr::NOTNULL);
1455   // Object is already not-null?
1456   if( t == t_not_null ) return obj;
1457 
1458   Node* cast = new CastPPNode(control(), obj,t_not_null);
1459   cast = _gvn.transform( cast );
1460 
1461   // Scan for instances of 'obj' in the current JVM mapping.
1462   // These instances are known to be not-null after the test.
1463   if (do_replace_in_map)
1464     replace_in_map(obj, cast);
1465 
1466   return cast;                  // Return casted value
1467 }
1468 











1469 // Sometimes in intrinsics, we implicitly know an object is not null
1470 // (there's no actual null check) so we can cast it to not null. In
1471 // the course of optimizations, the input to the cast can become null.
1472 // In that case that data path will die and we need the control path
1473 // to become dead as well to keep the graph consistent. So we have to
1474 // add a check for null for which one branch can't be taken. It uses
1475 // an OpaqueNotNull node that will cause the check to be removed after loop
1476 // opts so the test goes away and the compiled code doesn't execute a
1477 // useless check.
1478 Node* GraphKit::must_be_not_null(Node* value, bool do_replace_in_map) {
1479   if (!TypePtr::NULL_PTR->higher_equal(_gvn.type(value))) {
1480     return value;
1481   }
1482   Node* chk = _gvn.transform(new CmpPNode(value, null()));
1483   Node* tst = _gvn.transform(new BoolNode(chk, BoolTest::ne));
1484   Node* opaq = _gvn.transform(new OpaqueNotNullNode(C, tst));
1485   IfNode* iff = new IfNode(control(), opaq, PROB_MAX, COUNT_UNKNOWN);
1486   _gvn.set_type(iff, iff->Value(&_gvn));
1487   if (!tst->is_Con()) {
1488     record_for_igvn(iff);

1561 // These are layered on top of the factory methods in LoadNode and StoreNode,
1562 // and integrate with the parser's memory state and _gvn engine.
1563 //
1564 
1565 // factory methods in "int adr_idx"
1566 Node* GraphKit::make_load(Node* ctl, Node* adr, const Type* t, BasicType bt,
1567                           MemNode::MemOrd mo,
1568                           LoadNode::ControlDependency control_dependency,
1569                           bool require_atomic_access,
1570                           bool unaligned,
1571                           bool mismatched,
1572                           bool unsafe,
1573                           uint8_t barrier_data) {
1574   int adr_idx = C->get_alias_index(_gvn.type(adr)->isa_ptr());
1575   assert(adr_idx != Compile::AliasIdxTop, "use other make_load factory" );
1576   const TypePtr* adr_type = nullptr; // debug-mode-only argument
1577   DEBUG_ONLY(adr_type = C->get_adr_type(adr_idx));
1578   Node* mem = memory(adr_idx);
1579   Node* ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo, control_dependency, require_atomic_access, unaligned, mismatched, unsafe, barrier_data);
1580   ld = _gvn.transform(ld);

1581   if (((bt == T_OBJECT) && C->do_escape_analysis()) || C->eliminate_boxing()) {
1582     // Improve graph before escape analysis and boxing elimination.
1583     record_for_igvn(ld);
1584     if (ld->is_DecodeN()) {
1585       // Also record the actual load (LoadN) in case ld is DecodeN. In some
1586       // rare corner cases, ld->in(1) can be something other than LoadN (e.g.,
1587       // a Phi). Recording such cases is still perfectly sound, but may be
1588       // unnecessary and result in some minor IGVN overhead.
1589       record_for_igvn(ld->in(1));
1590     }
1591   }
1592   return ld;
1593 }
1594 
1595 Node* GraphKit::store_to_memory(Node* ctl, Node* adr, Node *val, BasicType bt,
1596                                 MemNode::MemOrd mo,
1597                                 bool require_atomic_access,
1598                                 bool unaligned,
1599                                 bool mismatched,
1600                                 bool unsafe,

1614   if (unsafe) {
1615     st->as_Store()->set_unsafe_access();
1616   }
1617   st->as_Store()->set_barrier_data(barrier_data);
1618   st = _gvn.transform(st);
1619   set_memory(st, adr_idx);
1620   // Back-to-back stores can only remove intermediate store with DU info
1621   // so push on worklist for optimizer.
1622   if (mem->req() > MemNode::Address && adr == mem->in(MemNode::Address))
1623     record_for_igvn(st);
1624 
1625   return st;
1626 }
1627 
1628 Node* GraphKit::access_store_at(Node* obj,
1629                                 Node* adr,
1630                                 const TypePtr* adr_type,
1631                                 Node* val,
1632                                 const Type* val_type,
1633                                 BasicType bt,
1634                                 DecoratorSet decorators) {


1635   // Transformation of a value which could be null pointer (CastPP #null)
1636   // could be delayed during Parse (for example, in adjust_map_after_if()).
1637   // Execute transformation here to avoid barrier generation in such case.
1638   if (_gvn.type(val) == TypePtr::NULL_PTR) {
1639     val = _gvn.makecon(TypePtr::NULL_PTR);
1640   }
1641 
1642   if (stopped()) {
1643     return top(); // Dead path ?
1644   }
1645 
1646   assert(val != nullptr, "not dead path");







1647 
1648   C2AccessValuePtr addr(adr, adr_type);
1649   C2AccessValue value(val, val_type);
1650   C2ParseAccess access(this, decorators | C2_WRITE_ACCESS, bt, obj, addr);
1651   if (access.is_raw()) {
1652     return _barrier_set->BarrierSetC2::store_at(access, value);
1653   } else {
1654     return _barrier_set->store_at(access, value);
1655   }
1656 }
1657 
1658 Node* GraphKit::access_load_at(Node* obj,   // containing obj
1659                                Node* adr,   // actual address to store val at
1660                                const TypePtr* adr_type,
1661                                const Type* val_type,
1662                                BasicType bt,
1663                                DecoratorSet decorators) {

1664   if (stopped()) {
1665     return top(); // Dead path ?
1666   }
1667 
1668   C2AccessValuePtr addr(adr, adr_type);
1669   C2ParseAccess access(this, decorators | C2_READ_ACCESS, bt, obj, addr);
1670   if (access.is_raw()) {
1671     return _barrier_set->BarrierSetC2::load_at(access, val_type);
1672   } else {
1673     return _barrier_set->load_at(access, val_type);
1674   }
1675 }
1676 
1677 Node* GraphKit::access_load(Node* adr,   // actual address to load val at
1678                             const Type* val_type,
1679                             BasicType bt,
1680                             DecoratorSet decorators) {
1681   if (stopped()) {
1682     return top(); // Dead path ?
1683   }
1684 
1685   C2AccessValuePtr addr(adr, adr->bottom_type()->is_ptr());
1686   C2ParseAccess access(this, decorators | C2_READ_ACCESS, bt, nullptr, addr);
1687   if (access.is_raw()) {
1688     return _barrier_set->BarrierSetC2::load_at(access, val_type);
1689   } else {

1754                                      Node* new_val,
1755                                      const Type* value_type,
1756                                      BasicType bt,
1757                                      DecoratorSet decorators) {
1758   C2AccessValuePtr addr(adr, adr_type);
1759   C2AtomicParseAccess access(this, decorators | C2_READ_ACCESS | C2_WRITE_ACCESS, bt, obj, addr, alias_idx);
1760   if (access.is_raw()) {
1761     return _barrier_set->BarrierSetC2::atomic_add_at(access, new_val, value_type);
1762   } else {
1763     return _barrier_set->atomic_add_at(access, new_val, value_type);
1764   }
1765 }
1766 
1767 void GraphKit::access_clone(Node* src, Node* dst, Node* size, bool is_array) {
1768   return _barrier_set->clone(this, src, dst, size, is_array);
1769 }
1770 
1771 //-------------------------array_element_address-------------------------
1772 Node* GraphKit::array_element_address(Node* ary, Node* idx, BasicType elembt,
1773                                       const TypeInt* sizetype, Node* ctrl) {
1774   uint shift  = exact_log2(type2aelembytes(elembt));
1775   uint header = arrayOopDesc::base_offset_in_bytes(elembt);













1776 
1777   // short-circuit a common case (saves lots of confusing waste motion)
1778   jint idx_con = find_int_con(idx, -1);
1779   if (idx_con >= 0) {
1780     intptr_t offset = header + ((intptr_t)idx_con << shift);
1781     return basic_plus_adr(ary, offset);
1782   }
1783 
1784   // must be correct type for alignment purposes
1785   Node* base  = basic_plus_adr(ary, header);
1786   idx = Compile::conv_I2X_index(&_gvn, idx, sizetype, ctrl);
1787   Node* scale = _gvn.transform( new LShiftXNode(idx, intcon(shift)) );
1788   return basic_plus_adr(ary, base, scale);
1789 }
1790 

































1791 //-------------------------load_array_element-------------------------
1792 Node* GraphKit::load_array_element(Node* ary, Node* idx, const TypeAryPtr* arytype, bool set_ctrl) {
1793   const Type* elemtype = arytype->elem();
1794   BasicType elembt = elemtype->array_element_basic_type();
1795   Node* adr = array_element_address(ary, idx, elembt, arytype->size());
1796   if (elembt == T_NARROWOOP) {
1797     elembt = T_OBJECT; // To satisfy switch in LoadNode::make()
1798   }
1799   Node* ld = access_load_at(ary, adr, arytype, elemtype, elembt,
1800                             IN_HEAP | IS_ARRAY | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0));
1801   return ld;
1802 }
1803 
1804 //-------------------------set_arguments_for_java_call-------------------------
1805 // Arguments (pre-popped from the stack) are taken from the JVMS.
1806 void GraphKit::set_arguments_for_java_call(CallJavaNode* call) {
1807   // Add the call arguments:
1808   uint nargs = call->method()->arg_size();
1809   for (uint i = 0; i < nargs; i++) {
1810     Node* arg = argument(i);
1811     call->init_req(i + TypeFunc::Parms, arg);




































1812   }
1813 }
1814 
1815 //---------------------------set_edges_for_java_call---------------------------
1816 // Connect a newly created call into the current JVMS.
1817 // A return value node (if any) is returned from set_edges_for_java_call.
1818 void GraphKit::set_edges_for_java_call(CallJavaNode* call, bool must_throw, bool separate_io_proj) {
1819 
1820   // Add the predefined inputs:
1821   call->init_req( TypeFunc::Control, control() );
1822   call->init_req( TypeFunc::I_O    , i_o() );
1823   call->init_req( TypeFunc::Memory , reset_memory() );
1824   call->init_req( TypeFunc::FramePtr, frameptr() );
1825   call->init_req( TypeFunc::ReturnAdr, top() );
1826 
1827   add_safepoint_edges(call, must_throw);
1828 
1829   Node* xcall = _gvn.transform(call);
1830 
1831   if (xcall == top()) {
1832     set_control(top());
1833     return;
1834   }
1835   assert(xcall == call, "call identity is stable");
1836 
1837   // Re-use the current map to produce the result.
1838 
1839   set_control(_gvn.transform(new ProjNode(call, TypeFunc::Control)));
1840   set_i_o(    _gvn.transform(new ProjNode(call, TypeFunc::I_O    , separate_io_proj)));
1841   set_all_memory_call(xcall, separate_io_proj);
1842 
1843   //return xcall;   // no need, caller already has it
1844 }
1845 
1846 Node* GraphKit::set_results_for_java_call(CallJavaNode* call, bool separate_io_proj, bool deoptimize) {
1847   if (stopped())  return top();  // maybe the call folded up?
1848 
1849   // Capture the return value, if any.
1850   Node* ret;
1851   if (call->method() == nullptr ||
1852       call->method()->return_type()->basic_type() == T_VOID)
1853         ret = top();
1854   else  ret = _gvn.transform(new ProjNode(call, TypeFunc::Parms));
1855 
1856   // Note:  Since any out-of-line call can produce an exception,
1857   // we always insert an I_O projection from the call into the result.
1858 
1859   make_slow_call_ex(call, env()->Throwable_klass(), separate_io_proj, deoptimize);
1860 
1861   if (separate_io_proj) {
1862     // The caller requested separate projections be used by the fall
1863     // through and exceptional paths, so replace the projections for
1864     // the fall through path.
1865     set_i_o(_gvn.transform( new ProjNode(call, TypeFunc::I_O) ));
1866     set_all_memory(_gvn.transform( new ProjNode(call, TypeFunc::Memory) ));
1867   }








































































1868   return ret;
1869 }
1870 
1871 //--------------------set_predefined_input_for_runtime_call--------------------
1872 // Reading and setting the memory state is way conservative here.
1873 // The real problem is that I am not doing real Type analysis on memory,
1874 // so I cannot distinguish card mark stores from other stores.  Across a GC
1875 // point the Store Barrier and the card mark memory has to agree.  I cannot
1876 // have a card mark store and its barrier split across the GC point from
1877 // either above or below.  Here I get that to happen by reading ALL of memory.
1878 // A better answer would be to separate out card marks from other memory.
1879 // For now, return the input memory state, so that it can be reused
1880 // after the call, if this call has restricted memory effects.
1881 Node* GraphKit::set_predefined_input_for_runtime_call(SafePointNode* call, Node* narrow_mem) {
1882   // Set fixed predefined input arguments
1883   call->init_req(TypeFunc::Control, control());
1884   call->init_req(TypeFunc::I_O, top()); // does no i/o
1885   call->init_req(TypeFunc::ReturnAdr, top());
1886   if (call->is_CallLeafPure()) {
1887     call->init_req(TypeFunc::Memory, top());

1949     if (use->is_MergeMem()) {
1950       wl.push(use);
1951     }
1952   }
1953 }
1954 
1955 // Replace the call with the current state of the kit.
1956 void GraphKit::replace_call(CallNode* call, Node* result, bool do_replaced_nodes, bool do_asserts) {
1957   JVMState* ejvms = nullptr;
1958   if (has_exceptions()) {
1959     ejvms = transfer_exceptions_into_jvms();
1960   }
1961 
1962   ReplacedNodes replaced_nodes = map()->replaced_nodes();
1963   ReplacedNodes replaced_nodes_exception;
1964   Node* ex_ctl = top();
1965 
1966   SafePointNode* final_state = stop();
1967 
1968   // Find all the needed outputs of this call
1969   CallProjections callprojs;
1970   call->extract_projections(&callprojs, true, do_asserts);
1971 
1972   Unique_Node_List wl;
1973   Node* init_mem = call->in(TypeFunc::Memory);
1974   Node* final_mem = final_state->in(TypeFunc::Memory);
1975   Node* final_ctl = final_state->in(TypeFunc::Control);
1976   Node* final_io = final_state->in(TypeFunc::I_O);
1977 
1978   // Replace all the old call edges with the edges from the inlining result
1979   if (callprojs.fallthrough_catchproj != nullptr) {
1980     C->gvn_replace_by(callprojs.fallthrough_catchproj, final_ctl);
1981   }
1982   if (callprojs.fallthrough_memproj != nullptr) {
1983     if (final_mem->is_MergeMem()) {
1984       // Parser's exits MergeMem was not transformed but may be optimized
1985       final_mem = _gvn.transform(final_mem);
1986     }
1987     C->gvn_replace_by(callprojs.fallthrough_memproj,   final_mem);
1988     add_mergemem_users_to_worklist(wl, final_mem);
1989   }
1990   if (callprojs.fallthrough_ioproj != nullptr) {
1991     C->gvn_replace_by(callprojs.fallthrough_ioproj,    final_io);
1992   }
1993 
1994   // Replace the result with the new result if it exists and is used
1995   if (callprojs.resproj != nullptr && result != nullptr) {
1996     C->gvn_replace_by(callprojs.resproj, result);




1997   }
1998 
1999   if (ejvms == nullptr) {
2000     // No exception edges to simply kill off those paths
2001     if (callprojs.catchall_catchproj != nullptr) {
2002       C->gvn_replace_by(callprojs.catchall_catchproj, C->top());
2003     }
2004     if (callprojs.catchall_memproj != nullptr) {
2005       C->gvn_replace_by(callprojs.catchall_memproj,   C->top());
2006     }
2007     if (callprojs.catchall_ioproj != nullptr) {
2008       C->gvn_replace_by(callprojs.catchall_ioproj,    C->top());
2009     }
2010     // Replace the old exception object with top
2011     if (callprojs.exobj != nullptr) {
2012       C->gvn_replace_by(callprojs.exobj, C->top());
2013     }
2014   } else {
2015     GraphKit ekit(ejvms);
2016 
2017     // Load my combined exception state into the kit, with all phis transformed:
2018     SafePointNode* ex_map = ekit.combine_and_pop_all_exception_states();
2019     replaced_nodes_exception = ex_map->replaced_nodes();
2020 
2021     Node* ex_oop = ekit.use_exception_state(ex_map);
2022 
2023     if (callprojs.catchall_catchproj != nullptr) {
2024       C->gvn_replace_by(callprojs.catchall_catchproj, ekit.control());
2025       ex_ctl = ekit.control();
2026     }
2027     if (callprojs.catchall_memproj != nullptr) {
2028       Node* ex_mem = ekit.reset_memory();
2029       C->gvn_replace_by(callprojs.catchall_memproj,   ex_mem);
2030       add_mergemem_users_to_worklist(wl, ex_mem);
2031     }
2032     if (callprojs.catchall_ioproj != nullptr) {
2033       C->gvn_replace_by(callprojs.catchall_ioproj,    ekit.i_o());
2034     }
2035 
2036     // Replace the old exception object with the newly created one
2037     if (callprojs.exobj != nullptr) {
2038       C->gvn_replace_by(callprojs.exobj, ex_oop);
2039     }
2040   }
2041 
2042   // Disconnect the call from the graph
2043   call->disconnect_inputs(C);
2044   C->gvn_replace_by(call, C->top());
2045 
2046   // Clean up any MergeMems that feed other MergeMems since the
2047   // optimizer doesn't like that.
2048   while (wl.size() > 0) {
2049     _gvn.transform(wl.pop());
2050   }
2051 
2052   if (callprojs.fallthrough_catchproj != nullptr && !final_ctl->is_top() && do_replaced_nodes) {
2053     replaced_nodes.apply(C, final_ctl);
2054   }
2055   if (!ex_ctl->is_top() && do_replaced_nodes) {
2056     replaced_nodes_exception.apply(C, ex_ctl);
2057   }
2058 }
2059 
2060 
2061 //------------------------------increment_counter------------------------------
2062 // for statistics: increment a VM counter by 1
2063 
2064 void GraphKit::increment_counter(address counter_addr) {
2065   Node* adr1 = makecon(TypeRawPtr::make(counter_addr));
2066   increment_counter(adr1);
2067 }
2068 
2069 void GraphKit::increment_counter(Node* counter_addr) {
2070   Node* ctrl = control();
2071   Node* cnt  = make_load(ctrl, counter_addr, TypeLong::LONG, T_LONG, MemNode::unordered);
2072   Node* incr = _gvn.transform(new AddLNode(cnt, _gvn.longcon(1)));

2232  *
2233  * @param n          node that the type applies to
2234  * @param exact_kls  type from profiling
2235  * @param maybe_null did profiling see null?
2236  *
2237  * @return           node with improved type
2238  */
2239 Node* GraphKit::record_profile_for_speculation(Node* n, ciKlass* exact_kls, ProfilePtrKind ptr_kind) {
2240   const Type* current_type = _gvn.type(n);
2241   assert(UseTypeSpeculation, "type speculation must be on");
2242 
2243   const TypePtr* speculative = current_type->speculative();
2244 
2245   // Should the klass from the profile be recorded in the speculative type?
2246   if (current_type->would_improve_type(exact_kls, jvms()->depth())) {
2247     const TypeKlassPtr* tklass = TypeKlassPtr::make(exact_kls, Type::trust_interfaces);
2248     const TypeOopPtr* xtype = tklass->as_instance_type();
2249     assert(xtype->klass_is_exact(), "Should be exact");
2250     // Any reason to believe n is not null (from this profiling or a previous one)?
2251     assert(ptr_kind != ProfileAlwaysNull, "impossible here");
2252     const TypePtr* ptr = (ptr_kind == ProfileMaybeNull && current_type->speculative_maybe_null()) ? TypePtr::BOTTOM : TypePtr::NOTNULL;
2253     // record the new speculative type's depth
2254     speculative = xtype->cast_to_ptr_type(ptr->ptr())->is_ptr();
2255     speculative = speculative->with_inline_depth(jvms()->depth());
2256   } else if (current_type->would_improve_ptr(ptr_kind)) {
2257     // Profiling report that null was never seen so we can change the
2258     // speculative type to non null ptr.
2259     if (ptr_kind == ProfileAlwaysNull) {
2260       speculative = TypePtr::NULL_PTR;
2261     } else {
2262       assert(ptr_kind == ProfileNeverNull, "nothing else is an improvement");
2263       const TypePtr* ptr = TypePtr::NOTNULL;
2264       if (speculative != nullptr) {
2265         speculative = speculative->cast_to_ptr_type(ptr->ptr())->is_ptr();
2266       } else {
2267         speculative = ptr;
2268       }
2269     }
2270   }
2271 
2272   if (speculative != current_type->speculative()) {
2273     // Build a type with a speculative type (what we think we know
2274     // about the type but will need a guard when we use it)
2275     const TypeOopPtr* spec_type = TypeOopPtr::make(TypePtr::BotPTR, Type::OffsetBot, TypeOopPtr::InstanceBot, speculative);
2276     // We're changing the type, we need a new CheckCast node to carry
2277     // the new type. The new type depends on the control: what
2278     // profiling tells us is only valid from here as far as we can
2279     // tell.
2280     Node* cast = new CheckCastPPNode(control(), n, current_type->remove_speculative()->join_speculative(spec_type));
2281     cast = _gvn.transform(cast);
2282     replace_in_map(n, cast);
2283     n = cast;
2284   }
2285 
2286   return n;
2287 }
2288 
2289 /**
2290  * Record profiling data from receiver profiling at an invoke with the
2291  * type system so that it can propagate it (speculation)
2292  *
2293  * @param n  receiver node
2294  *
2295  * @return   node with improved type
2296  */
2297 Node* GraphKit::record_profiled_receiver_for_speculation(Node* n) {
2298   if (!UseTypeSpeculation) {
2299     return n;
2300   }
2301   ciKlass* exact_kls = profile_has_unique_klass();
2302   ProfilePtrKind ptr_kind = ProfileMaybeNull;
2303   if ((java_bc() == Bytecodes::_checkcast ||
2304        java_bc() == Bytecodes::_instanceof ||
2305        java_bc() == Bytecodes::_aastore) &&
2306       method()->method_data()->is_mature()) {
2307     ciProfileData* data = method()->method_data()->bci_to_data(bci());
2308     if (data != nullptr) {
2309       if (!data->as_BitData()->null_seen()) {
2310         ptr_kind = ProfileNeverNull;







2311       } else {
2312         if (TypeProfileCasts) {
2313           assert(data->is_ReceiverTypeData(), "bad profile data type");
2314           ciReceiverTypeData* call = (ciReceiverTypeData*)data->as_ReceiverTypeData();
2315           uint i = 0;
2316           for (; i < call->row_limit(); i++) {
2317             ciKlass* receiver = call->receiver(i);
2318             if (receiver != nullptr) {
2319               break;




2320             }

2321           }
2322           ptr_kind = (i == call->row_limit()) ? ProfileAlwaysNull : ProfileMaybeNull;
2323         }
2324       }
2325     }
2326   }
2327   return record_profile_for_speculation(n, exact_kls, ptr_kind);
2328 }
2329 
2330 /**
2331  * Record profiling data from argument profiling at an invoke with the
2332  * type system so that it can propagate it (speculation)
2333  *
2334  * @param dest_method  target method for the call
2335  * @param bc           what invoke bytecode is this?
2336  */
2337 void GraphKit::record_profiled_arguments_for_speculation(ciMethod* dest_method, Bytecodes::Code bc) {
2338   if (!UseTypeSpeculation) {
2339     return;
2340   }
2341   const TypeFunc* tf    = TypeFunc::make(dest_method);
2342   int             nargs = tf->domain()->cnt() - TypeFunc::Parms;
2343   int skip = Bytecodes::has_receiver(bc) ? 1 : 0;
2344   for (int j = skip, i = 0; j < nargs && i < TypeProfileArgsLimit; j++) {
2345     const Type *targ = tf->domain()->field_at(j + TypeFunc::Parms);
2346     if (is_reference_type(targ->basic_type())) {
2347       ProfilePtrKind ptr_kind = ProfileMaybeNull;
2348       ciKlass* better_type = nullptr;
2349       if (method()->argument_profiled_type(bci(), i, better_type, ptr_kind)) {
2350         record_profile_for_speculation(argument(j), better_type, ptr_kind);
2351       }
2352       i++;
2353     }
2354   }
2355 }
2356 
2357 /**
2358  * Record profiling data from parameter profiling at an invoke with
2359  * the type system so that it can propagate it (speculation)
2360  */
2361 void GraphKit::record_profiled_parameters_for_speculation() {
2362   if (!UseTypeSpeculation) {
2363     return;
2364   }
2365   for (int i = 0, j = 0; i < method()->arg_size() ; i++) {

2485                                   // The first null ends the list.
2486                                   Node* parm0, Node* parm1,
2487                                   Node* parm2, Node* parm3,
2488                                   Node* parm4, Node* parm5,
2489                                   Node* parm6, Node* parm7) {
2490   assert(call_addr != nullptr, "must not call null targets");
2491 
2492   // Slow-path call
2493   bool is_leaf = !(flags & RC_NO_LEAF);
2494   bool has_io  = (!is_leaf && !(flags & RC_NO_IO));
2495   if (call_name == nullptr) {
2496     assert(!is_leaf, "must supply name for leaf");
2497     call_name = OptoRuntime::stub_name(call_addr);
2498   }
2499   CallNode* call;
2500   if (!is_leaf) {
2501     call = new CallStaticJavaNode(call_type, call_addr, call_name, adr_type);
2502   } else if (flags & RC_NO_FP) {
2503     call = new CallLeafNoFPNode(call_type, call_addr, call_name, adr_type);
2504   } else  if (flags & RC_VECTOR){
2505     uint num_bits = call_type->range()->field_at(TypeFunc::Parms)->is_vect()->length_in_bytes() * BitsPerByte;
2506     call = new CallLeafVectorNode(call_type, call_addr, call_name, adr_type, num_bits);
2507   } else if (flags & RC_PURE) {
2508     assert(adr_type == nullptr, "pure call does not touch memory");
2509     call = new CallLeafPureNode(call_type, call_addr, call_name);
2510   } else {
2511     call = new CallLeafNode(call_type, call_addr, call_name, adr_type);
2512   }
2513 
2514   // The following is similar to set_edges_for_java_call,
2515   // except that the memory effects of the call are restricted to AliasIdxRaw.
2516 
2517   // Slow path call has no side-effects, uses few values
2518   bool wide_in  = !(flags & RC_NARROW_MEM);
2519   bool wide_out = (C->get_alias_index(adr_type) == Compile::AliasIdxBot);
2520 
2521   Node* prev_mem = nullptr;
2522   if (wide_in) {
2523     prev_mem = set_predefined_input_for_runtime_call(call);
2524   } else {
2525     assert(!wide_out, "narrow in => narrow out");
2526     Node* narrow_mem = memory(adr_type);
2527     prev_mem = set_predefined_input_for_runtime_call(call, narrow_mem);
2528   }
2529 
2530   // Hook each parm in order.  Stop looking at the first null.
2531   if (parm0 != nullptr) { call->init_req(TypeFunc::Parms+0, parm0);
2532   if (parm1 != nullptr) { call->init_req(TypeFunc::Parms+1, parm1);
2533   if (parm2 != nullptr) { call->init_req(TypeFunc::Parms+2, parm2);
2534   if (parm3 != nullptr) { call->init_req(TypeFunc::Parms+3, parm3);
2535   if (parm4 != nullptr) { call->init_req(TypeFunc::Parms+4, parm4);
2536   if (parm5 != nullptr) { call->init_req(TypeFunc::Parms+5, parm5);
2537   if (parm6 != nullptr) { call->init_req(TypeFunc::Parms+6, parm6);
2538   if (parm7 != nullptr) { call->init_req(TypeFunc::Parms+7, parm7);
2539   /* close each nested if ===> */  } } } } } } } }
2540   assert(call->in(call->req()-1) != nullptr, "must initialize all parms");
2541 
2542   if (!is_leaf) {
2543     // Non-leaves can block and take safepoints:
2544     add_safepoint_edges(call, ((flags & RC_MUST_THROW) != 0));
2545   }
2546   // Non-leaves can throw exceptions:
2547   if (has_io) {
2548     call->set_req(TypeFunc::I_O, i_o());
2549   }
2550 
2551   if (flags & RC_UNCOMMON) {
2552     // Set the count to a tiny probability.  Cf. Estimate_Block_Frequency.
2553     // (An "if" probability corresponds roughly to an unconditional count.
2554     // Sort of.)
2555     call->set_cnt(PROB_UNLIKELY_MAG(4));
2556   }
2557 
2558   Node* c = _gvn.transform(call);
2559   assert(c == call, "cannot disappear");
2560 

2568 
2569   if (has_io) {
2570     set_i_o(_gvn.transform(new ProjNode(call, TypeFunc::I_O)));
2571   }
2572   return call;
2573 
2574 }
2575 
2576 // i2b
2577 Node* GraphKit::sign_extend_byte(Node* in) {
2578   Node* tmp = _gvn.transform(new LShiftINode(in, _gvn.intcon(24)));
2579   return _gvn.transform(new RShiftINode(tmp, _gvn.intcon(24)));
2580 }
2581 
2582 // i2s
2583 Node* GraphKit::sign_extend_short(Node* in) {
2584   Node* tmp = _gvn.transform(new LShiftINode(in, _gvn.intcon(16)));
2585   return _gvn.transform(new RShiftINode(tmp, _gvn.intcon(16)));
2586 }
2587 

2588 //------------------------------merge_memory-----------------------------------
2589 // Merge memory from one path into the current memory state.
2590 void GraphKit::merge_memory(Node* new_mem, Node* region, int new_path) {
2591   for (MergeMemStream mms(merged_memory(), new_mem->as_MergeMem()); mms.next_non_empty2(); ) {
2592     Node* old_slice = mms.force_memory();
2593     Node* new_slice = mms.memory2();
2594     if (old_slice != new_slice) {
2595       PhiNode* phi;
2596       if (old_slice->is_Phi() && old_slice->as_Phi()->region() == region) {
2597         if (mms.is_empty()) {
2598           // clone base memory Phi's inputs for this memory slice
2599           assert(old_slice == mms.base_memory(), "sanity");
2600           phi = PhiNode::make(region, nullptr, Type::MEMORY, mms.adr_type(C));
2601           _gvn.set_type(phi, Type::MEMORY);
2602           for (uint i = 1; i < phi->req(); i++) {
2603             phi->init_req(i, old_slice->in(i));
2604           }
2605         } else {
2606           phi = old_slice->as_Phi(); // Phi was generated already
2607         }

2664   gvn.transform(iff);
2665   if (!bol->is_Con()) gvn.record_for_igvn(iff);
2666   return iff;
2667 }
2668 
2669 //-------------------------------gen_subtype_check-----------------------------
2670 // Generate a subtyping check.  Takes as input the subtype and supertype.
2671 // Returns 2 values: sets the default control() to the true path and returns
2672 // the false path.  Only reads invariant memory; sets no (visible) memory.
2673 // The PartialSubtypeCheckNode sets the hidden 1-word cache in the encoding
2674 // but that's not exposed to the optimizer.  This call also doesn't take in an
2675 // Object; if you wish to check an Object you need to load the Object's class
2676 // prior to coming here.
2677 Node* Phase::gen_subtype_check(Node* subklass, Node* superklass, Node** ctrl, Node* mem, PhaseGVN& gvn,
2678                                ciMethod* method, int bci) {
2679   Compile* C = gvn.C;
2680   if ((*ctrl)->is_top()) {
2681     return C->top();
2682   }
2683 








2684   // Fast check for identical types, perhaps identical constants.
2685   // The types can even be identical non-constants, in cases
2686   // involving Array.newInstance, Object.clone, etc.
2687   if (subklass == superklass)
2688     return C->top();             // false path is dead; no test needed.
2689 
2690   if (gvn.type(superklass)->singleton()) {
2691     const TypeKlassPtr* superk = gvn.type(superklass)->is_klassptr();
2692     const TypeKlassPtr* subk   = gvn.type(subklass)->is_klassptr();
2693 
2694     // In the common case of an exact superklass, try to fold up the
2695     // test before generating code.  You may ask, why not just generate
2696     // the code and then let it fold up?  The answer is that the generated
2697     // code will necessarily include null checks, which do not always
2698     // completely fold away.  If they are also needless, then they turn
2699     // into a performance loss.  Example:
2700     //    Foo[] fa = blah(); Foo x = fa[0]; fa[1] = x;
2701     // Here, the type of 'fa' is often exact, so the store check
2702     // of fa[1]=x will fold up, without testing the nullness of x.
2703     //
2704     // At macro expansion, we would have already folded the SubTypeCheckNode
2705     // being expanded here because we always perform the static sub type
2706     // check in SubTypeCheckNode::sub() regardless of whether
2707     // StressReflectiveCode is set or not. We can therefore skip this
2708     // static check when StressReflectiveCode is on.
2709     switch (C->static_subtype_check(superk, subk)) {
2710     case Compile::SSC_always_false:
2711       {
2712         Node* always_fail = *ctrl;
2713         *ctrl = gvn.C->top();
2714         return always_fail;
2715       }
2716     case Compile::SSC_always_true:
2717       return C->top();
2718     case Compile::SSC_easy_test:
2719       {
2720         // Just do a direct pointer compare and be done.
2721         IfNode* iff = gen_subtype_check_compare(*ctrl, subklass, superklass, BoolTest::eq, PROB_STATIC_FREQUENT, gvn, T_ADDRESS);
2722         *ctrl = gvn.transform(new IfTrueNode(iff));
2723         return gvn.transform(new IfFalseNode(iff));
2724       }
2725     case Compile::SSC_full_test:
2726       break;
2727     default:
2728       ShouldNotReachHere();
2729     }
2730   }
2731 
2732   // %%% Possible further optimization:  Even if the superklass is not exact,
2733   // if the subklass is the unique subtype of the superklass, the check
2734   // will always succeed.  We could leave a dependency behind to ensure this.
2735 
2736   // First load the super-klass's check-offset
2737   Node *p1 = gvn.transform(new AddPNode(superklass, superklass, gvn.MakeConX(in_bytes(Klass::super_check_offset_offset()))));
2738   Node* m = C->immutable_memory();
2739   Node *chk_off = gvn.transform(new LoadINode(nullptr, m, p1, gvn.type(p1)->is_ptr(), TypeInt::INT, MemNode::unordered));
2740   int cacheoff_con = in_bytes(Klass::secondary_super_cache_offset());
2741   const TypeInt* chk_off_t = chk_off->Value(&gvn)->isa_int();

2779   gvn.record_for_igvn(r_ok_subtype);
2780 
2781   // If we might perform an expensive check, first try to take advantage of profile data that was attached to the
2782   // SubTypeCheck node
2783   if (might_be_cache && method != nullptr && VM_Version::profile_all_receivers_at_type_check()) {
2784     ciCallProfile profile = method->call_profile_at_bci(bci);
2785     float total_prob = 0;
2786     for (int i = 0; profile.has_receiver(i); ++i) {
2787       float prob = profile.receiver_prob(i);
2788       total_prob += prob;
2789     }
2790     if (total_prob * 100. >= TypeProfileSubTypeCheckCommonThreshold) {
2791       const TypeKlassPtr* superk = gvn.type(superklass)->is_klassptr();
2792       for (int i = 0; profile.has_receiver(i); ++i) {
2793         ciKlass* klass = profile.receiver(i);
2794         const TypeKlassPtr* klass_t = TypeKlassPtr::make(klass);
2795         Compile::SubTypeCheckResult result = C->static_subtype_check(superk, klass_t);
2796         if (result != Compile::SSC_always_true && result != Compile::SSC_always_false) {
2797           continue;
2798         }




2799         float prob = profile.receiver_prob(i);
2800         ConNode* klass_node = gvn.makecon(klass_t);
2801         IfNode* iff = gen_subtype_check_compare(*ctrl, subklass, klass_node, BoolTest::eq, prob, gvn, T_ADDRESS);
2802         Node* iftrue = gvn.transform(new IfTrueNode(iff));
2803 
2804         if (result == Compile::SSC_always_true) {
2805           r_ok_subtype->add_req(iftrue);
2806         } else {
2807           assert(result == Compile::SSC_always_false, "");
2808           r_not_subtype->add_req(iftrue);
2809         }
2810         *ctrl = gvn.transform(new IfFalseNode(iff));
2811       }
2812     }
2813   }
2814 
2815   // See if we get an immediate positive hit.  Happens roughly 83% of the
2816   // time.  Test to see if the value loaded just previously from the subklass
2817   // is exactly the superklass.
2818   IfNode *iff1 = gen_subtype_check_compare(*ctrl, superklass, nkls, BoolTest::eq, PROB_LIKELY(0.83f), gvn, T_ADDRESS);

2832       igvn->remove_globally_dead_node(r_not_subtype);
2833     }
2834     return not_subtype_ctrl;
2835   }
2836 
2837   r_ok_subtype->init_req(1, iftrue1);
2838 
2839   // Check for immediate negative hit.  Happens roughly 11% of the time (which
2840   // is roughly 63% of the remaining cases).  Test to see if the loaded
2841   // check-offset points into the subklass display list or the 1-element
2842   // cache.  If it points to the display (and NOT the cache) and the display
2843   // missed then it's not a subtype.
2844   Node *cacheoff = gvn.intcon(cacheoff_con);
2845   IfNode *iff2 = gen_subtype_check_compare(*ctrl, chk_off, cacheoff, BoolTest::ne, PROB_LIKELY(0.63f), gvn, T_INT);
2846   r_not_subtype->init_req(1, gvn.transform(new IfTrueNode (iff2)));
2847   *ctrl = gvn.transform(new IfFalseNode(iff2));
2848 
2849   // Check for self.  Very rare to get here, but it is taken 1/3 the time.
2850   // No performance impact (too rare) but allows sharing of secondary arrays
2851   // which has some footprint reduction.
2852   IfNode *iff3 = gen_subtype_check_compare(*ctrl, subklass, superklass, BoolTest::eq, PROB_LIKELY(0.36f), gvn, T_ADDRESS);
2853   r_ok_subtype->init_req(2, gvn.transform(new IfTrueNode(iff3)));
2854   *ctrl = gvn.transform(new IfFalseNode(iff3));
2855 
2856   // -- Roads not taken here: --
2857   // We could also have chosen to perform the self-check at the beginning
2858   // of this code sequence, as the assembler does.  This would not pay off
2859   // the same way, since the optimizer, unlike the assembler, can perform
2860   // static type analysis to fold away many successful self-checks.
2861   // Non-foldable self checks work better here in second position, because
2862   // the initial primary superclass check subsumes a self-check for most
2863   // types.  An exception would be a secondary type like array-of-interface,
2864   // which does not appear in its own primary supertype display.
2865   // Finally, we could have chosen to move the self-check into the
2866   // PartialSubtypeCheckNode, and from there out-of-line in a platform
2867   // dependent manner.  But it is worthwhile to have the check here,
2868   // where it can be perhaps be optimized.  The cost in code space is
2869   // small (register compare, branch).
2870 
2871   // Now do a linear scan of the secondary super-klass array.  Again, no real
2872   // performance impact (too rare) but it's gotta be done.
2873   // Since the code is rarely used, there is no penalty for moving it
2874   // out of line, and it can only improve I-cache density.
2875   // The decision to inline or out-of-line this final check is platform
2876   // dependent, and is found in the AD file definition of PartialSubtypeCheck.
2877   Node* psc = gvn.transform(
2878     new PartialSubtypeCheckNode(*ctrl, subklass, superklass));
2879 
2880   IfNode *iff4 = gen_subtype_check_compare(*ctrl, psc, gvn.zerocon(T_OBJECT), BoolTest::ne, PROB_FAIR, gvn, T_ADDRESS);
2881   r_not_subtype->init_req(2, gvn.transform(new IfTrueNode (iff4)));
2882   r_ok_subtype ->init_req(3, gvn.transform(new IfFalseNode(iff4)));
2883 
2884   // Return false path; set default control to true path.
2885   *ctrl = gvn.transform(r_ok_subtype);
2886   return gvn.transform(r_not_subtype);
2887 }
2888 
2889 Node* GraphKit::gen_subtype_check(Node* obj_or_subklass, Node* superklass) {





2890   bool expand_subtype_check = C->post_loop_opts_phase(); // macro node expansion is over
2891   if (expand_subtype_check) {
2892     MergeMemNode* mem = merged_memory();
2893     Node* ctrl = control();
2894     Node* subklass = obj_or_subklass;
2895     if (!_gvn.type(obj_or_subklass)->isa_klassptr()) {
2896       subklass = load_object_klass(obj_or_subklass);
2897     }
2898 
2899     Node* n = Phase::gen_subtype_check(subklass, superklass, &ctrl, mem, _gvn, method(), bci());
2900     set_control(ctrl);
2901     return n;
2902   }
2903 
2904   Node* check = _gvn.transform(new SubTypeCheckNode(C, obj_or_subklass, superklass, method(), bci()));
2905   Node* bol = _gvn.transform(new BoolNode(check, BoolTest::eq));
2906   IfNode* iff = create_and_xform_if(control(), bol, PROB_STATIC_FREQUENT, COUNT_UNKNOWN);
2907   set_control(_gvn.transform(new IfTrueNode(iff)));
2908   return _gvn.transform(new IfFalseNode(iff));
2909 }
2910 
2911 // Profile-driven exact type check:
2912 Node* GraphKit::type_check_receiver(Node* receiver, ciKlass* klass,
2913                                     float prob,
2914                                     Node* *casted_receiver) {
2915   assert(!klass->is_interface(), "no exact type check on interfaces");
2916 











2917   const TypeKlassPtr* tklass = TypeKlassPtr::make(klass, Type::trust_interfaces);




2918   Node* recv_klass = load_object_klass(receiver);
2919   Node* want_klass = makecon(tklass);
2920   Node* cmp = _gvn.transform(new CmpPNode(recv_klass, want_klass));
2921   Node* bol = _gvn.transform(new BoolNode(cmp, BoolTest::eq));
2922   IfNode* iff = create_and_xform_if(control(), bol, prob, COUNT_UNKNOWN);
2923   set_control( _gvn.transform(new IfTrueNode (iff)));
2924   Node* fail = _gvn.transform(new IfFalseNode(iff));
2925 
2926   if (!stopped()) {
2927     const TypeOopPtr* receiver_type = _gvn.type(receiver)->isa_oopptr();
2928     const TypeOopPtr* recvx_type = tklass->as_instance_type();
2929     assert(recvx_type->klass_is_exact(), "");
2930 
2931     if (!receiver_type->higher_equal(recvx_type)) { // ignore redundant casts
2932       // Subsume downstream occurrences of receiver with a cast to
2933       // recv_xtype, since now we know what the type will be.
2934       Node* cast = new CheckCastPPNode(control(), receiver, recvx_type);
2935       (*casted_receiver) = _gvn.transform(cast);





2936       assert(!(*casted_receiver)->is_top(), "that path should be unreachable");
2937       // (User must make the replace_in_map call.)
2938     }
2939   }
2940 
2941   return fail;
2942 }
2943 











2944 //------------------------------subtype_check_receiver-------------------------
2945 Node* GraphKit::subtype_check_receiver(Node* receiver, ciKlass* klass,
2946                                        Node** casted_receiver) {
2947   const TypeKlassPtr* tklass = TypeKlassPtr::make(klass, Type::trust_interfaces)->try_improve();
2948   Node* want_klass = makecon(tklass);
2949 
2950   Node* slow_ctl = gen_subtype_check(receiver, want_klass);
2951 
2952   // Ignore interface type information until interface types are properly tracked.
2953   if (!stopped() && !klass->is_interface()) {
2954     const TypeOopPtr* receiver_type = _gvn.type(receiver)->isa_oopptr();
2955     const TypeOopPtr* recv_type = tklass->cast_to_exactness(false)->is_klassptr()->as_instance_type();
2956     if (!receiver_type->higher_equal(recv_type)) { // ignore redundant casts
2957       Node* cast = new CheckCastPPNode(control(), receiver, recv_type);
2958       (*casted_receiver) = _gvn.transform(cast);



2959     }
2960   }
2961 
2962   return slow_ctl;
2963 }
2964 
2965 //------------------------------seems_never_null-------------------------------
2966 // Use null_seen information if it is available from the profile.
2967 // If we see an unexpected null at a type check we record it and force a
2968 // recompile; the offending check will be recompiled to handle nulls.
2969 // If we see several offending BCIs, then all checks in the
2970 // method will be recompiled.
2971 bool GraphKit::seems_never_null(Node* obj, ciProfileData* data, bool& speculating) {
2972   speculating = !_gvn.type(obj)->speculative_maybe_null();
2973   Deoptimization::DeoptReason reason = Deoptimization::reason_null_check(speculating);
2974   if (UncommonNullCast               // Cutout for this technique
2975       && obj != null()               // And not the -Xcomp stupid case?
2976       && !too_many_traps(reason)
2977       ) {
2978     if (speculating) {

3047 
3048 //------------------------maybe_cast_profiled_receiver-------------------------
3049 // If the profile has seen exactly one type, narrow to exactly that type.
3050 // Subsequent type checks will always fold up.
3051 Node* GraphKit::maybe_cast_profiled_receiver(Node* not_null_obj,
3052                                              const TypeKlassPtr* require_klass,
3053                                              ciKlass* spec_klass,
3054                                              bool safe_for_replace) {
3055   if (!UseTypeProfile || !TypeProfileCasts) return nullptr;
3056 
3057   Deoptimization::DeoptReason reason = Deoptimization::reason_class_check(spec_klass != nullptr);
3058 
3059   // Make sure we haven't already deoptimized from this tactic.
3060   if (too_many_traps_or_recompiles(reason))
3061     return nullptr;
3062 
3063   // (No, this isn't a call, but it's enough like a virtual call
3064   // to use the same ciMethod accessor to get the profile info...)
3065   // If we have a speculative type use it instead of profiling (which
3066   // may not help us)
3067   ciKlass* exact_kls = spec_klass == nullptr ? profile_has_unique_klass() : spec_klass;













3068   if (exact_kls != nullptr) {// no cast failures here
3069     if (require_klass == nullptr ||
3070         C->static_subtype_check(require_klass, TypeKlassPtr::make(exact_kls, Type::trust_interfaces)) == Compile::SSC_always_true) {
3071       // If we narrow the type to match what the type profile sees or
3072       // the speculative type, we can then remove the rest of the
3073       // cast.
3074       // This is a win, even if the exact_kls is very specific,
3075       // because downstream operations, such as method calls,
3076       // will often benefit from the sharper type.
3077       Node* exact_obj = not_null_obj; // will get updated in place...
3078       Node* slow_ctl  = type_check_receiver(exact_obj, exact_kls, 1.0,
3079                                             &exact_obj);
3080       { PreserveJVMState pjvms(this);
3081         set_control(slow_ctl);
3082         uncommon_trap_exact(reason, Deoptimization::Action_maybe_recompile);
3083       }
3084       if (safe_for_replace) {
3085         replace_in_map(not_null_obj, exact_obj);
3086       }
3087       return exact_obj;

3177   // If not_null_obj is dead, only null-path is taken
3178   if (stopped()) {              // Doing instance-of on a null?
3179     set_control(null_ctl);
3180     return intcon(0);
3181   }
3182   region->init_req(_null_path, null_ctl);
3183   phi   ->init_req(_null_path, intcon(0)); // Set null path value
3184   if (null_ctl == top()) {
3185     // Do this eagerly, so that pattern matches like is_diamond_phi
3186     // will work even during parsing.
3187     assert(_null_path == PATH_LIMIT-1, "delete last");
3188     region->del_req(_null_path);
3189     phi   ->del_req(_null_path);
3190   }
3191 
3192   // Do we know the type check always succeed?
3193   bool known_statically = false;
3194   if (_gvn.type(superklass)->singleton()) {
3195     const TypeKlassPtr* superk = _gvn.type(superklass)->is_klassptr();
3196     const TypeKlassPtr* subk = _gvn.type(obj)->is_oopptr()->as_klass_type();
3197     if (subk->is_loaded()) {
3198       int static_res = C->static_subtype_check(superk, subk);
3199       known_statically = (static_res == Compile::SSC_always_true || static_res == Compile::SSC_always_false);
3200     }
3201   }
3202 
3203   if (!known_statically) {
3204     const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr();
3205     // We may not have profiling here or it may not help us. If we
3206     // have a speculative type use it to perform an exact cast.
3207     ciKlass* spec_obj_type = obj_type->speculative_type();
3208     if (spec_obj_type != nullptr || (ProfileDynamicTypes && data != nullptr)) {
3209       Node* cast_obj = maybe_cast_profiled_receiver(not_null_obj, nullptr, spec_obj_type, safe_for_replace);
3210       if (stopped()) {            // Profile disagrees with this path.
3211         set_control(null_ctl);    // Null is the only remaining possibility.
3212         return intcon(0);
3213       }
3214       if (cast_obj != nullptr) {
3215         not_null_obj = cast_obj;
3216       }
3217     }

3233   record_for_igvn(region);
3234 
3235   // If we know the type check always succeeds then we don't use the
3236   // profiling data at this bytecode. Don't lose it, feed it to the
3237   // type system as a speculative type.
3238   if (safe_for_replace) {
3239     Node* casted_obj = record_profiled_receiver_for_speculation(obj);
3240     replace_in_map(obj, casted_obj);
3241   }
3242 
3243   return _gvn.transform(phi);
3244 }
3245 
3246 //-------------------------------gen_checkcast---------------------------------
3247 // Generate a checkcast idiom.  Used by both the checkcast bytecode and the
3248 // array store bytecode.  Stack must be as-if BEFORE doing the bytecode so the
3249 // uncommon-trap paths work.  Adjust stack after this call.
3250 // If failure_control is supplied and not null, it is filled in with
3251 // the control edge for the cast failure.  Otherwise, an appropriate
3252 // uncommon trap or exception is thrown.
3253 Node* GraphKit::gen_checkcast(Node *obj, Node* superklass,
3254                               Node* *failure_control) {
3255   kill_dead_locals();           // Benefit all the uncommon traps
3256   const TypeKlassPtr* klass_ptr_type = _gvn.type(superklass)->is_klassptr();
















3257   const TypeKlassPtr* improved_klass_ptr_type = klass_ptr_type->try_improve();
3258   const TypeOopPtr* toop = improved_klass_ptr_type->cast_to_exactness(false)->as_instance_type();


3259 
3260   // Fast cutout:  Check the case that the cast is vacuously true.
3261   // This detects the common cases where the test will short-circuit
3262   // away completely.  We do this before we perform the null check,
3263   // because if the test is going to turn into zero code, we don't
3264   // want a residual null check left around.  (Causes a slowdown,
3265   // for example, in some objArray manipulations, such as a[i]=a[j].)
3266   if (improved_klass_ptr_type->singleton()) {
3267     const TypeOopPtr* objtp = _gvn.type(obj)->isa_oopptr();
3268     if (objtp != nullptr) {
3269       switch (C->static_subtype_check(improved_klass_ptr_type, objtp->as_klass_type())) {







3270       case Compile::SSC_always_true:
3271         // If we know the type check always succeed then we don't use
3272         // the profiling data at this bytecode. Don't lose it, feed it
3273         // to the type system as a speculative type.
3274         return record_profiled_receiver_for_speculation(obj);






3275       case Compile::SSC_always_false:




3276         // It needs a null check because a null will *pass* the cast check.
3277         // A non-null value will always produce an exception.
3278         if (!objtp->maybe_null()) {
3279           bool is_aastore = (java_bc() == Bytecodes::_aastore);
3280           Deoptimization::DeoptReason reason = is_aastore ?
3281             Deoptimization::Reason_array_check : Deoptimization::Reason_class_check;
3282           builtin_throw(reason);
3283           return top();
3284         } else if (!too_many_traps_or_recompiles(Deoptimization::Reason_null_assert)) {
3285           return null_assert(obj);
3286         }
3287         break; // Fall through to full check
3288       default:
3289         break;
3290       }
3291     }
3292   }
3293 
3294   ciProfileData* data = nullptr;
3295   bool safe_for_replace = false;
3296   if (failure_control == nullptr) {        // use MDO in regular case only
3297     assert(java_bc() == Bytecodes::_aastore ||
3298            java_bc() == Bytecodes::_checkcast,
3299            "interpreter profiles type checks only for these BCs");
3300     data = method()->method_data()->bci_to_data(bci());
3301     safe_for_replace = true;

3302   }
3303 
3304   // Make the merge point
3305   enum { _obj_path = 1, _null_path, PATH_LIMIT };
3306   RegionNode* region = new RegionNode(PATH_LIMIT);
3307   Node*       phi    = new PhiNode(region, toop);



3308   C->set_has_split_ifs(true); // Has chance for split-if optimization
3309 
3310   // Use null-cast information if it is available
3311   bool speculative_not_null = false;
3312   bool never_see_null = ((failure_control == nullptr)  // regular case only
3313                          && seems_never_null(obj, data, speculative_not_null));
3314 







3315   // Null check; get casted pointer; set region slot 3
3316   Node* null_ctl = top();
3317   Node* not_null_obj = null_check_oop(obj, &null_ctl, never_see_null, safe_for_replace, speculative_not_null);






3318 
3319   // If not_null_obj is dead, only null-path is taken
3320   if (stopped()) {              // Doing instance-of on a null?
3321     set_control(null_ctl);



3322     return null();
3323   }
3324   region->init_req(_null_path, null_ctl);
3325   phi   ->init_req(_null_path, null());  // Set null path value
3326   if (null_ctl == top()) {
3327     // Do this eagerly, so that pattern matches like is_diamond_phi
3328     // will work even during parsing.
3329     assert(_null_path == PATH_LIMIT-1, "delete last");
3330     region->del_req(_null_path);
3331     phi   ->del_req(_null_path);
3332   }
3333 
3334   Node* cast_obj = nullptr;
3335   if (improved_klass_ptr_type->klass_is_exact()) {
3336     // The following optimization tries to statically cast the speculative type of the object
3337     // (for example obtained during profiling) to the type of the superklass and then do a
3338     // dynamic check that the type of the object is what we expect. To work correctly
3339     // for checkcast and aastore the type of superklass should be exact.
3340     const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr();
3341     // We may not have profiling here or it may not help us. If we have
3342     // a speculative type use it to perform an exact cast.
3343     ciKlass* spec_obj_type = obj_type->speculative_type();
3344     if (spec_obj_type != nullptr || data != nullptr) {
3345       cast_obj = maybe_cast_profiled_receiver(not_null_obj, improved_klass_ptr_type, spec_obj_type, safe_for_replace);
3346       if (cast_obj != nullptr) {
3347         if (failure_control != nullptr) // failure is now impossible
3348           (*failure_control) = top();
3349         // adjust the type of the phi to the exact klass:
3350         phi->raise_bottom_type(_gvn.type(cast_obj)->meet_speculative(TypePtr::NULL_PTR));
3351       }
3352     }
3353   }
3354 
3355   if (cast_obj == nullptr) {
3356     // Generate the subtype check
3357     Node* improved_superklass = superklass;
3358     if (improved_klass_ptr_type != klass_ptr_type && improved_klass_ptr_type->singleton()) {



3359       improved_superklass = makecon(improved_klass_ptr_type);
3360     }
3361     Node* not_subtype_ctrl = gen_subtype_check(not_null_obj, improved_superklass);
3362 
3363     // Plug in success path into the merge
3364     cast_obj = _gvn.transform(new CheckCastPPNode(control(), not_null_obj, toop));
3365     // Failure path ends in uncommon trap (or may be dead - failure impossible)
3366     if (failure_control == nullptr) {
3367       if (not_subtype_ctrl != top()) { // If failure is possible
3368         PreserveJVMState pjvms(this);
3369         set_control(not_subtype_ctrl);
3370         bool is_aastore = (java_bc() == Bytecodes::_aastore);
3371         Deoptimization::DeoptReason reason = is_aastore ?
3372           Deoptimization::Reason_array_check : Deoptimization::Reason_class_check;
3373         builtin_throw(reason);
3374       }
3375     } else {
3376       (*failure_control) = not_subtype_ctrl;
3377     }
3378   }
3379 
3380   region->init_req(_obj_path, control());
3381   phi   ->init_req(_obj_path, cast_obj);
3382 
3383   // A merge of null or Casted-NotNull obj
3384   Node* res = _gvn.transform(phi);
3385 
3386   // Note I do NOT always 'replace_in_map(obj,result)' here.
3387   //  if( tk->klass()->can_be_primary_super()  )
3388     // This means that if I successfully store an Object into an array-of-String
3389     // I 'forget' that the Object is really now known to be a String.  I have to
3390     // do this because we don't have true union types for interfaces - if I store
3391     // a Baz into an array-of-Interface and then tell the optimizer it's an
3392     // Interface, I forget that it's also a Baz and cannot do Baz-like field
3393     // references to it.  FIX THIS WHEN UNION TYPES APPEAR!
3394   //  replace_in_map( obj, res );
3395 
3396   // Return final merged results
3397   set_control( _gvn.transform(region) );
3398   record_for_igvn(region);
3399 
3400   return record_profiled_receiver_for_speculation(res);




































































































































































3401 }
3402 
3403 //------------------------------next_monitor-----------------------------------
3404 // What number should be given to the next monitor?
3405 int GraphKit::next_monitor() {
3406   int current = jvms()->monitor_depth()* C->sync_stack_slots();
3407   int next = current + C->sync_stack_slots();
3408   // Keep the toplevel high water mark current:
3409   if (C->fixed_slots() < next)  C->set_fixed_slots(next);
3410   return current;
3411 }
3412 
3413 //------------------------------insert_mem_bar---------------------------------
3414 // Memory barrier to avoid floating things around
3415 // The membar serves as a pinch point between both control and all memory slices.
3416 Node* GraphKit::insert_mem_bar(int opcode, Node* precedent) {
3417   MemBarNode* mb = MemBarNode::make(C, opcode, Compile::AliasIdxBot, precedent);
3418   mb->init_req(TypeFunc::Control, control());
3419   mb->init_req(TypeFunc::Memory,  reset_memory());
3420   Node* membar = _gvn.transform(mb);

3512     lock->create_lock_counter(map()->jvms());
3513     increment_counter(lock->counter()->addr());
3514   }
3515 #endif
3516 
3517   return flock;
3518 }
3519 
3520 
3521 //------------------------------shared_unlock----------------------------------
3522 // Emit unlocking code.
3523 void GraphKit::shared_unlock(Node* box, Node* obj) {
3524   // bci is either a monitorenter bc or InvocationEntryBci
3525   // %%% SynchronizationEntryBCI is redundant; use InvocationEntryBci in interfaces
3526   assert(SynchronizationEntryBCI == InvocationEntryBci, "");
3527 
3528   if (stopped()) {               // Dead monitor?
3529     map()->pop_monitor();        // Kill monitor from debug info
3530     return;
3531   }

3532 
3533   // Memory barrier to avoid floating things down past the locked region
3534   insert_mem_bar(Op_MemBarReleaseLock);
3535 
3536   const TypeFunc *tf = OptoRuntime::complete_monitor_exit_Type();
3537   UnlockNode *unlock = new UnlockNode(C, tf);
3538 #ifdef ASSERT
3539   unlock->set_dbg_jvms(sync_jvms());
3540 #endif
3541   uint raw_idx = Compile::AliasIdxRaw;
3542   unlock->init_req( TypeFunc::Control, control() );
3543   unlock->init_req( TypeFunc::Memory , memory(raw_idx) );
3544   unlock->init_req( TypeFunc::I_O    , top() )     ;   // does no i/o
3545   unlock->init_req( TypeFunc::FramePtr, frameptr() );
3546   unlock->init_req( TypeFunc::ReturnAdr, top() );
3547 
3548   unlock->init_req(TypeFunc::Parms + 0, obj);
3549   unlock->init_req(TypeFunc::Parms + 1, box);
3550   unlock = _gvn.transform(unlock)->as_Unlock();
3551 
3552   Node* mem = reset_memory();
3553 
3554   // unlock has no side-effects, sets few values
3555   set_predefined_output_for_runtime_call(unlock, mem, TypeRawPtr::BOTTOM);
3556 
3557   // Kill monitor from debug info
3558   map()->pop_monitor( );
3559 }
3560 
3561 //-------------------------------get_layout_helper-----------------------------
3562 // If the given klass is a constant or known to be an array,
3563 // fetch the constant layout helper value into constant_value
3564 // and return null.  Otherwise, load the non-constant
3565 // layout helper value, and return the node which represents it.
3566 // This two-faced routine is useful because allocation sites
3567 // almost always feature constant types.
3568 Node* GraphKit::get_layout_helper(Node* klass_node, jint& constant_value) {
3569   const TypeKlassPtr* klass_t = _gvn.type(klass_node)->isa_klassptr();
3570   if (!StressReflectiveCode && klass_t != nullptr) {
3571     bool xklass = klass_t->klass_is_exact();
3572     if (xklass || (klass_t->isa_aryklassptr() && klass_t->is_aryklassptr()->elem() != Type::BOTTOM)) {







3573       jint lhelper;
3574       if (klass_t->isa_aryklassptr()) {
3575         BasicType elem = klass_t->as_instance_type()->isa_aryptr()->elem()->array_element_basic_type();


3576         if (is_reference_type(elem, true)) {
3577           elem = T_OBJECT;
3578         }
3579         lhelper = Klass::array_layout_helper(elem);
3580       } else {
3581         lhelper = klass_t->is_instklassptr()->exact_klass()->layout_helper();
3582       }
3583       if (lhelper != Klass::_lh_neutral_value) {
3584         constant_value = lhelper;
3585         return (Node*) nullptr;
3586       }
3587     }
3588   }
3589   constant_value = Klass::_lh_neutral_value;  // put in a known value
3590   Node* lhp = basic_plus_adr(klass_node, klass_node, in_bytes(Klass::layout_helper_offset()));
3591   return make_load(nullptr, lhp, TypeInt::INT, T_INT, MemNode::unordered);
3592 }
3593 
3594 // We just put in an allocate/initialize with a big raw-memory effect.
3595 // Hook selected additional alias categories on the initialization.
3596 static void hook_memory_on_init(GraphKit& kit, int alias_idx,
3597                                 MergeMemNode* init_in_merge,
3598                                 Node* init_out_raw) {
3599   DEBUG_ONLY(Node* init_in_raw = init_in_merge->base_memory());
3600   assert(init_in_merge->memory_at(alias_idx) == init_in_raw, "");
3601 
3602   Node* prevmem = kit.memory(alias_idx);
3603   init_in_merge->set_memory_at(alias_idx, prevmem);
3604   kit.set_memory(init_out_raw, alias_idx);


3605 }
3606 
3607 //---------------------------set_output_for_allocation-------------------------
3608 Node* GraphKit::set_output_for_allocation(AllocateNode* alloc,
3609                                           const TypeOopPtr* oop_type,
3610                                           bool deoptimize_on_exception) {
3611   int rawidx = Compile::AliasIdxRaw;
3612   alloc->set_req( TypeFunc::FramePtr, frameptr() );
3613   add_safepoint_edges(alloc);
3614   Node* allocx = _gvn.transform(alloc);
3615   set_control( _gvn.transform(new ProjNode(allocx, TypeFunc::Control) ) );
3616   // create memory projection for i_o
3617   set_memory ( _gvn.transform( new ProjNode(allocx, TypeFunc::Memory, true) ), rawidx );
3618   make_slow_call_ex(allocx, env()->Throwable_klass(), true, deoptimize_on_exception);
3619 
3620   // create a memory projection as for the normal control path
3621   Node* malloc = _gvn.transform(new ProjNode(allocx, TypeFunc::Memory));
3622   set_memory(malloc, rawidx);
3623 
3624   // a normal slow-call doesn't change i_o, but an allocation does
3625   // we create a separate i_o projection for the normal control path
3626   set_i_o(_gvn.transform( new ProjNode(allocx, TypeFunc::I_O, false) ) );
3627   Node* rawoop = _gvn.transform( new ProjNode(allocx, TypeFunc::Parms) );
3628 
3629   // put in an initialization barrier
3630   InitializeNode* init = insert_mem_bar_volatile(Op_Initialize, rawidx,
3631                                                  rawoop)->as_Initialize();
3632   assert(alloc->initialization() == init,  "2-way macro link must work");
3633   assert(init ->allocation()     == alloc, "2-way macro link must work");
3634   {
3635     // Extract memory strands which may participate in the new object's
3636     // initialization, and source them from the new InitializeNode.
3637     // This will allow us to observe initializations when they occur,
3638     // and link them properly (as a group) to the InitializeNode.
3639     assert(init->in(InitializeNode::Memory) == malloc, "");
3640     MergeMemNode* minit_in = MergeMemNode::make(malloc);
3641     init->set_req(InitializeNode::Memory, minit_in);
3642     record_for_igvn(minit_in); // fold it up later, if possible

3643     Node* minit_out = memory(rawidx);
3644     assert(minit_out->is_Proj() && minit_out->in(0) == init, "");
3645     int mark_idx = C->get_alias_index(oop_type->add_offset(oopDesc::mark_offset_in_bytes()));
3646     // Add an edge in the MergeMem for the header fields so an access to one of those has correct memory state.
3647     // Use one NarrowMemProjNode per slice to properly record the adr type of each slice. The Initialize node will have
3648     // multiple projections as a result.
3649     set_memory(_gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(mark_idx))), mark_idx);
3650     int klass_idx = C->get_alias_index(oop_type->add_offset(oopDesc::klass_offset_in_bytes()));
3651     set_memory(_gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(klass_idx))), klass_idx);
3652     if (oop_type->isa_aryptr()) {





3653       const TypePtr* telemref = oop_type->add_offset(Type::OffsetBot);
3654       int            elemidx  = C->get_alias_index(telemref);
3655       hook_memory_on_init(*this, elemidx, minit_in, _gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(elemidx))));
3656     } else if (oop_type->isa_instptr()) {

3657       ciInstanceKlass* ik = oop_type->is_instptr()->instance_klass();
3658       for (int i = 0, len = ik->nof_nonstatic_fields(); i < len; i++) {
3659         ciField* field = ik->nonstatic_field_at(i);
3660         if (field->offset_in_bytes() >= TrackedInitializationLimit * HeapWordSize)
3661           continue;  // do not bother to track really large numbers of fields
3662         // Find (or create) the alias category for this field:
3663         int fieldidx = C->alias_type(field)->index();
3664         hook_memory_on_init(*this, fieldidx, minit_in, _gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(fieldidx))));
3665       }
3666     }
3667   }
3668 
3669   // Cast raw oop to the real thing...
3670   Node* javaoop = new CheckCastPPNode(control(), rawoop, oop_type);
3671   javaoop = _gvn.transform(javaoop);
3672   C->set_recent_alloc(control(), javaoop);
3673   assert(just_allocated_object(control()) == javaoop, "just allocated");
3674 
3675 #ifdef ASSERT
3676   { // Verify that the AllocateNode::Ideal_allocation recognizers work:

3687       assert(alloc->in(AllocateNode::ALength)->is_top(), "no length, please");
3688     }
3689   }
3690 #endif //ASSERT
3691 
3692   return javaoop;
3693 }
3694 
3695 //---------------------------new_instance--------------------------------------
3696 // This routine takes a klass_node which may be constant (for a static type)
3697 // or may be non-constant (for reflective code).  It will work equally well
3698 // for either, and the graph will fold nicely if the optimizer later reduces
3699 // the type to a constant.
3700 // The optional arguments are for specialized use by intrinsics:
3701 //  - If 'extra_slow_test' if not null is an extra condition for the slow-path.
3702 //  - If 'return_size_val', report the total object size to the caller.
3703 //  - deoptimize_on_exception controls how Java exceptions are handled (rethrow vs deoptimize)
3704 Node* GraphKit::new_instance(Node* klass_node,
3705                              Node* extra_slow_test,
3706                              Node* *return_size_val,
3707                              bool deoptimize_on_exception) {

3708   // Compute size in doublewords
3709   // The size is always an integral number of doublewords, represented
3710   // as a positive bytewise size stored in the klass's layout_helper.
3711   // The layout_helper also encodes (in a low bit) the need for a slow path.
3712   jint  layout_con = Klass::_lh_neutral_value;
3713   Node* layout_val = get_layout_helper(klass_node, layout_con);
3714   int   layout_is_con = (layout_val == nullptr);
3715 
3716   if (extra_slow_test == nullptr)  extra_slow_test = intcon(0);
3717   // Generate the initial go-slow test.  It's either ALWAYS (return a
3718   // Node for 1) or NEVER (return a null) or perhaps (in the reflective
3719   // case) a computed value derived from the layout_helper.
3720   Node* initial_slow_test = nullptr;
3721   if (layout_is_con) {
3722     assert(!StressReflectiveCode, "stress mode does not use these paths");
3723     bool must_go_slow = Klass::layout_helper_needs_slow_path(layout_con);
3724     initial_slow_test = must_go_slow ? intcon(1) : extra_slow_test;
3725   } else {   // reflective case
3726     // This reflective path is used by Unsafe.allocateInstance.
3727     // (It may be stress-tested by specifying StressReflectiveCode.)
3728     // Basically, we want to get into the VM is there's an illegal argument.
3729     Node* bit = intcon(Klass::_lh_instance_slow_path_bit);
3730     initial_slow_test = _gvn.transform( new AndINode(layout_val, bit) );
3731     if (extra_slow_test != intcon(0)) {
3732       initial_slow_test = _gvn.transform( new OrINode(initial_slow_test, extra_slow_test) );
3733     }
3734     // (Macro-expander will further convert this to a Bool, if necessary.)

3745 
3746     // Clear the low bits to extract layout_helper_size_in_bytes:
3747     assert((int)Klass::_lh_instance_slow_path_bit < BytesPerLong, "clear bit");
3748     Node* mask = MakeConX(~ (intptr_t)right_n_bits(LogBytesPerLong));
3749     size = _gvn.transform( new AndXNode(size, mask) );
3750   }
3751   if (return_size_val != nullptr) {
3752     (*return_size_val) = size;
3753   }
3754 
3755   // This is a precise notnull oop of the klass.
3756   // (Actually, it need not be precise if this is a reflective allocation.)
3757   // It's what we cast the result to.
3758   const TypeKlassPtr* tklass = _gvn.type(klass_node)->isa_klassptr();
3759   if (!tklass)  tklass = TypeInstKlassPtr::OBJECT;
3760   const TypeOopPtr* oop_type = tklass->as_instance_type();
3761 
3762   // Now generate allocation code
3763 
3764   // The entire memory state is needed for slow path of the allocation
3765   // since GC and deoptimization can happened.
3766   Node *mem = reset_memory();
3767   set_all_memory(mem); // Create new memory state
3768 
3769   AllocateNode* alloc = new AllocateNode(C, AllocateNode::alloc_type(Type::TOP),
3770                                          control(), mem, i_o(),
3771                                          size, klass_node,
3772                                          initial_slow_test);
3773 
3774   return set_output_for_allocation(alloc, oop_type, deoptimize_on_exception);
3775 }
3776 
3777 //-------------------------------new_array-------------------------------------
3778 // helper for both newarray and anewarray
3779 // The 'length' parameter is (obviously) the length of the array.
3780 // The optional arguments are for specialized use by intrinsics:
3781 //  - If 'return_size_val', report the non-padded array size (sum of header size
3782 //    and array body) to the caller.
3783 //  - deoptimize_on_exception controls how Java exceptions are handled (rethrow vs deoptimize)
3784 Node* GraphKit::new_array(Node* klass_node,     // array klass (maybe variable)
3785                           Node* length,         // number of array elements
3786                           int   nargs,          // number of arguments to push back for uncommon trap
3787                           Node* *return_size_val,
3788                           bool deoptimize_on_exception) {

3789   jint  layout_con = Klass::_lh_neutral_value;
3790   Node* layout_val = get_layout_helper(klass_node, layout_con);
3791   int   layout_is_con = (layout_val == nullptr);
3792 
3793   if (!layout_is_con && !StressReflectiveCode &&
3794       !too_many_traps(Deoptimization::Reason_class_check)) {
3795     // This is a reflective array creation site.
3796     // Optimistically assume that it is a subtype of Object[],
3797     // so that we can fold up all the address arithmetic.
3798     layout_con = Klass::array_layout_helper(T_OBJECT);
3799     Node* cmp_lh = _gvn.transform( new CmpINode(layout_val, intcon(layout_con)) );
3800     Node* bol_lh = _gvn.transform( new BoolNode(cmp_lh, BoolTest::eq) );
3801     { BuildCutout unless(this, bol_lh, PROB_MAX);
3802       inc_sp(nargs);
3803       uncommon_trap(Deoptimization::Reason_class_check,
3804                     Deoptimization::Action_maybe_recompile);
3805     }
3806     layout_val = nullptr;
3807     layout_is_con = true;
3808   }
3809 
3810   // Generate the initial go-slow test.  Make sure we do not overflow
3811   // if length is huge (near 2Gig) or negative!  We do not need
3812   // exact double-words here, just a close approximation of needed
3813   // double-words.  We can't add any offset or rounding bits, lest we
3814   // take a size -1 of bytes and make it positive.  Use an unsigned
3815   // compare, so negative sizes look hugely positive.
3816   int fast_size_limit = FastAllocateSizeLimit;
3817   if (layout_is_con) {
3818     assert(!StressReflectiveCode, "stress mode does not use these paths");
3819     // Increase the size limit if we have exact knowledge of array type.
3820     int log2_esize = Klass::layout_helper_log2_element_size(layout_con);
3821     assert(fast_size_limit == 0 || count_leading_zeros(fast_size_limit) > static_cast<unsigned>(LogBytesPerLong - log2_esize),
3822            "fast_size_limit (%d) overflow when shifted left by %d", fast_size_limit, LogBytesPerLong - log2_esize);
3823     fast_size_limit <<= (LogBytesPerLong - log2_esize);
3824   }
3825 
3826   Node* initial_slow_cmp  = _gvn.transform( new CmpUNode( length, intcon( fast_size_limit ) ) );
3827   Node* initial_slow_test = _gvn.transform( new BoolNode( initial_slow_cmp, BoolTest::gt ) );
3828 
3829   // --- Size Computation ---
3830   // array_size = round_to_heap(array_header + (length << elem_shift));
3831   // where round_to_heap(x) == align_to(x, MinObjAlignmentInBytes)
3832   // and align_to(x, y) == ((x + y-1) & ~(y-1))
3833   // The rounding mask is strength-reduced, if possible.
3834   int round_mask = MinObjAlignmentInBytes - 1;
3835   Node* header_size = nullptr;
3836   // (T_BYTE has the weakest alignment and size restrictions...)
3837   if (layout_is_con) {
3838     int       hsize  = Klass::layout_helper_header_size(layout_con);
3839     int       eshift = Klass::layout_helper_log2_element_size(layout_con);

3840     if ((round_mask & ~right_n_bits(eshift)) == 0)
3841       round_mask = 0;  // strength-reduce it if it goes away completely
3842     assert((hsize & right_n_bits(eshift)) == 0, "hsize is pre-rounded");
3843     int header_size_min = arrayOopDesc::base_offset_in_bytes(T_BYTE);
3844     assert(header_size_min <= hsize, "generic minimum is smallest");
3845     header_size = intcon(hsize);
3846   } else {
3847     Node* hss   = intcon(Klass::_lh_header_size_shift);
3848     Node* hsm   = intcon(Klass::_lh_header_size_mask);
3849     header_size = _gvn.transform(new URShiftINode(layout_val, hss));
3850     header_size = _gvn.transform(new AndINode(header_size, hsm));
3851   }
3852 
3853   Node* elem_shift = nullptr;
3854   if (layout_is_con) {
3855     int eshift = Klass::layout_helper_log2_element_size(layout_con);
3856     if (eshift != 0)
3857       elem_shift = intcon(eshift);
3858   } else {
3859     // There is no need to mask or shift this value.
3860     // The semantics of LShiftINode include an implicit mask to 0x1F.
3861     assert(Klass::_lh_log2_element_size_shift == 0, "use shift in place");
3862     elem_shift = layout_val;

3911   }
3912   Node* non_rounded_size = _gvn.transform(new AddXNode(headerx, abody));
3913 
3914   if (return_size_val != nullptr) {
3915     // This is the size
3916     (*return_size_val) = non_rounded_size;
3917   }
3918 
3919   Node* size = non_rounded_size;
3920   if (round_mask != 0) {
3921     Node* mask1 = MakeConX(round_mask);
3922     size = _gvn.transform(new AddXNode(size, mask1));
3923     Node* mask2 = MakeConX(~round_mask);
3924     size = _gvn.transform(new AndXNode(size, mask2));
3925   }
3926   // else if round_mask == 0, the size computation is self-rounding
3927 
3928   // Now generate allocation code
3929 
3930   // The entire memory state is needed for slow path of the allocation
3931   // since GC and deoptimization can happened.
3932   Node *mem = reset_memory();
3933   set_all_memory(mem); // Create new memory state
3934 
3935   if (initial_slow_test->is_Bool()) {
3936     // Hide it behind a CMoveI, or else PhaseIdealLoop::split_up will get sick.
3937     initial_slow_test = initial_slow_test->as_Bool()->as_int_value(&_gvn);
3938   }
3939 
3940   const TypeOopPtr* ary_type = _gvn.type(klass_node)->is_klassptr()->as_instance_type();




















3941   Node* valid_length_test = _gvn.intcon(1);
3942   if (ary_type->isa_aryptr()) {
3943     BasicType bt = ary_type->isa_aryptr()->elem()->array_element_basic_type();
3944     jint max = TypeAryPtr::max_array_length(bt);
3945     Node* valid_length_cmp  = _gvn.transform(new CmpUNode(length, intcon(max)));
3946     valid_length_test = _gvn.transform(new BoolNode(valid_length_cmp, BoolTest::le));
3947   }
3948 
3949   // Create the AllocateArrayNode and its result projections
3950   AllocateArrayNode* alloc
3951     = new AllocateArrayNode(C, AllocateArrayNode::alloc_type(TypeInt::INT),
3952                             control(), mem, i_o(),
3953                             size, klass_node,
3954                             initial_slow_test,
3955                             length, valid_length_test);
3956 
3957   // Cast to correct type.  Note that the klass_node may be constant or not,
3958   // and in the latter case the actual array type will be inexact also.
3959   // (This happens via a non-constant argument to inline_native_newArray.)
3960   // In any case, the value of klass_node provides the desired array type.
3961   const TypeInt* length_type = _gvn.find_int_type(length);
3962   if (ary_type->isa_aryptr() && length_type != nullptr) {
3963     // Try to get a better type than POS for the size
3964     ary_type = ary_type->is_aryptr()->cast_to_size(length_type);
3965   }
3966 
3967   Node* javaoop = set_output_for_allocation(alloc, ary_type, deoptimize_on_exception);
3968 
3969   array_ideal_length(alloc, ary_type, true);
3970   return javaoop;
3971 }
3972 
3973 // The following "Ideal_foo" functions are placed here because they recognize
3974 // the graph shapes created by the functions immediately above.
3975 
3976 //---------------------------Ideal_allocation----------------------------------

4071 void GraphKit::add_parse_predicates(int nargs) {
4072   if (ShortRunningLongLoop) {
4073     // Will narrow the limit down with a cast node. Predicates added later may depend on the cast so should be last when
4074     // walking up from the loop.
4075     add_parse_predicate(Deoptimization::Reason_short_running_long_loop, nargs);
4076   }
4077   if (UseLoopPredicate) {
4078     add_parse_predicate(Deoptimization::Reason_predicate, nargs);
4079     if (UseProfiledLoopPredicate) {
4080       add_parse_predicate(Deoptimization::Reason_profile_predicate, nargs);
4081     }
4082   }
4083   if (UseAutoVectorizationPredicate) {
4084     add_parse_predicate(Deoptimization::Reason_auto_vectorization_check, nargs);
4085   }
4086   // Loop Limit Check Predicate should be near the loop.
4087   add_parse_predicate(Deoptimization::Reason_loop_limit_check, nargs);
4088 }
4089 
4090 void GraphKit::sync_kit(IdealKit& ideal) {

4091   set_all_memory(ideal.merged_memory());
4092   set_i_o(ideal.i_o());
4093   set_control(ideal.ctrl());
4094 }
4095 
4096 void GraphKit::final_sync(IdealKit& ideal) {
4097   // Final sync IdealKit and graphKit.
4098   sync_kit(ideal);
4099 }
4100 
4101 Node* GraphKit::load_String_length(Node* str, bool set_ctrl) {
4102   Node* len = load_array_length(load_String_value(str, set_ctrl));
4103   Node* coder = load_String_coder(str, set_ctrl);
4104   // Divide length by 2 if coder is UTF16
4105   return _gvn.transform(new RShiftINode(len, coder));
4106 }
4107 
4108 Node* GraphKit::load_String_value(Node* str, bool set_ctrl) {
4109   int value_offset = java_lang_String::value_offset();
4110   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4111                                                      false, nullptr, 0);
4112   const TypePtr* value_field_type = string_type->add_offset(value_offset);
4113   const TypeAryPtr* value_type = TypeAryPtr::make(TypePtr::NotNull,
4114                                                   TypeAry::make(TypeInt::BYTE, TypeInt::POS),
4115                                                   ciTypeArrayKlass::make(T_BYTE), true, 0);
4116   Node* p = basic_plus_adr(str, str, value_offset);
4117   Node* load = access_load_at(str, p, value_field_type, value_type, T_OBJECT,
4118                               IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED);
4119   return load;
4120 }
4121 
4122 Node* GraphKit::load_String_coder(Node* str, bool set_ctrl) {
4123   if (!CompactStrings) {
4124     return intcon(java_lang_String::CODER_UTF16);
4125   }
4126   int coder_offset = java_lang_String::coder_offset();
4127   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4128                                                      false, nullptr, 0);
4129   const TypePtr* coder_field_type = string_type->add_offset(coder_offset);
4130 
4131   Node* p = basic_plus_adr(str, str, coder_offset);
4132   Node* load = access_load_at(str, p, coder_field_type, TypeInt::BYTE, T_BYTE,
4133                               IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED);
4134   return load;
4135 }
4136 
4137 void GraphKit::store_String_value(Node* str, Node* value) {
4138   int value_offset = java_lang_String::value_offset();
4139   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4140                                                      false, nullptr, 0);
4141   const TypePtr* value_field_type = string_type->add_offset(value_offset);
4142 
4143   access_store_at(str,  basic_plus_adr(str, value_offset), value_field_type,
4144                   value, TypeAryPtr::BYTES, T_OBJECT, IN_HEAP | MO_UNORDERED);
4145 }
4146 
4147 void GraphKit::store_String_coder(Node* str, Node* value) {
4148   int coder_offset = java_lang_String::coder_offset();
4149   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4150                                                      false, nullptr, 0);
4151   const TypePtr* coder_field_type = string_type->add_offset(coder_offset);
4152 
4153   access_store_at(str, basic_plus_adr(str, coder_offset), coder_field_type,
4154                   value, TypeInt::BYTE, T_BYTE, IN_HEAP | MO_UNORDERED);
4155 }
4156 
4157 // Capture src and dst memory state with a MergeMemNode
4158 Node* GraphKit::capture_memory(const TypePtr* src_type, const TypePtr* dst_type) {
4159   if (src_type == dst_type) {
4160     // Types are equal, we don't need a MergeMemNode
4161     return memory(src_type);
4162   }
4163   MergeMemNode* merge = MergeMemNode::make(map()->memory());
4164   record_for_igvn(merge); // fold it up later, if possible
4165   int src_idx = C->get_alias_index(src_type);
4166   int dst_idx = C->get_alias_index(dst_type);
4167   merge->set_memory_at(src_idx, memory(src_idx));
4168   merge->set_memory_at(dst_idx, memory(dst_idx));
4169   return merge;
4170 }

4243   i_char->init_req(2, AddI(i_char, intcon(2)));
4244 
4245   set_control(IfFalse(iff));
4246   set_memory(st, TypeAryPtr::BYTES);
4247 }
4248 
4249 Node* GraphKit::make_constant_from_field(ciField* field, Node* obj) {
4250   if (!field->is_constant()) {
4251     return nullptr; // Field not marked as constant.
4252   }
4253   ciInstance* holder = nullptr;
4254   if (!field->is_static()) {
4255     ciObject* const_oop = obj->bottom_type()->is_oopptr()->const_oop();
4256     if (const_oop != nullptr && const_oop->is_instance()) {
4257       holder = const_oop->as_instance();
4258     }
4259   }
4260   const Type* con_type = Type::make_constant_from_field(field, holder, field->layout_type(),
4261                                                         /*is_unsigned_load=*/false);
4262   if (con_type != nullptr) {
4263     return makecon(con_type);






4264   }
4265   return nullptr;
4266 }
4267 
4268 Node* GraphKit::maybe_narrow_object_type(Node* obj, ciKlass* type) {
4269   const TypeOopPtr* obj_type = obj->bottom_type()->isa_oopptr();
4270   const TypeOopPtr* sig_type = TypeOopPtr::make_from_klass(type);
4271   if (obj_type != nullptr && sig_type->is_loaded() && !obj_type->higher_equal(sig_type)) {
4272     const Type* narrow_obj_type = obj_type->filter_speculative(sig_type); // keep speculative part
4273     Node* casted_obj = gvn().transform(new CheckCastPPNode(control(), obj, narrow_obj_type));
4274     return casted_obj;



4275   }
4276   return obj;
4277 }

   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.
   8  *
   9  * This code is distributed in the hope that it will be useful, but WITHOUT
  10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  12  * version 2 for more details (a copy is included in the LICENSE file that
  13  * accompanied this code).
  14  *
  15  * You should have received a copy of the GNU General Public License version
  16  * 2 along with this work; if not, write to the Free Software Foundation,
  17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  18  *
  19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  20  * or visit www.oracle.com if you need additional information or have any
  21  * questions.
  22  *
  23  */
  24 
  25 #include "asm/register.hpp"
  26 #include "ci/ciFlatArrayKlass.hpp"
  27 #include "ci/ciInlineKlass.hpp"
  28 #include "ci/ciObjArray.hpp"
  29 #include "ci/ciUtilities.hpp"
  30 #include "classfile/javaClasses.hpp"
  31 #include "compiler/compileLog.hpp"
  32 #include "gc/shared/barrierSet.hpp"
  33 #include "gc/shared/c2/barrierSetC2.hpp"
  34 #include "interpreter/interpreter.hpp"
  35 #include "memory/resourceArea.hpp"
  36 #include "oops/flatArrayKlass.hpp"
  37 #include "opto/addnode.hpp"
  38 #include "opto/castnode.hpp"
  39 #include "opto/convertnode.hpp"
  40 #include "opto/graphKit.hpp"
  41 #include "opto/idealKit.hpp"
  42 #include "opto/inlinetypenode.hpp"
  43 #include "opto/intrinsicnode.hpp"
  44 #include "opto/locknode.hpp"
  45 #include "opto/machnode.hpp"
  46 #include "opto/multnode.hpp"
  47 #include "opto/narrowptrnode.hpp"
  48 #include "opto/opaquenode.hpp"
  49 #include "opto/parse.hpp"
  50 #include "opto/rootnode.hpp"
  51 #include "opto/runtime.hpp"
  52 #include "opto/subtypenode.hpp"
  53 #include "runtime/arguments.hpp"
  54 #include "runtime/deoptimization.hpp"
  55 #include "runtime/sharedRuntime.hpp"
  56 #include "runtime/stubRoutines.hpp"
  57 #include "utilities/bitMap.inline.hpp"
  58 #include "utilities/growableArray.hpp"
  59 #include "utilities/powerOfTwo.hpp"
  60 
  61 //----------------------------GraphKit-----------------------------------------
  62 // Main utility constructor.
  63 GraphKit::GraphKit(JVMState* jvms, PhaseGVN* gvn)
  64   : Phase(Phase::Parser),
  65     _env(C->env()),
  66     _gvn((gvn != nullptr) ? *gvn : *C->initial_gvn()),
  67     _barrier_set(BarrierSet::barrier_set()->barrier_set_c2())
  68 {
  69   assert(gvn == nullptr || !gvn->is_IterGVN() || gvn->is_IterGVN()->delay_transform(), "delay transform should be enabled");
  70   _exceptions = jvms->map()->next_exception();
  71   if (_exceptions != nullptr)  jvms->map()->set_next_exception(nullptr);
  72   set_jvms(jvms);
  73 #ifdef ASSERT
  74   if (_gvn.is_IterGVN() != nullptr) {
  75     assert(_gvn.is_IterGVN()->delay_transform(), "Transformation must be delayed if IterGVN is used");
  76     // Save the initial size of _for_igvn worklist for verification (see ~GraphKit)
  77     _worklist_size = _gvn.C->igvn_worklist()->size();
  78   }
  79 #endif
  80 }
  81 
  82 // Private constructor for parser.
  83 GraphKit::GraphKit()
  84   : Phase(Phase::Parser),
  85     _env(C->env()),
  86     _gvn(*C->initial_gvn()),
  87     _barrier_set(BarrierSet::barrier_set()->barrier_set_c2())
  88 {
  89   _exceptions = nullptr;
  90   set_map(nullptr);
  91   DEBUG_ONLY(_sp = -99);
  92   DEBUG_ONLY(set_bci(-99));
  93 }
  94 
  95 
  96 
  97 //---------------------------clean_stack---------------------------------------
  98 // Clear away rubbish from the stack area of the JVM state.
  99 // This destroys any arguments that may be waiting on the stack.

 344 }
 345 static inline void add_one_req(Node* dstphi, Node* src) {
 346   assert(is_hidden_merge(dstphi), "must be a special merge node");
 347   assert(!is_hidden_merge(src), "must not be a special merge node");
 348   dstphi->add_req(src);
 349 }
 350 
 351 //-----------------------combine_exception_states------------------------------
 352 // This helper function combines exception states by building phis on a
 353 // specially marked state-merging region.  These regions and phis are
 354 // untransformed, and can build up gradually.  The region is marked by
 355 // having a control input of its exception map, rather than null.  Such
 356 // regions do not appear except in this function, and in use_exception_state.
 357 void GraphKit::combine_exception_states(SafePointNode* ex_map, SafePointNode* phi_map) {
 358   if (failing_internal()) {
 359     return;  // dying anyway...
 360   }
 361   JVMState* ex_jvms = ex_map->_jvms;
 362   assert(ex_jvms->same_calls_as(phi_map->_jvms), "consistent call chains");
 363   assert(ex_jvms->stkoff() == phi_map->_jvms->stkoff(), "matching locals");
 364   // TODO 8325632 Re-enable
 365   // assert(ex_jvms->sp() == phi_map->_jvms->sp(), "matching stack sizes");
 366   assert(ex_jvms->monoff() == phi_map->_jvms->monoff(), "matching JVMS");
 367   assert(ex_jvms->scloff() == phi_map->_jvms->scloff(), "matching scalar replaced objects");
 368   assert(ex_map->req() == phi_map->req(), "matching maps");
 369   uint tos = ex_jvms->stkoff() + ex_jvms->sp();
 370   Node*         hidden_merge_mark = root();
 371   Node*         region  = phi_map->control();
 372   MergeMemNode* phi_mem = phi_map->merged_memory();
 373   MergeMemNode* ex_mem  = ex_map->merged_memory();
 374   if (region->in(0) != hidden_merge_mark) {
 375     // The control input is not (yet) a specially-marked region in phi_map.
 376     // Make it so, and build some phis.
 377     region = new RegionNode(2);
 378     _gvn.set_type(region, Type::CONTROL);
 379     region->set_req(0, hidden_merge_mark);  // marks an internal ex-state
 380     region->init_req(1, phi_map->control());
 381     phi_map->set_control(region);
 382     Node* io_phi = PhiNode::make(region, phi_map->i_o(), Type::ABIO);
 383     record_for_igvn(io_phi);
 384     _gvn.set_type(io_phi, Type::ABIO);
 385     phi_map->set_i_o(io_phi);

 873         if (PrintMiscellaneous && (Verbose || WizardMode)) {
 874           tty->print_cr("Zombie local %d: ", local);
 875           jvms->dump();
 876         }
 877         return false;
 878       }
 879     }
 880   }
 881   return true;
 882 }
 883 
 884 #endif //ASSERT
 885 
 886 // Helper function for enforcing certain bytecodes to reexecute if deoptimization happens.
 887 static bool should_reexecute_implied_by_bytecode(JVMState *jvms, bool is_anewarray) {
 888   ciMethod* cur_method = jvms->method();
 889   int       cur_bci   = jvms->bci();
 890   if (cur_method != nullptr && cur_bci != InvocationEntryBci) {
 891     Bytecodes::Code code = cur_method->java_code_at_bci(cur_bci);
 892     return Interpreter::bytecode_should_reexecute(code) ||
 893            (is_anewarray && (code == Bytecodes::_multianewarray));
 894     // Reexecute _multianewarray bytecode which was replaced with
 895     // sequence of [a]newarray. See Parse::do_multianewarray().
 896     //
 897     // Note: interpreter should not have it set since this optimization
 898     // is limited by dimensions and guarded by flag so in some cases
 899     // multianewarray() runtime calls will be generated and
 900     // the bytecode should not be reexecutes (stack will not be reset).
 901   } else {
 902     return false;
 903   }
 904 }
 905 
 906 // Helper function for adding JVMState and debug information to node
 907 void GraphKit::add_safepoint_edges(SafePointNode* call, bool must_throw) {
 908   // Add the safepoint edges to the call (or other safepoint).
 909 
 910   // Make sure dead locals are set to top.  This
 911   // should help register allocation time and cut down on the size
 912   // of the deoptimization information.
 913   assert(dead_locals_are_killed(), "garbage in debug info before safepoint");

 941 
 942   if (env()->should_retain_local_variables()) {
 943     // At any safepoint, this method can get breakpointed, which would
 944     // then require an immediate deoptimization.
 945     can_prune_locals = false;  // do not prune locals
 946     stack_slots_not_pruned = 0;
 947   }
 948 
 949   // do not scribble on the input jvms
 950   JVMState* out_jvms = youngest_jvms->clone_deep(C);
 951   call->set_jvms(out_jvms); // Start jvms list for call node
 952 
 953   // For a known set of bytecodes, the interpreter should reexecute them if
 954   // deoptimization happens. We set the reexecute state for them here
 955   if (out_jvms->is_reexecute_undefined() && //don't change if already specified
 956       should_reexecute_implied_by_bytecode(out_jvms, call->is_AllocateArray())) {
 957 #ifdef ASSERT
 958     int inputs = 0, not_used; // initialized by GraphKit::compute_stack_effects()
 959     assert(method() == youngest_jvms->method(), "sanity");
 960     assert(compute_stack_effects(inputs, not_used), "unknown bytecode: %s", Bytecodes::name(java_bc()));
 961     // TODO 8371125
 962     // assert(out_jvms->sp() >= (uint)inputs, "not enough operands for reexecution");
 963 #endif // ASSERT
 964     out_jvms->set_should_reexecute(true); //NOTE: youngest_jvms not changed
 965   }
 966 
 967   // Presize the call:
 968   DEBUG_ONLY(uint non_debug_edges = call->req());
 969   call->add_req_batch(top(), youngest_jvms->debug_depth());
 970   assert(call->req() == non_debug_edges + youngest_jvms->debug_depth(), "");
 971 
 972   // Set up edges so that the call looks like this:
 973   //  Call [state:] ctl io mem fptr retadr
 974   //       [parms:] parm0 ... parmN
 975   //       [root:]  loc0 ... locN stk0 ... stkSP mon0 obj0 ... monN objN
 976   //    [...mid:]   loc0 ... locN stk0 ... stkSP mon0 obj0 ... monN objN [...]
 977   //       [young:] loc0 ... locN stk0 ... stkSP mon0 obj0 ... monN objN
 978   // Note that caller debug info precedes callee debug info.
 979 
 980   // Fill pointer walks backwards from "young:" to "root:" in the diagram above:
 981   uint debug_ptr = call->req();
 982 
 983   // Loop over the map input edges associated with jvms, add them
 984   // to the call node, & reset all offsets to match call node array.
 985 
 986   JVMState* callee_jvms = nullptr;
 987   for (JVMState* in_jvms = youngest_jvms; in_jvms != nullptr; ) {
 988     uint debug_end   = debug_ptr;
 989     uint debug_start = debug_ptr - in_jvms->debug_size();
 990     debug_ptr = debug_start;  // back up the ptr
 991 
 992     uint p = debug_start;  // walks forward in [debug_start, debug_end)
 993     uint j, k, l;
 994     SafePointNode* in_map = in_jvms->map();
 995     out_jvms->set_map(call);
 996 
 997     if (can_prune_locals) {
 998       assert(in_jvms->method() == out_jvms->method(), "sanity");
 999       // If the current throw can reach an exception handler in this JVMS,
1000       // then we must keep everything live that can reach that handler.
1001       // As a quick and dirty approximation, we look for any handlers at all.
1002       if (in_jvms->method()->has_exception_handlers()) {
1003         can_prune_locals = false;
1004       }
1005     }
1006 
1007     // Add the Locals
1008     k = in_jvms->locoff();
1009     l = in_jvms->loc_size();
1010     out_jvms->set_locoff(p);
1011     if (!can_prune_locals) {
1012       for (j = 0; j < l; j++) {
1013         call->set_req(p++, in_map->in(k + j));
1014       }
1015     } else {
1016       p += l;  // already set to top above by add_req_batch
1017     }
1018 
1019     // Add the Expression Stack
1020     k = in_jvms->stkoff();
1021     l = in_jvms->sp();
1022     out_jvms->set_stkoff(p);
1023     if (!can_prune_locals) {
1024       for (j = 0; j < l; j++) {
1025         call->set_req(p++, in_map->in(k + j));
1026       }
1027     } else if (can_prune_locals && stack_slots_not_pruned != 0) {
1028       // Divide stack into {S0,...,S1}, where S0 is set to top.
1029       uint s1 = stack_slots_not_pruned;
1030       stack_slots_not_pruned = 0;  // for next iteration
1031       if (s1 > l)  s1 = l;
1032       uint s0 = l - s1;
1033       p += s0;  // skip the tops preinstalled by add_req_batch
1034       for (j = s0; j < l; j++)
1035         call->set_req(p++, in_map->in(k+j));
1036     } else {
1037       p += l;  // already set to top above by add_req_batch
1038     }
1039 
1040     // Add the Monitors
1041     k = in_jvms->monoff();
1042     l = in_jvms->mon_size();
1043     out_jvms->set_monoff(p);
1044     for (j = 0; j < l; j++)
1045       call->set_req(p++, in_map->in(k+j));
1046 
1047     // Copy any scalar object fields.
1048     k = in_jvms->scloff();
1049     l = in_jvms->scl_size();
1050     out_jvms->set_scloff(p);
1051     for (j = 0; j < l; j++)
1052       call->set_req(p++, in_map->in(k+j));
1053 
1054     // Finish the new jvms.
1055     out_jvms->set_endoff(p);
1056 
1057     assert(out_jvms->endoff()     == debug_end,             "fill ptr must match");
1058     assert(out_jvms->depth()      == in_jvms->depth(),      "depth must match");
1059     assert(out_jvms->loc_size()   == in_jvms->loc_size(),   "size must match");
1060     assert(out_jvms->mon_size()   == in_jvms->mon_size(),   "size must match");
1061     assert(out_jvms->scl_size()   == in_jvms->scl_size(),   "size must match");
1062     assert(out_jvms->debug_size() == in_jvms->debug_size(), "size must match");
1063 
1064     // Update the two tail pointers in parallel.
1065     callee_jvms = out_jvms;
1066     out_jvms = out_jvms->caller();
1067     in_jvms  = in_jvms->caller();
1068   }
1069 
1070   assert(debug_ptr == non_debug_edges, "debug info must fit exactly");
1071 
1072   // Test the correctness of JVMState::debug_xxx accessors:
1073   assert(call->jvms()->debug_start() == non_debug_edges, "");
1074   assert(call->jvms()->debug_end()   == call->req(), "");
1075   assert(call->jvms()->debug_depth() == call->req() - non_debug_edges, "");
1076 }
1077 
1078 bool GraphKit::compute_stack_effects(int& inputs, int& depth) {
1079   Bytecodes::Code code = java_bc();
1080   if (code == Bytecodes::_wide) {
1081     code = method()->java_code_at_bci(bci() + 1);
1082   }
1083 
1084   if (code != Bytecodes::_illegal) {
1085     depth = Bytecodes::depth(code); // checkcast=0, athrow=-1

1221   Node* conv = _gvn.transform( new ConvI2LNode(offset));
1222   Node* mask = _gvn.transform(ConLNode::make((julong) max_juint));
1223   return _gvn.transform( new AndLNode(conv, mask) );
1224 }
1225 
1226 Node* GraphKit::ConvL2I(Node* offset) {
1227   // short-circuit a common case
1228   jlong offset_con = find_long_con(offset, (jlong)Type::OffsetBot);
1229   if (offset_con != (jlong)Type::OffsetBot) {
1230     return intcon((int) offset_con);
1231   }
1232   return _gvn.transform( new ConvL2INode(offset));
1233 }
1234 
1235 //-------------------------load_object_klass-----------------------------------
1236 Node* GraphKit::load_object_klass(Node* obj) {
1237   // Special-case a fresh allocation to avoid building nodes:
1238   Node* akls = AllocateNode::Ideal_klass(obj, &_gvn);
1239   if (akls != nullptr)  return akls;
1240   Node* k_adr = basic_plus_adr(obj, oopDesc::klass_offset_in_bytes());
1241   return _gvn.transform(LoadKlassNode::make(_gvn, immutable_memory(), k_adr, TypeInstPtr::KLASS, TypeInstKlassPtr::OBJECT));
1242 }
1243 
1244 //-------------------------load_array_length-----------------------------------
1245 Node* GraphKit::load_array_length(Node* array) {
1246   // Special-case a fresh allocation to avoid building nodes:
1247   AllocateArrayNode* alloc = AllocateArrayNode::Ideal_array_allocation(array);
1248   Node *alen;
1249   if (alloc == nullptr) {
1250     Node *r_adr = basic_plus_adr(array, arrayOopDesc::length_offset_in_bytes());
1251     alen = _gvn.transform( new LoadRangeNode(nullptr, immutable_memory(), r_adr, TypeInt::POS));
1252   } else {
1253     alen = array_ideal_length(alloc, _gvn.type(array)->is_oopptr(), false);
1254   }
1255   return alen;
1256 }
1257 
1258 Node* GraphKit::array_ideal_length(AllocateArrayNode* alloc,
1259                                    const TypeOopPtr* oop_type,
1260                                    bool replace_length_in_map) {
1261   Node* length = alloc->Ideal_length();

1270         replace_in_map(length, ccast);
1271       }
1272       return ccast;
1273     }
1274   }
1275   return length;
1276 }
1277 
1278 //------------------------------do_null_check----------------------------------
1279 // Helper function to do a null pointer check.  Returned value is
1280 // the incoming address with null casted away.  You are allowed to use the
1281 // not-null value only if you are control dependent on the test.
1282 #ifndef PRODUCT
1283 extern uint explicit_null_checks_inserted,
1284             explicit_null_checks_elided;
1285 #endif
1286 Node* GraphKit::null_check_common(Node* value, BasicType type,
1287                                   // optional arguments for variations:
1288                                   bool assert_null,
1289                                   Node* *null_control,
1290                                   bool speculative,
1291                                   bool null_marker_check) {
1292   assert(!assert_null || null_control == nullptr, "not both at once");
1293   if (stopped())  return top();
1294   NOT_PRODUCT(explicit_null_checks_inserted++);
1295 
1296   if (value->is_InlineType()) {
1297     // Null checking a scalarized but nullable inline type. Check the null marker
1298     // input instead of the oop input to avoid keeping buffer allocations alive.
1299     InlineTypeNode* vtptr = value->as_InlineType();
1300     while (vtptr->get_oop()->is_InlineType()) {
1301       vtptr = vtptr->get_oop()->as_InlineType();
1302     }
1303     null_check_common(vtptr->get_null_marker(), T_INT, assert_null, null_control, speculative, true);
1304     if (stopped()) {
1305       return top();
1306     }
1307     if (assert_null) {
1308       // TODO 8284443 Scalarize here (this currently leads to compilation bailouts)
1309       // vtptr = InlineTypeNode::make_null(_gvn, vtptr->type()->inline_klass());
1310       // replace_in_map(value, vtptr);
1311       // return vtptr;
1312       replace_in_map(value, null());
1313       return null();
1314     }
1315     bool do_replace_in_map = (null_control == nullptr || (*null_control) == top());
1316     return cast_not_null(value, do_replace_in_map);
1317   }
1318 
1319   // Construct null check
1320   Node *chk = nullptr;
1321   switch(type) {
1322     case T_LONG   : chk = new CmpLNode(value, _gvn.zerocon(T_LONG)); break;
1323     case T_INT    : chk = new CmpINode(value, _gvn.intcon(0)); break;
1324     case T_ARRAY  : // fall through
1325       type = T_OBJECT;  // simplify further tests
1326     case T_OBJECT : {
1327       const Type *t = _gvn.type( value );
1328 
1329       const TypeOopPtr* tp = t->isa_oopptr();
1330       if (tp != nullptr && !tp->is_loaded()
1331           // Only for do_null_check, not any of its siblings:
1332           && !assert_null && null_control == nullptr) {
1333         // Usually, any field access or invocation on an unloaded oop type
1334         // will simply fail to link, since the statically linked class is
1335         // likely also to be unloaded.  However, in -Xcomp mode, sometimes
1336         // the static class is loaded but the sharper oop type is not.
1337         // Rather than checking for this obscure case in lots of places,
1338         // we simply observe that a null check on an unloaded class

1402         }
1403         Node *oldcontrol = control();
1404         set_control(cfg);
1405         Node *res = cast_not_null(value);
1406         set_control(oldcontrol);
1407         NOT_PRODUCT(explicit_null_checks_elided++);
1408         return res;
1409       }
1410       cfg = IfNode::up_one_dom(cfg, /*linear_only=*/ true);
1411       if (cfg == nullptr)  break;  // Quit at region nodes
1412       depth++;
1413     }
1414   }
1415 
1416   //-----------
1417   // Branch to failure if null
1418   float ok_prob = PROB_MAX;  // a priori estimate:  nulls never happen
1419   Deoptimization::DeoptReason reason;
1420   if (assert_null) {
1421     reason = Deoptimization::reason_null_assert(speculative);
1422   } else if (type == T_OBJECT || null_marker_check) {
1423     reason = Deoptimization::reason_null_check(speculative);
1424   } else {
1425     reason = Deoptimization::Reason_div0_check;
1426   }
1427   // %%% Since Reason_unhandled is not recorded on a per-bytecode basis,
1428   // ciMethodData::has_trap_at will return a conservative -1 if any
1429   // must-be-null assertion has failed.  This could cause performance
1430   // problems for a method after its first do_null_assert failure.
1431   // Consider using 'Reason_class_check' instead?
1432 
1433   // To cause an implicit null check, we set the not-null probability
1434   // to the maximum (PROB_MAX).  For an explicit check the probability
1435   // is set to a smaller value.
1436   if (null_control != nullptr || too_many_traps(reason)) {
1437     // probability is less likely
1438     ok_prob =  PROB_LIKELY_MAG(3);
1439   } else if (!assert_null &&
1440              (ImplicitNullCheckThreshold > 0) &&
1441              method() != nullptr &&
1442              (method()->method_data()->trap_count(reason)

1476   }
1477 
1478   if (assert_null) {
1479     // Cast obj to null on this path.
1480     replace_in_map(value, zerocon(type));
1481     return zerocon(type);
1482   }
1483 
1484   // Cast obj to not-null on this path, if there is no null_control.
1485   // (If there is a null_control, a non-null value may come back to haunt us.)
1486   if (type == T_OBJECT) {
1487     Node* cast = cast_not_null(value, false);
1488     if (null_control == nullptr || (*null_control) == top())
1489       replace_in_map(value, cast);
1490     value = cast;
1491   }
1492 
1493   return value;
1494 }
1495 

1496 //------------------------------cast_not_null----------------------------------
1497 // Cast obj to not-null on this path
1498 Node* GraphKit::cast_not_null(Node* obj, bool do_replace_in_map) {
1499   if (obj->is_InlineType()) {
1500     Node* vt = obj->isa_InlineType()->clone_if_required(&gvn(), map(), do_replace_in_map);
1501     vt->as_InlineType()->set_null_marker(_gvn);
1502     vt = _gvn.transform(vt);
1503     if (do_replace_in_map) {
1504       replace_in_map(obj, vt);
1505     }
1506     return vt;
1507   }
1508   const Type *t = _gvn.type(obj);
1509   const Type *t_not_null = t->join_speculative(TypePtr::NOTNULL);
1510   // Object is already not-null?
1511   if( t == t_not_null ) return obj;
1512 
1513   Node* cast = new CastPPNode(control(), obj,t_not_null);
1514   cast = _gvn.transform( cast );
1515 
1516   // Scan for instances of 'obj' in the current JVM mapping.
1517   // These instances are known to be not-null after the test.
1518   if (do_replace_in_map)
1519     replace_in_map(obj, cast);
1520 
1521   return cast;                  // Return casted value
1522 }
1523 
1524 Node* GraphKit::cast_to_non_larval(Node* obj) {
1525   const Type* obj_type = gvn().type(obj);
1526   if (obj->is_InlineType() || !obj_type->is_inlinetypeptr()) {
1527     return obj;
1528   }
1529 
1530   Node* new_obj = InlineTypeNode::make_from_oop(this, obj, obj_type->inline_klass());
1531   replace_in_map(obj, new_obj);
1532   return new_obj;
1533 }
1534 
1535 // Sometimes in intrinsics, we implicitly know an object is not null
1536 // (there's no actual null check) so we can cast it to not null. In
1537 // the course of optimizations, the input to the cast can become null.
1538 // In that case that data path will die and we need the control path
1539 // to become dead as well to keep the graph consistent. So we have to
1540 // add a check for null for which one branch can't be taken. It uses
1541 // an OpaqueNotNull node that will cause the check to be removed after loop
1542 // opts so the test goes away and the compiled code doesn't execute a
1543 // useless check.
1544 Node* GraphKit::must_be_not_null(Node* value, bool do_replace_in_map) {
1545   if (!TypePtr::NULL_PTR->higher_equal(_gvn.type(value))) {
1546     return value;
1547   }
1548   Node* chk = _gvn.transform(new CmpPNode(value, null()));
1549   Node* tst = _gvn.transform(new BoolNode(chk, BoolTest::ne));
1550   Node* opaq = _gvn.transform(new OpaqueNotNullNode(C, tst));
1551   IfNode* iff = new IfNode(control(), opaq, PROB_MAX, COUNT_UNKNOWN);
1552   _gvn.set_type(iff, iff->Value(&_gvn));
1553   if (!tst->is_Con()) {
1554     record_for_igvn(iff);

1627 // These are layered on top of the factory methods in LoadNode and StoreNode,
1628 // and integrate with the parser's memory state and _gvn engine.
1629 //
1630 
1631 // factory methods in "int adr_idx"
1632 Node* GraphKit::make_load(Node* ctl, Node* adr, const Type* t, BasicType bt,
1633                           MemNode::MemOrd mo,
1634                           LoadNode::ControlDependency control_dependency,
1635                           bool require_atomic_access,
1636                           bool unaligned,
1637                           bool mismatched,
1638                           bool unsafe,
1639                           uint8_t barrier_data) {
1640   int adr_idx = C->get_alias_index(_gvn.type(adr)->isa_ptr());
1641   assert(adr_idx != Compile::AliasIdxTop, "use other make_load factory" );
1642   const TypePtr* adr_type = nullptr; // debug-mode-only argument
1643   DEBUG_ONLY(adr_type = C->get_adr_type(adr_idx));
1644   Node* mem = memory(adr_idx);
1645   Node* ld = LoadNode::make(_gvn, ctl, mem, adr, adr_type, t, bt, mo, control_dependency, require_atomic_access, unaligned, mismatched, unsafe, barrier_data);
1646   ld = _gvn.transform(ld);
1647 
1648   if (((bt == T_OBJECT) && C->do_escape_analysis()) || C->eliminate_boxing()) {
1649     // Improve graph before escape analysis and boxing elimination.
1650     record_for_igvn(ld);
1651     if (ld->is_DecodeN()) {
1652       // Also record the actual load (LoadN) in case ld is DecodeN. In some
1653       // rare corner cases, ld->in(1) can be something other than LoadN (e.g.,
1654       // a Phi). Recording such cases is still perfectly sound, but may be
1655       // unnecessary and result in some minor IGVN overhead.
1656       record_for_igvn(ld->in(1));
1657     }
1658   }
1659   return ld;
1660 }
1661 
1662 Node* GraphKit::store_to_memory(Node* ctl, Node* adr, Node *val, BasicType bt,
1663                                 MemNode::MemOrd mo,
1664                                 bool require_atomic_access,
1665                                 bool unaligned,
1666                                 bool mismatched,
1667                                 bool unsafe,

1681   if (unsafe) {
1682     st->as_Store()->set_unsafe_access();
1683   }
1684   st->as_Store()->set_barrier_data(barrier_data);
1685   st = _gvn.transform(st);
1686   set_memory(st, adr_idx);
1687   // Back-to-back stores can only remove intermediate store with DU info
1688   // so push on worklist for optimizer.
1689   if (mem->req() > MemNode::Address && adr == mem->in(MemNode::Address))
1690     record_for_igvn(st);
1691 
1692   return st;
1693 }
1694 
1695 Node* GraphKit::access_store_at(Node* obj,
1696                                 Node* adr,
1697                                 const TypePtr* adr_type,
1698                                 Node* val,
1699                                 const Type* val_type,
1700                                 BasicType bt,
1701                                 DecoratorSet decorators,
1702                                 bool safe_for_replace,
1703                                 const InlineTypeNode* vt) {
1704   // Transformation of a value which could be null pointer (CastPP #null)
1705   // could be delayed during Parse (for example, in adjust_map_after_if()).
1706   // Execute transformation here to avoid barrier generation in such case.
1707   if (_gvn.type(val) == TypePtr::NULL_PTR) {
1708     val = _gvn.makecon(TypePtr::NULL_PTR);
1709   }
1710 
1711   if (stopped()) {
1712     return top(); // Dead path ?
1713   }
1714 
1715   assert(val != nullptr, "not dead path");
1716   if (val->is_InlineType()) {
1717     // Store to non-flat field. Buffer the inline type and make sure
1718     // the store is re-executed if the allocation triggers deoptimization.
1719     PreserveReexecuteState preexecs(this);
1720     jvms()->set_should_reexecute(true);
1721     val = val->as_InlineType()->buffer(this, safe_for_replace);
1722   }
1723 
1724   C2AccessValuePtr addr(adr, adr_type);
1725   C2AccessValue value(val, val_type);
1726   C2ParseAccess access(this, decorators | C2_WRITE_ACCESS, bt, obj, addr, nullptr, vt);
1727   if (access.is_raw()) {
1728     return _barrier_set->BarrierSetC2::store_at(access, value);
1729   } else {
1730     return _barrier_set->store_at(access, value);
1731   }
1732 }
1733 
1734 Node* GraphKit::access_load_at(Node* obj,   // containing obj
1735                                Node* adr,   // actual address to store val at
1736                                const TypePtr* adr_type,
1737                                const Type* val_type,
1738                                BasicType bt,
1739                                DecoratorSet decorators,
1740                                Node* ctl) {
1741   if (stopped()) {
1742     return top(); // Dead path ?
1743   }
1744 
1745   C2AccessValuePtr addr(adr, adr_type);
1746   C2ParseAccess access(this, decorators | C2_READ_ACCESS, bt, obj, addr, ctl);
1747   if (access.is_raw()) {
1748     return _barrier_set->BarrierSetC2::load_at(access, val_type);
1749   } else {
1750     return _barrier_set->load_at(access, val_type);
1751   }
1752 }
1753 
1754 Node* GraphKit::access_load(Node* adr,   // actual address to load val at
1755                             const Type* val_type,
1756                             BasicType bt,
1757                             DecoratorSet decorators) {
1758   if (stopped()) {
1759     return top(); // Dead path ?
1760   }
1761 
1762   C2AccessValuePtr addr(adr, adr->bottom_type()->is_ptr());
1763   C2ParseAccess access(this, decorators | C2_READ_ACCESS, bt, nullptr, addr);
1764   if (access.is_raw()) {
1765     return _barrier_set->BarrierSetC2::load_at(access, val_type);
1766   } else {

1831                                      Node* new_val,
1832                                      const Type* value_type,
1833                                      BasicType bt,
1834                                      DecoratorSet decorators) {
1835   C2AccessValuePtr addr(adr, adr_type);
1836   C2AtomicParseAccess access(this, decorators | C2_READ_ACCESS | C2_WRITE_ACCESS, bt, obj, addr, alias_idx);
1837   if (access.is_raw()) {
1838     return _barrier_set->BarrierSetC2::atomic_add_at(access, new_val, value_type);
1839   } else {
1840     return _barrier_set->atomic_add_at(access, new_val, value_type);
1841   }
1842 }
1843 
1844 void GraphKit::access_clone(Node* src, Node* dst, Node* size, bool is_array) {
1845   return _barrier_set->clone(this, src, dst, size, is_array);
1846 }
1847 
1848 //-------------------------array_element_address-------------------------
1849 Node* GraphKit::array_element_address(Node* ary, Node* idx, BasicType elembt,
1850                                       const TypeInt* sizetype, Node* ctrl) {
1851   const TypeAryPtr* arytype = _gvn.type(ary)->is_aryptr();
1852   uint shift;
1853   uint header;
1854   if (arytype->is_flat() && arytype->klass_is_exact()) {
1855     // We can only determine the flat array layout statically if the klass is exact. Otherwise, we could have different
1856     // value classes at runtime with a potentially different layout. The caller needs to fall back to call
1857     // load/store_unknown_inline_Type() at runtime. We could return a sentinel node for the non-exact case but that
1858     // might mess with other GVN transformations in between. Thus, we just continue in the else branch normally, even
1859     // though we don't need the address node in this case and throw it away again.
1860     shift = arytype->flat_log_elem_size();
1861     header = arrayOopDesc::base_offset_in_bytes(T_FLAT_ELEMENT);
1862   } else {
1863     shift = exact_log2(type2aelembytes(elembt));
1864     header = arrayOopDesc::base_offset_in_bytes(elembt);
1865   }
1866 
1867   // short-circuit a common case (saves lots of confusing waste motion)
1868   jint idx_con = find_int_con(idx, -1);
1869   if (idx_con >= 0) {
1870     intptr_t offset = header + ((intptr_t)idx_con << shift);
1871     return basic_plus_adr(ary, offset);
1872   }
1873 
1874   // must be correct type for alignment purposes
1875   Node* base  = basic_plus_adr(ary, header);
1876   idx = Compile::conv_I2X_index(&_gvn, idx, sizetype, ctrl);
1877   Node* scale = _gvn.transform( new LShiftXNode(idx, intcon(shift)) );
1878   return basic_plus_adr(ary, base, scale);
1879 }
1880 
1881 Node* GraphKit::cast_to_flat_array(Node* array, ciInlineKlass* elem_vk) {
1882   assert(elem_vk->maybe_flat_in_array(), "no flat array for %s", elem_vk->name()->as_utf8());
1883   if (!elem_vk->has_atomic_layout() && !elem_vk->has_nullable_atomic_layout()) {
1884     return cast_to_flat_array_exact(array, elem_vk, true, false);
1885   } else if (!elem_vk->has_nullable_atomic_layout() && !elem_vk->has_non_atomic_layout()) {
1886     return cast_to_flat_array_exact(array, elem_vk, true, true);
1887   } else if (!elem_vk->has_atomic_layout() && !elem_vk->has_non_atomic_layout()) {
1888     return cast_to_flat_array_exact(array, elem_vk, false, true);
1889   }
1890 
1891   bool is_null_free = false;
1892   if (!elem_vk->has_nullable_atomic_layout()) {
1893     // Element does not have a nullable flat layout, cannot be nullable
1894     is_null_free = true;
1895   }
1896 
1897   ciArrayKlass* array_klass = ciObjArrayKlass::make(elem_vk, false);
1898   const TypeAryPtr* arytype = TypeOopPtr::make_from_klass(array_klass)->isa_aryptr();
1899   arytype = arytype->cast_to_flat(true)->cast_to_null_free(is_null_free);
1900   return _gvn.transform(new CheckCastPPNode(control(), array, arytype, ConstraintCastNode::DependencyType::NonFloatingNarrowing));
1901 }
1902 
1903 Node* GraphKit::cast_to_flat_array_exact(Node* array, ciInlineKlass* elem_vk, bool is_null_free, bool is_atomic) {
1904   assert(is_null_free || is_atomic, "nullable arrays must be atomic");
1905   ciArrayKlass* array_klass = ciObjArrayKlass::make(elem_vk, true, is_null_free, is_atomic);
1906   const TypeAryPtr* arytype = TypeOopPtr::make_from_klass(array_klass)->isa_aryptr();
1907   assert(arytype->klass_is_exact(), "inconsistency");
1908   assert(arytype->is_flat(), "inconsistency");
1909   assert(arytype->is_null_free() == is_null_free, "inconsistency");
1910   assert(arytype->is_not_null_free() == !is_null_free, "inconsistency");
1911   return _gvn.transform(new CheckCastPPNode(control(), array, arytype, ConstraintCastNode::DependencyType::NonFloatingNarrowing));
1912 }
1913 
1914 //-------------------------load_array_element-------------------------
1915 Node* GraphKit::load_array_element(Node* ary, Node* idx, const TypeAryPtr* arytype, bool set_ctrl) {
1916   const Type* elemtype = arytype->elem();
1917   BasicType elembt = elemtype->array_element_basic_type();
1918   Node* adr = array_element_address(ary, idx, elembt, arytype->size());
1919   if (elembt == T_NARROWOOP) {
1920     elembt = T_OBJECT; // To satisfy switch in LoadNode::make()
1921   }
1922   Node* ld = access_load_at(ary, adr, arytype, elemtype, elembt,
1923                             IN_HEAP | IS_ARRAY | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0));
1924   return ld;
1925 }
1926 
1927 //-------------------------set_arguments_for_java_call-------------------------
1928 // Arguments (pre-popped from the stack) are taken from the JVMS.
1929 void GraphKit::set_arguments_for_java_call(CallJavaNode* call, bool is_late_inline) {
1930   PreserveReexecuteState preexecs(this);
1931   if (Arguments::is_valhalla_enabled()) {
1932     // Make sure the call is "re-executed", if buffering of inline type arguments triggers deoptimization.
1933     // At this point, the call hasn't been executed yet, so we will only ever execute the call once.
1934     jvms()->set_should_reexecute(true);
1935     int arg_size = method()->get_declared_signature_at_bci(bci())->arg_size_for_bc(java_bc());
1936     inc_sp(arg_size);
1937   }
1938   // Add the call arguments
1939   const TypeTuple* domain = call->tf()->domain_sig();
1940   uint nargs = domain->cnt();
1941   int arg_num = 0;
1942   for (uint i = TypeFunc::Parms, idx = TypeFunc::Parms; i < nargs; i++) {
1943     Node* arg = argument(i-TypeFunc::Parms);
1944     const Type* t = domain->field_at(i);
1945     // TODO 8284443 A static call to a mismatched method should still be scalarized
1946     if (t->is_inlinetypeptr() && !call->method()->get_Method()->mismatch() && call->method()->is_scalarized_arg(arg_num)) {
1947       // We don't pass inline type arguments by reference but instead pass each field of the inline type
1948       if (!arg->is_InlineType()) {
1949         assert(_gvn.type(arg)->is_zero_type() && !t->inline_klass()->is_null_free(), "Unexpected argument type");
1950         arg = InlineTypeNode::make_from_oop(this, arg, t->inline_klass());
1951       }
1952       InlineTypeNode* vt = arg->as_InlineType();
1953       vt->pass_fields(this, call, idx, true, !t->maybe_null());
1954       // If an inline type argument is passed as fields, attach the Method* to the call site
1955       // to be able to access the extended signature later via attached_method_before_pc().
1956       // For example, see CompiledMethod::preserve_callee_argument_oops().
1957       call->set_override_symbolic_info(true);
1958       // Register an calling convention dependency on the callee method to make sure that this method is deoptimized and
1959       // re-compiled with a non-scalarized calling convention if the callee method is later marked as mismatched.
1960       C->dependencies()->assert_mismatch_calling_convention(call->method());
1961       arg_num++;
1962       continue;
1963     } else if (arg->is_InlineType()) {
1964       // Pass inline type argument via oop to callee
1965       arg = arg->as_InlineType()->buffer(this, true);
1966     }
1967     if (t != Type::HALF) {
1968       arg_num++;
1969     }
1970     call->init_req(idx++, arg);
1971   }
1972 }
1973 
1974 //---------------------------set_edges_for_java_call---------------------------
1975 // Connect a newly created call into the current JVMS.
1976 // A return value node (if any) is returned from set_edges_for_java_call.
1977 void GraphKit::set_edges_for_java_call(CallJavaNode* call, bool must_throw, bool separate_io_proj) {
1978 
1979   // Add the predefined inputs:
1980   call->init_req( TypeFunc::Control, control() );
1981   call->init_req( TypeFunc::I_O    , i_o() );
1982   call->init_req( TypeFunc::Memory , reset_memory() );
1983   call->init_req( TypeFunc::FramePtr, frameptr() );
1984   call->init_req( TypeFunc::ReturnAdr, top() );
1985 
1986   add_safepoint_edges(call, must_throw);
1987 
1988   Node* xcall = _gvn.transform(call);
1989 
1990   if (xcall == top()) {
1991     set_control(top());
1992     return;
1993   }
1994   assert(xcall == call, "call identity is stable");
1995 
1996   // Re-use the current map to produce the result.
1997 
1998   set_control(_gvn.transform(new ProjNode(call, TypeFunc::Control)));
1999   set_i_o(    _gvn.transform(new ProjNode(call, TypeFunc::I_O    , separate_io_proj)));
2000   set_all_memory_call(xcall, separate_io_proj);
2001 
2002   //return xcall;   // no need, caller already has it
2003 }
2004 
2005 Node* GraphKit::set_results_for_java_call(CallJavaNode* call, bool separate_io_proj, bool deoptimize) {
2006   if (stopped())  return top();  // maybe the call folded up?
2007 







2008   // Note:  Since any out-of-line call can produce an exception,
2009   // we always insert an I_O projection from the call into the result.
2010 
2011   make_slow_call_ex(call, env()->Throwable_klass(), separate_io_proj, deoptimize);
2012 
2013   if (separate_io_proj) {
2014     // The caller requested separate projections be used by the fall
2015     // through and exceptional paths, so replace the projections for
2016     // the fall through path.
2017     set_i_o(_gvn.transform( new ProjNode(call, TypeFunc::I_O) ));
2018     set_all_memory(_gvn.transform( new ProjNode(call, TypeFunc::Memory) ));
2019   }
2020 
2021   // Capture the return value, if any.
2022   Node* ret;
2023   if (call->method() == nullptr || call->method()->return_type()->basic_type() == T_VOID) {
2024     ret = top();
2025   } else if (call->tf()->returns_inline_type_as_fields()) {
2026     // Return of multiple values (inline type fields): we create a
2027     // InlineType node, each field is a projection from the call.
2028     ciInlineKlass* vk = call->method()->return_type()->as_inline_klass();
2029     uint base_input = TypeFunc::Parms;
2030     ret = InlineTypeNode::make_from_multi(this, call, vk, base_input, false, false);
2031   } else {
2032     ret = _gvn.transform(new ProjNode(call, TypeFunc::Parms));
2033     ciType* t = call->method()->return_type();
2034     if (!t->is_loaded() && InlineTypeReturnedAsFields) {
2035       // The return type is unloaded but the callee might later be C2 compiled and then return
2036       // in scalarized form when the return type is loaded. Handle this similar to what we do in
2037       // PhaseMacroExpand::expand_mh_intrinsic_return by calling into the runtime to buffer.
2038       // It's a bit unfortunate because we will deopt anyway but the interpreter needs an oop.
2039       IdealKit ideal(this);
2040       IdealVariable res(ideal);
2041       ideal.declarations_done();
2042       ideal.if_then(ret, BoolTest::eq, ideal.makecon(TypePtr::NULL_PTR)); {
2043         // Return value is null
2044         ideal.set(res, makecon(TypePtr::NULL_PTR));
2045       } ideal.else_(); {
2046         // Return value is non-null
2047         sync_kit(ideal);
2048 
2049         // Change return type of call to scalarized return
2050         const TypeFunc* tf = call->_tf;
2051         const TypeTuple* domain = OptoRuntime::store_inline_type_fields_Type()->domain_cc();
2052         const TypeFunc* new_tf = TypeFunc::make(tf->domain_sig(), tf->domain_cc(), tf->range_sig(), domain);
2053         call->_tf = new_tf;
2054         _gvn.set_type(call, call->Value(&_gvn));
2055         _gvn.set_type(ret, ret->Value(&_gvn));
2056 
2057         Node* store_to_buf_call = make_runtime_call(RC_NO_LEAF | RC_NO_IO,
2058                                                     OptoRuntime::store_inline_type_fields_Type(),
2059                                                     StubRoutines::store_inline_type_fields_to_buf(),
2060                                                     nullptr, TypePtr::BOTTOM, ret);
2061 
2062         // We don't know how many values are returned. This assumes the
2063         // worst case, that all available registers are used.
2064         for (uint i = TypeFunc::Parms+1; i < domain->cnt(); i++) {
2065           if (domain->field_at(i) == Type::HALF) {
2066             store_to_buf_call->init_req(i, top());
2067             continue;
2068           }
2069           Node* proj =_gvn.transform(new ProjNode(call, i));
2070           store_to_buf_call->init_req(i, proj);
2071         }
2072         make_slow_call_ex(store_to_buf_call, env()->Throwable_klass(), false);
2073 
2074         Node* buf = _gvn.transform(new ProjNode(store_to_buf_call, TypeFunc::Parms));
2075         const Type* buf_type = TypeOopPtr::make_from_klass(t->as_klass())->join_speculative(TypePtr::NOTNULL);
2076         buf = _gvn.transform(new CheckCastPPNode(control(), buf, buf_type));
2077 
2078         ideal.set(res, buf);
2079         ideal.sync_kit(this);
2080       } ideal.end_if();
2081       sync_kit(ideal);
2082       ret = _gvn.transform(ideal.value(res));
2083     }
2084     if (t->is_klass()) {
2085       const Type* type = TypeOopPtr::make_from_klass(t->as_klass());
2086       if (type->is_inlinetypeptr()) {
2087         ret = InlineTypeNode::make_from_oop(this, ret, type->inline_klass());
2088       }
2089     }
2090   }
2091 
2092   return ret;
2093 }
2094 
2095 //--------------------set_predefined_input_for_runtime_call--------------------
2096 // Reading and setting the memory state is way conservative here.
2097 // The real problem is that I am not doing real Type analysis on memory,
2098 // so I cannot distinguish card mark stores from other stores.  Across a GC
2099 // point the Store Barrier and the card mark memory has to agree.  I cannot
2100 // have a card mark store and its barrier split across the GC point from
2101 // either above or below.  Here I get that to happen by reading ALL of memory.
2102 // A better answer would be to separate out card marks from other memory.
2103 // For now, return the input memory state, so that it can be reused
2104 // after the call, if this call has restricted memory effects.
2105 Node* GraphKit::set_predefined_input_for_runtime_call(SafePointNode* call, Node* narrow_mem) {
2106   // Set fixed predefined input arguments
2107   call->init_req(TypeFunc::Control, control());
2108   call->init_req(TypeFunc::I_O, top()); // does no i/o
2109   call->init_req(TypeFunc::ReturnAdr, top());
2110   if (call->is_CallLeafPure()) {
2111     call->init_req(TypeFunc::Memory, top());

2173     if (use->is_MergeMem()) {
2174       wl.push(use);
2175     }
2176   }
2177 }
2178 
2179 // Replace the call with the current state of the kit.
2180 void GraphKit::replace_call(CallNode* call, Node* result, bool do_replaced_nodes, bool do_asserts) {
2181   JVMState* ejvms = nullptr;
2182   if (has_exceptions()) {
2183     ejvms = transfer_exceptions_into_jvms();
2184   }
2185 
2186   ReplacedNodes replaced_nodes = map()->replaced_nodes();
2187   ReplacedNodes replaced_nodes_exception;
2188   Node* ex_ctl = top();
2189 
2190   SafePointNode* final_state = stop();
2191 
2192   // Find all the needed outputs of this call
2193   CallProjections* callprojs = call->extract_projections(true, do_asserts);

2194 
2195   Unique_Node_List wl;
2196   Node* init_mem = call->in(TypeFunc::Memory);
2197   Node* final_mem = final_state->in(TypeFunc::Memory);
2198   Node* final_ctl = final_state->in(TypeFunc::Control);
2199   Node* final_io = final_state->in(TypeFunc::I_O);
2200 
2201   // Replace all the old call edges with the edges from the inlining result
2202   if (callprojs->fallthrough_catchproj != nullptr) {
2203     C->gvn_replace_by(callprojs->fallthrough_catchproj, final_ctl);
2204   }
2205   if (callprojs->fallthrough_memproj != nullptr) {
2206     if (final_mem->is_MergeMem()) {
2207       // Parser's exits MergeMem was not transformed but may be optimized
2208       final_mem = _gvn.transform(final_mem);
2209     }
2210     C->gvn_replace_by(callprojs->fallthrough_memproj,   final_mem);
2211     add_mergemem_users_to_worklist(wl, final_mem);
2212   }
2213   if (callprojs->fallthrough_ioproj != nullptr) {
2214     C->gvn_replace_by(callprojs->fallthrough_ioproj,    final_io);
2215   }
2216 
2217   // Replace the result with the new result if it exists and is used
2218   if (callprojs->resproj[0] != nullptr && result != nullptr) {
2219     // If the inlined code is dead, the result projections for an inline type returned as
2220     // fields have not been replaced. They will go away once the call is replaced by TOP below.
2221     assert(callprojs->nb_resproj == 1 || (call->tf()->returns_inline_type_as_fields() && stopped()),
2222            "unexpected number of results");
2223     C->gvn_replace_by(callprojs->resproj[0], result);
2224   }
2225 
2226   if (ejvms == nullptr) {
2227     // No exception edges to simply kill off those paths
2228     if (callprojs->catchall_catchproj != nullptr) {
2229       C->gvn_replace_by(callprojs->catchall_catchproj, C->top());
2230     }
2231     if (callprojs->catchall_memproj != nullptr) {
2232       C->gvn_replace_by(callprojs->catchall_memproj,   C->top());
2233     }
2234     if (callprojs->catchall_ioproj != nullptr) {
2235       C->gvn_replace_by(callprojs->catchall_ioproj,    C->top());
2236     }
2237     // Replace the old exception object with top
2238     if (callprojs->exobj != nullptr) {
2239       C->gvn_replace_by(callprojs->exobj, C->top());
2240     }
2241   } else {
2242     GraphKit ekit(ejvms);
2243 
2244     // Load my combined exception state into the kit, with all phis transformed:
2245     SafePointNode* ex_map = ekit.combine_and_pop_all_exception_states();
2246     replaced_nodes_exception = ex_map->replaced_nodes();
2247 
2248     Node* ex_oop = ekit.use_exception_state(ex_map);
2249 
2250     if (callprojs->catchall_catchproj != nullptr) {
2251       C->gvn_replace_by(callprojs->catchall_catchproj, ekit.control());
2252       ex_ctl = ekit.control();
2253     }
2254     if (callprojs->catchall_memproj != nullptr) {
2255       Node* ex_mem = ekit.reset_memory();
2256       C->gvn_replace_by(callprojs->catchall_memproj,   ex_mem);
2257       add_mergemem_users_to_worklist(wl, ex_mem);
2258     }
2259     if (callprojs->catchall_ioproj != nullptr) {
2260       C->gvn_replace_by(callprojs->catchall_ioproj,    ekit.i_o());
2261     }
2262 
2263     // Replace the old exception object with the newly created one
2264     if (callprojs->exobj != nullptr) {
2265       C->gvn_replace_by(callprojs->exobj, ex_oop);
2266     }
2267   }
2268 
2269   // Disconnect the call from the graph
2270   call->disconnect_inputs(C);
2271   C->gvn_replace_by(call, C->top());
2272 
2273   // Clean up any MergeMems that feed other MergeMems since the
2274   // optimizer doesn't like that.
2275   while (wl.size() > 0) {
2276     _gvn.transform(wl.pop());
2277   }
2278 
2279   if (callprojs->fallthrough_catchproj != nullptr && !final_ctl->is_top() && do_replaced_nodes) {
2280     replaced_nodes.apply(C, final_ctl);
2281   }
2282   if (!ex_ctl->is_top() && do_replaced_nodes) {
2283     replaced_nodes_exception.apply(C, ex_ctl);
2284   }
2285 }
2286 
2287 
2288 //------------------------------increment_counter------------------------------
2289 // for statistics: increment a VM counter by 1
2290 
2291 void GraphKit::increment_counter(address counter_addr) {
2292   Node* adr1 = makecon(TypeRawPtr::make(counter_addr));
2293   increment_counter(adr1);
2294 }
2295 
2296 void GraphKit::increment_counter(Node* counter_addr) {
2297   Node* ctrl = control();
2298   Node* cnt  = make_load(ctrl, counter_addr, TypeLong::LONG, T_LONG, MemNode::unordered);
2299   Node* incr = _gvn.transform(new AddLNode(cnt, _gvn.longcon(1)));

2459  *
2460  * @param n          node that the type applies to
2461  * @param exact_kls  type from profiling
2462  * @param maybe_null did profiling see null?
2463  *
2464  * @return           node with improved type
2465  */
2466 Node* GraphKit::record_profile_for_speculation(Node* n, ciKlass* exact_kls, ProfilePtrKind ptr_kind) {
2467   const Type* current_type = _gvn.type(n);
2468   assert(UseTypeSpeculation, "type speculation must be on");
2469 
2470   const TypePtr* speculative = current_type->speculative();
2471 
2472   // Should the klass from the profile be recorded in the speculative type?
2473   if (current_type->would_improve_type(exact_kls, jvms()->depth())) {
2474     const TypeKlassPtr* tklass = TypeKlassPtr::make(exact_kls, Type::trust_interfaces);
2475     const TypeOopPtr* xtype = tklass->as_instance_type();
2476     assert(xtype->klass_is_exact(), "Should be exact");
2477     // Any reason to believe n is not null (from this profiling or a previous one)?
2478     assert(ptr_kind != ProfileAlwaysNull, "impossible here");
2479     const TypePtr* ptr = (ptr_kind != ProfileNeverNull && current_type->speculative_maybe_null()) ? TypePtr::BOTTOM : TypePtr::NOTNULL;
2480     // record the new speculative type's depth
2481     speculative = xtype->cast_to_ptr_type(ptr->ptr())->is_ptr();
2482     speculative = speculative->with_inline_depth(jvms()->depth());
2483   } else if (current_type->would_improve_ptr(ptr_kind)) {
2484     // Profiling report that null was never seen so we can change the
2485     // speculative type to non null ptr.
2486     if (ptr_kind == ProfileAlwaysNull) {
2487       speculative = TypePtr::NULL_PTR;
2488     } else {
2489       assert(ptr_kind == ProfileNeverNull, "nothing else is an improvement");
2490       const TypePtr* ptr = TypePtr::NOTNULL;
2491       if (speculative != nullptr) {
2492         speculative = speculative->cast_to_ptr_type(ptr->ptr())->is_ptr();
2493       } else {
2494         speculative = ptr;
2495       }
2496     }
2497   }
2498 
2499   if (speculative != current_type->speculative()) {
2500     // Build a type with a speculative type (what we think we know
2501     // about the type but will need a guard when we use it)
2502     const TypeOopPtr* spec_type = TypeOopPtr::make(TypePtr::BotPTR, Type::Offset::bottom, TypeOopPtr::InstanceBot, speculative);
2503     // We're changing the type, we need a new CheckCast node to carry
2504     // the new type. The new type depends on the control: what
2505     // profiling tells us is only valid from here as far as we can
2506     // tell.
2507     Node* cast = new CheckCastPPNode(control(), n, current_type->remove_speculative()->join_speculative(spec_type));
2508     cast = _gvn.transform(cast);
2509     replace_in_map(n, cast);
2510     n = cast;
2511   }
2512 
2513   return n;
2514 }
2515 
2516 /**
2517  * Record profiling data from receiver profiling at an invoke with the
2518  * type system so that it can propagate it (speculation)
2519  *
2520  * @param n  receiver node
2521  *
2522  * @return   node with improved type
2523  */
2524 Node* GraphKit::record_profiled_receiver_for_speculation(Node* n) {
2525   if (!UseTypeSpeculation) {
2526     return n;
2527   }
2528   ciKlass* exact_kls = profile_has_unique_klass();
2529   ProfilePtrKind ptr_kind = ProfileMaybeNull;
2530   if ((java_bc() == Bytecodes::_checkcast ||
2531        java_bc() == Bytecodes::_instanceof ||
2532        java_bc() == Bytecodes::_aastore) &&
2533       method()->method_data()->is_mature()) {
2534     ciProfileData* data = method()->method_data()->bci_to_data(bci());
2535     if (data != nullptr) {
2536       if (java_bc() == Bytecodes::_aastore) {
2537         ciKlass* array_type = nullptr;
2538         ciKlass* element_type = nullptr;
2539         ProfilePtrKind element_ptr = ProfileMaybeNull;
2540         bool flat_array = true;
2541         bool null_free_array = true;
2542         method()->array_access_profiled_type(bci(), array_type, element_type, element_ptr, flat_array, null_free_array);
2543         exact_kls = element_type;
2544         ptr_kind = element_ptr;
2545       } else {
2546         if (!data->as_BitData()->null_seen()) {
2547           ptr_kind = ProfileNeverNull;
2548         } else {
2549           if (TypeProfileCasts) {
2550             assert(data->is_ReceiverTypeData(), "bad profile data type");
2551             ciReceiverTypeData* call = (ciReceiverTypeData*)data->as_ReceiverTypeData();
2552             uint i = 0;
2553             for (; i < call->row_limit(); i++) {
2554               ciKlass* receiver = call->receiver(i);
2555               if (receiver != nullptr) {
2556                 break;
2557               }
2558             }
2559             ptr_kind = (i == call->row_limit()) ? ProfileAlwaysNull : ProfileMaybeNull;
2560           }

2561         }
2562       }
2563     }
2564   }
2565   return record_profile_for_speculation(n, exact_kls, ptr_kind);
2566 }
2567 
2568 /**
2569  * Record profiling data from argument profiling at an invoke with the
2570  * type system so that it can propagate it (speculation)
2571  *
2572  * @param dest_method  target method for the call
2573  * @param bc           what invoke bytecode is this?
2574  */
2575 void GraphKit::record_profiled_arguments_for_speculation(ciMethod* dest_method, Bytecodes::Code bc) {
2576   if (!UseTypeSpeculation) {
2577     return;
2578   }
2579   const TypeFunc* tf    = TypeFunc::make(dest_method);
2580   int             nargs = tf->domain_sig()->cnt() - TypeFunc::Parms;
2581   int skip = Bytecodes::has_receiver(bc) ? 1 : 0;
2582   for (int j = skip, i = 0; j < nargs && i < TypeProfileArgsLimit; j++) {
2583     const Type *targ = tf->domain_sig()->field_at(j + TypeFunc::Parms);
2584     if (is_reference_type(targ->basic_type())) {
2585       ProfilePtrKind ptr_kind = ProfileMaybeNull;
2586       ciKlass* better_type = nullptr;
2587       if (method()->argument_profiled_type(bci(), i, better_type, ptr_kind)) {
2588         record_profile_for_speculation(argument(j), better_type, ptr_kind);
2589       }
2590       i++;
2591     }
2592   }
2593 }
2594 
2595 /**
2596  * Record profiling data from parameter profiling at an invoke with
2597  * the type system so that it can propagate it (speculation)
2598  */
2599 void GraphKit::record_profiled_parameters_for_speculation() {
2600   if (!UseTypeSpeculation) {
2601     return;
2602   }
2603   for (int i = 0, j = 0; i < method()->arg_size() ; i++) {

2723                                   // The first null ends the list.
2724                                   Node* parm0, Node* parm1,
2725                                   Node* parm2, Node* parm3,
2726                                   Node* parm4, Node* parm5,
2727                                   Node* parm6, Node* parm7) {
2728   assert(call_addr != nullptr, "must not call null targets");
2729 
2730   // Slow-path call
2731   bool is_leaf = !(flags & RC_NO_LEAF);
2732   bool has_io  = (!is_leaf && !(flags & RC_NO_IO));
2733   if (call_name == nullptr) {
2734     assert(!is_leaf, "must supply name for leaf");
2735     call_name = OptoRuntime::stub_name(call_addr);
2736   }
2737   CallNode* call;
2738   if (!is_leaf) {
2739     call = new CallStaticJavaNode(call_type, call_addr, call_name, adr_type);
2740   } else if (flags & RC_NO_FP) {
2741     call = new CallLeafNoFPNode(call_type, call_addr, call_name, adr_type);
2742   } else  if (flags & RC_VECTOR){
2743     uint num_bits = call_type->range_sig()->field_at(TypeFunc::Parms)->is_vect()->length_in_bytes() * BitsPerByte;
2744     call = new CallLeafVectorNode(call_type, call_addr, call_name, adr_type, num_bits);
2745   } else if (flags & RC_PURE) {
2746     assert(adr_type == nullptr, "pure call does not touch memory");
2747     call = new CallLeafPureNode(call_type, call_addr, call_name);
2748   } else {
2749     call = new CallLeafNode(call_type, call_addr, call_name, adr_type);
2750   }
2751 
2752   // The following is similar to set_edges_for_java_call,
2753   // except that the memory effects of the call are restricted to AliasIdxRaw.
2754 
2755   // Slow path call has no side-effects, uses few values
2756   bool wide_in  = !(flags & RC_NARROW_MEM);
2757   bool wide_out = (C->get_alias_index(adr_type) == Compile::AliasIdxBot);
2758 
2759   Node* prev_mem = nullptr;
2760   if (wide_in) {
2761     prev_mem = set_predefined_input_for_runtime_call(call);
2762   } else {
2763     assert(!wide_out, "narrow in => narrow out");
2764     Node* narrow_mem = memory(adr_type);
2765     prev_mem = set_predefined_input_for_runtime_call(call, narrow_mem);
2766   }
2767 
2768   // Hook each parm in order.  Stop looking at the first null.
2769   if (parm0 != nullptr) { call->init_req(TypeFunc::Parms+0, parm0);
2770   if (parm1 != nullptr) { call->init_req(TypeFunc::Parms+1, parm1);
2771   if (parm2 != nullptr) { call->init_req(TypeFunc::Parms+2, parm2);
2772   if (parm3 != nullptr) { call->init_req(TypeFunc::Parms+3, parm3);
2773   if (parm4 != nullptr) { call->init_req(TypeFunc::Parms+4, parm4);
2774   if (parm5 != nullptr) { call->init_req(TypeFunc::Parms+5, parm5);
2775   if (parm6 != nullptr) { call->init_req(TypeFunc::Parms+6, parm6);
2776   if (parm7 != nullptr) { call->init_req(TypeFunc::Parms+7, parm7);
2777   /* close each nested if ===> */  } } } } } } } }
2778   assert(call->in(call->req()-1) != nullptr || (call->req()-1) > (TypeFunc::Parms+7), "must initialize all parms");
2779 
2780   if (!is_leaf) {
2781     // Non-leaves can block and take safepoints:
2782     add_safepoint_edges(call, ((flags & RC_MUST_THROW) != 0));
2783   }
2784   // Non-leaves can throw exceptions:
2785   if (has_io) {
2786     call->set_req(TypeFunc::I_O, i_o());
2787   }
2788 
2789   if (flags & RC_UNCOMMON) {
2790     // Set the count to a tiny probability.  Cf. Estimate_Block_Frequency.
2791     // (An "if" probability corresponds roughly to an unconditional count.
2792     // Sort of.)
2793     call->set_cnt(PROB_UNLIKELY_MAG(4));
2794   }
2795 
2796   Node* c = _gvn.transform(call);
2797   assert(c == call, "cannot disappear");
2798 

2806 
2807   if (has_io) {
2808     set_i_o(_gvn.transform(new ProjNode(call, TypeFunc::I_O)));
2809   }
2810   return call;
2811 
2812 }
2813 
2814 // i2b
2815 Node* GraphKit::sign_extend_byte(Node* in) {
2816   Node* tmp = _gvn.transform(new LShiftINode(in, _gvn.intcon(24)));
2817   return _gvn.transform(new RShiftINode(tmp, _gvn.intcon(24)));
2818 }
2819 
2820 // i2s
2821 Node* GraphKit::sign_extend_short(Node* in) {
2822   Node* tmp = _gvn.transform(new LShiftINode(in, _gvn.intcon(16)));
2823   return _gvn.transform(new RShiftINode(tmp, _gvn.intcon(16)));
2824 }
2825 
2826 
2827 //------------------------------merge_memory-----------------------------------
2828 // Merge memory from one path into the current memory state.
2829 void GraphKit::merge_memory(Node* new_mem, Node* region, int new_path) {
2830   for (MergeMemStream mms(merged_memory(), new_mem->as_MergeMem()); mms.next_non_empty2(); ) {
2831     Node* old_slice = mms.force_memory();
2832     Node* new_slice = mms.memory2();
2833     if (old_slice != new_slice) {
2834       PhiNode* phi;
2835       if (old_slice->is_Phi() && old_slice->as_Phi()->region() == region) {
2836         if (mms.is_empty()) {
2837           // clone base memory Phi's inputs for this memory slice
2838           assert(old_slice == mms.base_memory(), "sanity");
2839           phi = PhiNode::make(region, nullptr, Type::MEMORY, mms.adr_type(C));
2840           _gvn.set_type(phi, Type::MEMORY);
2841           for (uint i = 1; i < phi->req(); i++) {
2842             phi->init_req(i, old_slice->in(i));
2843           }
2844         } else {
2845           phi = old_slice->as_Phi(); // Phi was generated already
2846         }

2903   gvn.transform(iff);
2904   if (!bol->is_Con()) gvn.record_for_igvn(iff);
2905   return iff;
2906 }
2907 
2908 //-------------------------------gen_subtype_check-----------------------------
2909 // Generate a subtyping check.  Takes as input the subtype and supertype.
2910 // Returns 2 values: sets the default control() to the true path and returns
2911 // the false path.  Only reads invariant memory; sets no (visible) memory.
2912 // The PartialSubtypeCheckNode sets the hidden 1-word cache in the encoding
2913 // but that's not exposed to the optimizer.  This call also doesn't take in an
2914 // Object; if you wish to check an Object you need to load the Object's class
2915 // prior to coming here.
2916 Node* Phase::gen_subtype_check(Node* subklass, Node* superklass, Node** ctrl, Node* mem, PhaseGVN& gvn,
2917                                ciMethod* method, int bci) {
2918   Compile* C = gvn.C;
2919   if ((*ctrl)->is_top()) {
2920     return C->top();
2921   }
2922 
2923   const TypeKlassPtr* klass_ptr_type = gvn.type(superklass)->is_klassptr();
2924   // For a direct pointer comparison, we need the refined array klass pointer
2925   Node* vm_superklass = superklass;
2926   if (klass_ptr_type->isa_aryklassptr() && klass_ptr_type->klass_is_exact()) {
2927     assert(!klass_ptr_type->is_aryklassptr()->is_refined_type(), "Unexpected refined array klass pointer");
2928     vm_superklass = gvn.makecon(klass_ptr_type->is_aryklassptr()->cast_to_refined_array_klass_ptr());
2929   }
2930 
2931   // Fast check for identical types, perhaps identical constants.
2932   // The types can even be identical non-constants, in cases
2933   // involving Array.newInstance, Object.clone, etc.
2934   if (subklass == superklass)
2935     return C->top();             // false path is dead; no test needed.
2936 
2937   if (gvn.type(superklass)->singleton()) {
2938     const TypeKlassPtr* superk = gvn.type(superklass)->is_klassptr();
2939     const TypeKlassPtr* subk   = gvn.type(subklass)->is_klassptr();
2940 
2941     // In the common case of an exact superklass, try to fold up the
2942     // test before generating code.  You may ask, why not just generate
2943     // the code and then let it fold up?  The answer is that the generated
2944     // code will necessarily include null checks, which do not always
2945     // completely fold away.  If they are also needless, then they turn
2946     // into a performance loss.  Example:
2947     //    Foo[] fa = blah(); Foo x = fa[0]; fa[1] = x;
2948     // Here, the type of 'fa' is often exact, so the store check
2949     // of fa[1]=x will fold up, without testing the nullness of x.
2950     //
2951     // At macro expansion, we would have already folded the SubTypeCheckNode
2952     // being expanded here because we always perform the static sub type
2953     // check in SubTypeCheckNode::sub() regardless of whether
2954     // StressReflectiveCode is set or not. We can therefore skip this
2955     // static check when StressReflectiveCode is on.
2956     switch (C->static_subtype_check(superk, subk)) {
2957     case Compile::SSC_always_false:
2958       {
2959         Node* always_fail = *ctrl;
2960         *ctrl = gvn.C->top();
2961         return always_fail;
2962       }
2963     case Compile::SSC_always_true:
2964       return C->top();
2965     case Compile::SSC_easy_test:
2966       {
2967         // Just do a direct pointer compare and be done.
2968         IfNode* iff = gen_subtype_check_compare(*ctrl, subklass, vm_superklass, BoolTest::eq, PROB_STATIC_FREQUENT, gvn, T_ADDRESS);
2969         *ctrl = gvn.transform(new IfTrueNode(iff));
2970         return gvn.transform(new IfFalseNode(iff));
2971       }
2972     case Compile::SSC_full_test:
2973       break;
2974     default:
2975       ShouldNotReachHere();
2976     }
2977   }
2978 
2979   // %%% Possible further optimization:  Even if the superklass is not exact,
2980   // if the subklass is the unique subtype of the superklass, the check
2981   // will always succeed.  We could leave a dependency behind to ensure this.
2982 
2983   // First load the super-klass's check-offset
2984   Node *p1 = gvn.transform(new AddPNode(superklass, superklass, gvn.MakeConX(in_bytes(Klass::super_check_offset_offset()))));
2985   Node* m = C->immutable_memory();
2986   Node *chk_off = gvn.transform(new LoadINode(nullptr, m, p1, gvn.type(p1)->is_ptr(), TypeInt::INT, MemNode::unordered));
2987   int cacheoff_con = in_bytes(Klass::secondary_super_cache_offset());
2988   const TypeInt* chk_off_t = chk_off->Value(&gvn)->isa_int();

3026   gvn.record_for_igvn(r_ok_subtype);
3027 
3028   // If we might perform an expensive check, first try to take advantage of profile data that was attached to the
3029   // SubTypeCheck node
3030   if (might_be_cache && method != nullptr && VM_Version::profile_all_receivers_at_type_check()) {
3031     ciCallProfile profile = method->call_profile_at_bci(bci);
3032     float total_prob = 0;
3033     for (int i = 0; profile.has_receiver(i); ++i) {
3034       float prob = profile.receiver_prob(i);
3035       total_prob += prob;
3036     }
3037     if (total_prob * 100. >= TypeProfileSubTypeCheckCommonThreshold) {
3038       const TypeKlassPtr* superk = gvn.type(superklass)->is_klassptr();
3039       for (int i = 0; profile.has_receiver(i); ++i) {
3040         ciKlass* klass = profile.receiver(i);
3041         const TypeKlassPtr* klass_t = TypeKlassPtr::make(klass);
3042         Compile::SubTypeCheckResult result = C->static_subtype_check(superk, klass_t);
3043         if (result != Compile::SSC_always_true && result != Compile::SSC_always_false) {
3044           continue;
3045         }
3046         if (klass_t->isa_aryklassptr()) {
3047           // For a direct pointer comparison, we need the refined array klass pointer
3048           klass_t = klass_t->is_aryklassptr()->cast_to_refined_array_klass_ptr();
3049         }
3050         float prob = profile.receiver_prob(i);
3051         ConNode* klass_node = gvn.makecon(klass_t);
3052         IfNode* iff = gen_subtype_check_compare(*ctrl, subklass, klass_node, BoolTest::eq, prob, gvn, T_ADDRESS);
3053         Node* iftrue = gvn.transform(new IfTrueNode(iff));
3054 
3055         if (result == Compile::SSC_always_true) {
3056           r_ok_subtype->add_req(iftrue);
3057         } else {
3058           assert(result == Compile::SSC_always_false, "");
3059           r_not_subtype->add_req(iftrue);
3060         }
3061         *ctrl = gvn.transform(new IfFalseNode(iff));
3062       }
3063     }
3064   }
3065 
3066   // See if we get an immediate positive hit.  Happens roughly 83% of the
3067   // time.  Test to see if the value loaded just previously from the subklass
3068   // is exactly the superklass.
3069   IfNode *iff1 = gen_subtype_check_compare(*ctrl, superklass, nkls, BoolTest::eq, PROB_LIKELY(0.83f), gvn, T_ADDRESS);

3083       igvn->remove_globally_dead_node(r_not_subtype);
3084     }
3085     return not_subtype_ctrl;
3086   }
3087 
3088   r_ok_subtype->init_req(1, iftrue1);
3089 
3090   // Check for immediate negative hit.  Happens roughly 11% of the time (which
3091   // is roughly 63% of the remaining cases).  Test to see if the loaded
3092   // check-offset points into the subklass display list or the 1-element
3093   // cache.  If it points to the display (and NOT the cache) and the display
3094   // missed then it's not a subtype.
3095   Node *cacheoff = gvn.intcon(cacheoff_con);
3096   IfNode *iff2 = gen_subtype_check_compare(*ctrl, chk_off, cacheoff, BoolTest::ne, PROB_LIKELY(0.63f), gvn, T_INT);
3097   r_not_subtype->init_req(1, gvn.transform(new IfTrueNode (iff2)));
3098   *ctrl = gvn.transform(new IfFalseNode(iff2));
3099 
3100   // Check for self.  Very rare to get here, but it is taken 1/3 the time.
3101   // No performance impact (too rare) but allows sharing of secondary arrays
3102   // which has some footprint reduction.
3103   IfNode *iff3 = gen_subtype_check_compare(*ctrl, subklass, vm_superklass, BoolTest::eq, PROB_LIKELY(0.36f), gvn, T_ADDRESS);
3104   r_ok_subtype->init_req(2, gvn.transform(new IfTrueNode(iff3)));
3105   *ctrl = gvn.transform(new IfFalseNode(iff3));
3106 
3107   // -- Roads not taken here: --
3108   // We could also have chosen to perform the self-check at the beginning
3109   // of this code sequence, as the assembler does.  This would not pay off
3110   // the same way, since the optimizer, unlike the assembler, can perform
3111   // static type analysis to fold away many successful self-checks.
3112   // Non-foldable self checks work better here in second position, because
3113   // the initial primary superclass check subsumes a self-check for most
3114   // types.  An exception would be a secondary type like array-of-interface,
3115   // which does not appear in its own primary supertype display.
3116   // Finally, we could have chosen to move the self-check into the
3117   // PartialSubtypeCheckNode, and from there out-of-line in a platform
3118   // dependent manner.  But it is worthwhile to have the check here,
3119   // where it can be perhaps be optimized.  The cost in code space is
3120   // small (register compare, branch).
3121 
3122   // Now do a linear scan of the secondary super-klass array.  Again, no real
3123   // performance impact (too rare) but it's gotta be done.
3124   // Since the code is rarely used, there is no penalty for moving it
3125   // out of line, and it can only improve I-cache density.
3126   // The decision to inline or out-of-line this final check is platform
3127   // dependent, and is found in the AD file definition of PartialSubtypeCheck.
3128   Node* psc = gvn.transform(
3129     new PartialSubtypeCheckNode(*ctrl, subklass, superklass));
3130 
3131   IfNode *iff4 = gen_subtype_check_compare(*ctrl, psc, gvn.zerocon(T_OBJECT), BoolTest::ne, PROB_FAIR, gvn, T_ADDRESS);
3132   r_not_subtype->init_req(2, gvn.transform(new IfTrueNode (iff4)));
3133   r_ok_subtype ->init_req(3, gvn.transform(new IfFalseNode(iff4)));
3134 
3135   // Return false path; set default control to true path.
3136   *ctrl = gvn.transform(r_ok_subtype);
3137   return gvn.transform(r_not_subtype);
3138 }
3139 
3140 Node* GraphKit::gen_subtype_check(Node* obj_or_subklass, Node* superklass) {
3141   const Type* sub_t = _gvn.type(obj_or_subklass);
3142   if (sub_t->make_oopptr() != nullptr && sub_t->make_oopptr()->is_inlinetypeptr()) {
3143     sub_t = TypeKlassPtr::make(sub_t->inline_klass());
3144     obj_or_subklass = makecon(sub_t);
3145   }
3146   bool expand_subtype_check = C->post_loop_opts_phase(); // macro node expansion is over
3147   if (expand_subtype_check) {
3148     MergeMemNode* mem = merged_memory();
3149     Node* ctrl = control();
3150     Node* subklass = obj_or_subklass;
3151     if (!sub_t->isa_klassptr()) {
3152       subklass = load_object_klass(obj_or_subklass);
3153     }
3154 
3155     Node* n = Phase::gen_subtype_check(subklass, superklass, &ctrl, mem, _gvn, method(), bci());
3156     set_control(ctrl);
3157     return n;
3158   }
3159 
3160   Node* check = _gvn.transform(new SubTypeCheckNode(C, obj_or_subklass, superklass, method(), bci()));
3161   Node* bol = _gvn.transform(new BoolNode(check, BoolTest::eq));
3162   IfNode* iff = create_and_xform_if(control(), bol, PROB_STATIC_FREQUENT, COUNT_UNKNOWN);
3163   set_control(_gvn.transform(new IfTrueNode(iff)));
3164   return _gvn.transform(new IfFalseNode(iff));
3165 }
3166 
3167 // Profile-driven exact type check:
3168 Node* GraphKit::type_check_receiver(Node* receiver, ciKlass* klass,
3169                                     float prob, Node* *casted_receiver) {

3170   assert(!klass->is_interface(), "no exact type check on interfaces");
3171   Node* fail = top();
3172   const Type* rec_t = _gvn.type(receiver);
3173   if (rec_t->is_inlinetypeptr()) {
3174     if (klass->equals(rec_t->inline_klass())) {
3175       (*casted_receiver) = receiver; // Always passes
3176     } else {
3177       (*casted_receiver) = top();    // Always fails
3178       fail = control();
3179       set_control(top());
3180     }
3181     return fail;
3182   }
3183   const TypeKlassPtr* tklass = TypeKlassPtr::make(klass, Type::trust_interfaces);
3184   if (tklass->isa_aryklassptr()) {
3185     // For a direct pointer comparison, we need the refined array klass pointer
3186     tklass = tklass->is_aryklassptr()->cast_to_refined_array_klass_ptr();
3187   }
3188   Node* recv_klass = load_object_klass(receiver);
3189   fail = type_check(recv_klass, tklass, prob);





3190 
3191   if (!stopped()) {
3192     const TypeOopPtr* receiver_type = _gvn.type(receiver)->isa_oopptr();
3193     const TypeOopPtr* recv_xtype = tklass->as_instance_type();
3194     assert(recv_xtype->klass_is_exact(), "");
3195 
3196     if (!receiver_type->higher_equal(recv_xtype)) { // ignore redundant casts
3197       // Subsume downstream occurrences of receiver with a cast to
3198       // recv_xtype, since now we know what the type will be.
3199       Node* cast = new CheckCastPPNode(control(), receiver, recv_xtype);
3200       Node* res = _gvn.transform(cast);
3201       if (recv_xtype->is_inlinetypeptr()) {
3202         assert(!gvn().type(res)->maybe_null(), "receiver should never be null");
3203         res = InlineTypeNode::make_from_oop(this, res, recv_xtype->inline_klass());
3204       }
3205       (*casted_receiver) = res;
3206       assert(!(*casted_receiver)->is_top(), "that path should be unreachable");
3207       // (User must make the replace_in_map call.)
3208     }
3209   }
3210 
3211   return fail;
3212 }
3213 
3214 Node* GraphKit::type_check(Node* recv_klass, const TypeKlassPtr* tklass,
3215                            float prob) {
3216   Node* want_klass = makecon(tklass);
3217   Node* cmp = _gvn.transform(new CmpPNode(recv_klass, want_klass));
3218   Node* bol = _gvn.transform(new BoolNode(cmp, BoolTest::eq));
3219   IfNode* iff = create_and_xform_if(control(), bol, prob, COUNT_UNKNOWN);
3220   set_control(_gvn.transform(new IfTrueNode (iff)));
3221   Node* fail = _gvn.transform(new IfFalseNode(iff));
3222   return fail;
3223 }
3224 
3225 //------------------------------subtype_check_receiver-------------------------
3226 Node* GraphKit::subtype_check_receiver(Node* receiver, ciKlass* klass,
3227                                        Node** casted_receiver) {
3228   const TypeKlassPtr* tklass = TypeKlassPtr::make(klass, Type::trust_interfaces)->try_improve();
3229   Node* want_klass = makecon(tklass);
3230 
3231   Node* slow_ctl = gen_subtype_check(receiver, want_klass);
3232 
3233   // Ignore interface type information until interface types are properly tracked.
3234   if (!stopped() && !klass->is_interface()) {
3235     const TypeOopPtr* receiver_type = _gvn.type(receiver)->isa_oopptr();
3236     const TypeOopPtr* recv_type = tklass->cast_to_exactness(false)->is_klassptr()->as_instance_type();
3237     if (receiver_type != nullptr && !receiver_type->higher_equal(recv_type)) { // ignore redundant casts
3238       Node* cast = _gvn.transform(new CheckCastPPNode(control(), receiver, recv_type));
3239       if (recv_type->is_inlinetypeptr()) {
3240         cast = InlineTypeNode::make_from_oop(this, cast, recv_type->inline_klass());
3241       }
3242       (*casted_receiver) = cast;
3243     }
3244   }
3245 
3246   return slow_ctl;
3247 }
3248 
3249 //------------------------------seems_never_null-------------------------------
3250 // Use null_seen information if it is available from the profile.
3251 // If we see an unexpected null at a type check we record it and force a
3252 // recompile; the offending check will be recompiled to handle nulls.
3253 // If we see several offending BCIs, then all checks in the
3254 // method will be recompiled.
3255 bool GraphKit::seems_never_null(Node* obj, ciProfileData* data, bool& speculating) {
3256   speculating = !_gvn.type(obj)->speculative_maybe_null();
3257   Deoptimization::DeoptReason reason = Deoptimization::reason_null_check(speculating);
3258   if (UncommonNullCast               // Cutout for this technique
3259       && obj != null()               // And not the -Xcomp stupid case?
3260       && !too_many_traps(reason)
3261       ) {
3262     if (speculating) {

3331 
3332 //------------------------maybe_cast_profiled_receiver-------------------------
3333 // If the profile has seen exactly one type, narrow to exactly that type.
3334 // Subsequent type checks will always fold up.
3335 Node* GraphKit::maybe_cast_profiled_receiver(Node* not_null_obj,
3336                                              const TypeKlassPtr* require_klass,
3337                                              ciKlass* spec_klass,
3338                                              bool safe_for_replace) {
3339   if (!UseTypeProfile || !TypeProfileCasts) return nullptr;
3340 
3341   Deoptimization::DeoptReason reason = Deoptimization::reason_class_check(spec_klass != nullptr);
3342 
3343   // Make sure we haven't already deoptimized from this tactic.
3344   if (too_many_traps_or_recompiles(reason))
3345     return nullptr;
3346 
3347   // (No, this isn't a call, but it's enough like a virtual call
3348   // to use the same ciMethod accessor to get the profile info...)
3349   // If we have a speculative type use it instead of profiling (which
3350   // may not help us)
3351   ciKlass* exact_kls = spec_klass;
3352   if (exact_kls == nullptr) {
3353     if (java_bc() == Bytecodes::_aastore) {
3354       ciKlass* array_type = nullptr;
3355       ciKlass* element_type = nullptr;
3356       ProfilePtrKind element_ptr = ProfileMaybeNull;
3357       bool flat_array = true;
3358       bool null_free_array = true;
3359       method()->array_access_profiled_type(bci(), array_type, element_type, element_ptr, flat_array, null_free_array);
3360       exact_kls = element_type;
3361     } else {
3362       exact_kls = profile_has_unique_klass();
3363     }
3364   }
3365   if (exact_kls != nullptr) {// no cast failures here
3366     if (require_klass == nullptr ||
3367         C->static_subtype_check(require_klass, TypeKlassPtr::make(exact_kls, Type::trust_interfaces)) == Compile::SSC_always_true) {
3368       // If we narrow the type to match what the type profile sees or
3369       // the speculative type, we can then remove the rest of the
3370       // cast.
3371       // This is a win, even if the exact_kls is very specific,
3372       // because downstream operations, such as method calls,
3373       // will often benefit from the sharper type.
3374       Node* exact_obj = not_null_obj; // will get updated in place...
3375       Node* slow_ctl  = type_check_receiver(exact_obj, exact_kls, 1.0,
3376                                             &exact_obj);
3377       { PreserveJVMState pjvms(this);
3378         set_control(slow_ctl);
3379         uncommon_trap_exact(reason, Deoptimization::Action_maybe_recompile);
3380       }
3381       if (safe_for_replace) {
3382         replace_in_map(not_null_obj, exact_obj);
3383       }
3384       return exact_obj;

3474   // If not_null_obj is dead, only null-path is taken
3475   if (stopped()) {              // Doing instance-of on a null?
3476     set_control(null_ctl);
3477     return intcon(0);
3478   }
3479   region->init_req(_null_path, null_ctl);
3480   phi   ->init_req(_null_path, intcon(0)); // Set null path value
3481   if (null_ctl == top()) {
3482     // Do this eagerly, so that pattern matches like is_diamond_phi
3483     // will work even during parsing.
3484     assert(_null_path == PATH_LIMIT-1, "delete last");
3485     region->del_req(_null_path);
3486     phi   ->del_req(_null_path);
3487   }
3488 
3489   // Do we know the type check always succeed?
3490   bool known_statically = false;
3491   if (_gvn.type(superklass)->singleton()) {
3492     const TypeKlassPtr* superk = _gvn.type(superklass)->is_klassptr();
3493     const TypeKlassPtr* subk = _gvn.type(obj)->is_oopptr()->as_klass_type();
3494     if (subk != nullptr && subk->is_loaded()) {
3495       int static_res = C->static_subtype_check(superk, subk);
3496       known_statically = (static_res == Compile::SSC_always_true || static_res == Compile::SSC_always_false);
3497     }
3498   }
3499 
3500   if (!known_statically) {
3501     const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr();
3502     // We may not have profiling here or it may not help us. If we
3503     // have a speculative type use it to perform an exact cast.
3504     ciKlass* spec_obj_type = obj_type->speculative_type();
3505     if (spec_obj_type != nullptr || (ProfileDynamicTypes && data != nullptr)) {
3506       Node* cast_obj = maybe_cast_profiled_receiver(not_null_obj, nullptr, spec_obj_type, safe_for_replace);
3507       if (stopped()) {            // Profile disagrees with this path.
3508         set_control(null_ctl);    // Null is the only remaining possibility.
3509         return intcon(0);
3510       }
3511       if (cast_obj != nullptr) {
3512         not_null_obj = cast_obj;
3513       }
3514     }

3530   record_for_igvn(region);
3531 
3532   // If we know the type check always succeeds then we don't use the
3533   // profiling data at this bytecode. Don't lose it, feed it to the
3534   // type system as a speculative type.
3535   if (safe_for_replace) {
3536     Node* casted_obj = record_profiled_receiver_for_speculation(obj);
3537     replace_in_map(obj, casted_obj);
3538   }
3539 
3540   return _gvn.transform(phi);
3541 }
3542 
3543 //-------------------------------gen_checkcast---------------------------------
3544 // Generate a checkcast idiom.  Used by both the checkcast bytecode and the
3545 // array store bytecode.  Stack must be as-if BEFORE doing the bytecode so the
3546 // uncommon-trap paths work.  Adjust stack after this call.
3547 // If failure_control is supplied and not null, it is filled in with
3548 // the control edge for the cast failure.  Otherwise, an appropriate
3549 // uncommon trap or exception is thrown.
3550 Node* GraphKit::gen_checkcast(Node* obj, Node* superklass, Node* *failure_control, bool null_free, bool maybe_larval) {

3551   kill_dead_locals();           // Benefit all the uncommon traps
3552   const TypeKlassPtr* klass_ptr_type = _gvn.type(superklass)->is_klassptr();
3553   const Type* obj_type = _gvn.type(obj);
3554   if (obj_type->is_inlinetypeptr() && !obj_type->maybe_null() && klass_ptr_type->klass_is_exact() && obj_type->inline_klass() == klass_ptr_type->exact_klass(true)) {
3555     // Special case: larval inline objects must not be scalarized. They are also generally not
3556     // allowed to participate in most operations except as the first operand of putfield, or as an
3557     // argument to a constructor invocation with it being a receiver, Unsafe::putXXX with it being
3558     // the first argument, or Unsafe::finishPrivateBuffer. This allows us to aggressively scalarize
3559     // value objects in all other places. This special case comes from the limitation of the Java
3560     // language, Unsafe::makePrivateBuffer returns an Object that is checkcast-ed to the concrete
3561     // value type. We must do this first because C->static_subtype_check may do nothing when
3562     // StressReflectiveCode is set.
3563     return obj;
3564   }
3565 
3566   // Else it must be a non-larval object
3567   obj = cast_to_non_larval(obj);
3568 
3569   const TypeKlassPtr* improved_klass_ptr_type = klass_ptr_type->try_improve();
3570   const TypeOopPtr* toop = improved_klass_ptr_type->cast_to_exactness(false)->as_instance_type();
3571   bool safe_for_replace = (failure_control == nullptr);
3572   assert(!null_free || toop->can_be_inline_type(), "must be an inline type pointer");
3573 
3574   // Fast cutout:  Check the case that the cast is vacuously true.
3575   // This detects the common cases where the test will short-circuit
3576   // away completely.  We do this before we perform the null check,
3577   // because if the test is going to turn into zero code, we don't
3578   // want a residual null check left around.  (Causes a slowdown,
3579   // for example, in some objArray manipulations, such as a[i]=a[j].)
3580   if (improved_klass_ptr_type->singleton()) {
3581     const TypeKlassPtr* kptr = nullptr;
3582     if (obj_type->isa_oop_ptr()) {
3583       kptr = obj_type->is_oopptr()->as_klass_type();
3584     } else if (obj->is_InlineType()) {
3585       ciInlineKlass* vk = obj_type->inline_klass();
3586       kptr = TypeInstKlassPtr::make(TypePtr::NotNull, vk, Type::Offset(0));
3587     }
3588 
3589     if (kptr != nullptr) {
3590       switch (C->static_subtype_check(improved_klass_ptr_type, kptr)) {
3591       case Compile::SSC_always_true:
3592         // If we know the type check always succeed then we don't use
3593         // the profiling data at this bytecode. Don't lose it, feed it
3594         // to the type system as a speculative type.
3595         obj = record_profiled_receiver_for_speculation(obj);
3596         if (null_free) {
3597           assert(safe_for_replace, "must be");
3598           obj = null_check(obj);
3599         }
3600         assert(stopped() || !toop->is_inlinetypeptr() || obj->is_InlineType(), "should have been scalarized");
3601         return obj;
3602       case Compile::SSC_always_false:
3603         if (null_free) {
3604           assert(safe_for_replace, "must be");
3605           obj = null_check(obj);
3606         }
3607         // It needs a null check because a null will *pass* the cast check.
3608         if (obj_type->isa_oopptr() != nullptr && !obj_type->is_oopptr()->maybe_null()) {

3609           bool is_aastore = (java_bc() == Bytecodes::_aastore);
3610           Deoptimization::DeoptReason reason = is_aastore ?
3611             Deoptimization::Reason_array_check : Deoptimization::Reason_class_check;
3612           builtin_throw(reason);
3613           return top();
3614         } else if (!too_many_traps_or_recompiles(Deoptimization::Reason_null_assert)) {
3615           return null_assert(obj);
3616         }
3617         break; // Fall through to full check
3618       default:
3619         break;
3620       }
3621     }
3622   }
3623 
3624   ciProfileData* data = nullptr;

3625   if (failure_control == nullptr) {        // use MDO in regular case only
3626     assert(java_bc() == Bytecodes::_aastore ||
3627            java_bc() == Bytecodes::_checkcast,
3628            "interpreter profiles type checks only for these BCs");
3629     if (method()->method_data()->is_mature()) {
3630       data = method()->method_data()->bci_to_data(bci());
3631     }
3632   }
3633 
3634   // Make the merge point
3635   enum { _obj_path = 1, _null_path, PATH_LIMIT };
3636   RegionNode* region = new RegionNode(PATH_LIMIT);
3637   Node*       phi    = new PhiNode(region, toop);
3638   _gvn.set_type(region, Type::CONTROL);
3639   _gvn.set_type(phi, toop);
3640 
3641   C->set_has_split_ifs(true); // Has chance for split-if optimization
3642 
3643   // Use null-cast information if it is available
3644   bool speculative_not_null = false;
3645   bool never_see_null = ((failure_control == nullptr)  // regular case only
3646                          && seems_never_null(obj, data, speculative_not_null));
3647 
3648   if (obj->is_InlineType()) {
3649     // Re-execute if buffering during triggers deoptimization
3650     PreserveReexecuteState preexecs(this);
3651     jvms()->set_should_reexecute(true);
3652     obj = obj->as_InlineType()->buffer(this, safe_for_replace);
3653   }
3654 
3655   // Null check; get casted pointer; set region slot 3
3656   Node* null_ctl = top();
3657   Node* not_null_obj = nullptr;
3658   if (null_free) {
3659     assert(safe_for_replace, "must be");
3660     not_null_obj = null_check(obj);
3661   } else {
3662     not_null_obj = null_check_oop(obj, &null_ctl, never_see_null, safe_for_replace, speculative_not_null);
3663   }
3664 
3665   // If not_null_obj is dead, only null-path is taken
3666   if (stopped()) {              // Doing instance-of on a null?
3667     set_control(null_ctl);
3668     if (toop->is_inlinetypeptr()) {
3669       return InlineTypeNode::make_null(_gvn, toop->inline_klass());
3670     }
3671     return null();
3672   }
3673   region->init_req(_null_path, null_ctl);
3674   phi   ->init_req(_null_path, null());  // Set null path value
3675   if (null_ctl == top()) {
3676     // Do this eagerly, so that pattern matches like is_diamond_phi
3677     // will work even during parsing.
3678     assert(_null_path == PATH_LIMIT-1, "delete last");
3679     region->del_req(_null_path);
3680     phi   ->del_req(_null_path);
3681   }
3682 
3683   Node* cast_obj = nullptr;
3684   if (improved_klass_ptr_type->klass_is_exact()) {
3685     // The following optimization tries to statically cast the speculative type of the object
3686     // (for example obtained during profiling) to the type of the superklass and then do a
3687     // dynamic check that the type of the object is what we expect. To work correctly
3688     // for checkcast and aastore the type of superklass should be exact.
3689     const TypeOopPtr* obj_type = _gvn.type(obj)->is_oopptr();
3690     // We may not have profiling here or it may not help us. If we have
3691     // a speculative type use it to perform an exact cast.
3692     ciKlass* spec_obj_type = obj_type->speculative_type();
3693     if (spec_obj_type != nullptr || data != nullptr) {
3694       cast_obj = maybe_cast_profiled_receiver(not_null_obj, improved_klass_ptr_type, spec_obj_type, safe_for_replace);
3695       if (cast_obj != nullptr) {
3696         if (failure_control != nullptr) // failure is now impossible
3697           (*failure_control) = top();
3698         // adjust the type of the phi to the exact klass:
3699         phi->raise_bottom_type(_gvn.type(cast_obj)->meet_speculative(TypePtr::NULL_PTR));
3700       }
3701     }
3702   }
3703 
3704   if (cast_obj == nullptr) {
3705     // Generate the subtype check
3706     Node* improved_superklass = superklass;
3707     if (improved_klass_ptr_type != klass_ptr_type && improved_klass_ptr_type->singleton()) {
3708       // Only improve the super class for constants which allows subsequent sub type checks to possibly be commoned up.
3709       // The other non-constant cases cannot be improved with a cast node here since they could be folded to top.
3710       // Additionally, the benefit would only be minor in non-constant cases.
3711       improved_superklass = makecon(improved_klass_ptr_type);
3712     }
3713     Node* not_subtype_ctrl = gen_subtype_check(not_null_obj, improved_superklass);

3714     // Plug in success path into the merge
3715     cast_obj = _gvn.transform(new CheckCastPPNode(control(), not_null_obj, toop));
3716     // Failure path ends in uncommon trap (or may be dead - failure impossible)
3717     if (failure_control == nullptr) {
3718       if (not_subtype_ctrl != top()) { // If failure is possible
3719         PreserveJVMState pjvms(this);
3720         set_control(not_subtype_ctrl);
3721         bool is_aastore = (java_bc() == Bytecodes::_aastore);
3722         Deoptimization::DeoptReason reason = is_aastore ?
3723           Deoptimization::Reason_array_check : Deoptimization::Reason_class_check;
3724         builtin_throw(reason);
3725       }
3726     } else {
3727       (*failure_control) = not_subtype_ctrl;
3728     }
3729   }
3730 
3731   region->init_req(_obj_path, control());
3732   phi   ->init_req(_obj_path, cast_obj);
3733 
3734   // A merge of null or Casted-NotNull obj
3735   Node* res = _gvn.transform(phi);
3736 
3737   // Note I do NOT always 'replace_in_map(obj,result)' here.
3738   //  if( tk->klass()->can_be_primary_super()  )
3739     // This means that if I successfully store an Object into an array-of-String
3740     // I 'forget' that the Object is really now known to be a String.  I have to
3741     // do this because we don't have true union types for interfaces - if I store
3742     // a Baz into an array-of-Interface and then tell the optimizer it's an
3743     // Interface, I forget that it's also a Baz and cannot do Baz-like field
3744     // references to it.  FIX THIS WHEN UNION TYPES APPEAR!
3745   //  replace_in_map( obj, res );
3746 
3747   // Return final merged results
3748   set_control( _gvn.transform(region) );
3749   record_for_igvn(region);
3750 
3751   bool not_inline = !toop->can_be_inline_type();
3752   bool not_flat_in_array = !UseArrayFlattening || not_inline || (toop->is_inlinetypeptr() && !toop->inline_klass()->maybe_flat_in_array());
3753   if (Arguments::is_valhalla_enabled() && (not_inline || not_flat_in_array)) {
3754     // Check if obj has been loaded from an array
3755     obj = obj->isa_DecodeN() ? obj->in(1) : obj;
3756     Node* array = nullptr;
3757     if (obj->isa_Load()) {
3758       Node* address = obj->in(MemNode::Address);
3759       if (address->isa_AddP()) {
3760         array = address->as_AddP()->in(AddPNode::Base);
3761       }
3762     } else if (obj->is_Phi()) {
3763       Node* region = obj->in(0);
3764       // TODO make this more robust (see JDK-8231346)
3765       if (region->req() == 3 && region->in(2) != nullptr && region->in(2)->in(0) != nullptr) {
3766         IfNode* iff = region->in(2)->in(0)->isa_If();
3767         if (iff != nullptr) {
3768           iff->is_flat_array_check(&_gvn, &array);
3769         }
3770       }
3771     }
3772     if (array != nullptr) {
3773       const TypeAryPtr* ary_t = _gvn.type(array)->isa_aryptr();
3774       if (ary_t != nullptr) {
3775         if (!ary_t->is_not_null_free() && !ary_t->is_null_free() && not_inline) {
3776           // Casting array element to a non-inline-type, mark array as not null-free.
3777           Node* cast = _gvn.transform(new CheckCastPPNode(control(), array, ary_t->cast_to_not_null_free()));
3778           replace_in_map(array, cast);
3779           array = cast;
3780         }
3781         if (!ary_t->is_not_flat() && !ary_t->is_flat() && not_flat_in_array) {
3782           // Casting array element to a non-flat-in-array type, mark array as not flat.
3783           Node* cast = _gvn.transform(new CheckCastPPNode(control(), array, ary_t->cast_to_not_flat()));
3784           replace_in_map(array, cast);
3785           array = cast;
3786         }
3787       }
3788     }
3789   }
3790 
3791   if (!stopped() && !res->is_InlineType()) {
3792     res = record_profiled_receiver_for_speculation(res);
3793     if (toop->is_inlinetypeptr() && !maybe_larval) {
3794       Node* vt = InlineTypeNode::make_from_oop(this, res, toop->inline_klass());
3795       res = vt;
3796       if (safe_for_replace) {
3797         replace_in_map(obj, vt);
3798         replace_in_map(not_null_obj, vt);
3799         replace_in_map(res, vt);
3800       }
3801     }
3802   }
3803   return res;
3804 }
3805 
3806 Node* GraphKit::mark_word_test(Node* obj, uintptr_t mask_val, bool eq, bool check_lock) {
3807   // Load markword
3808   Node* mark_adr = basic_plus_adr(obj, oopDesc::mark_offset_in_bytes());
3809   Node* mark = make_load(nullptr, mark_adr, TypeX_X, TypeX_X->basic_type(), MemNode::unordered);
3810   if (check_lock && !UseCompactObjectHeaders) {
3811     // COH: Locking does not override the markword with a tagged pointer. We can directly read from the markword.
3812     // Check if obj is locked
3813     Node* locked_bit = MakeConX(markWord::unlocked_value);
3814     locked_bit = _gvn.transform(new AndXNode(locked_bit, mark));
3815     Node* cmp = _gvn.transform(new CmpXNode(locked_bit, MakeConX(0)));
3816     Node* is_unlocked = _gvn.transform(new BoolNode(cmp, BoolTest::ne));
3817     IfNode* iff = new IfNode(control(), is_unlocked, PROB_MAX, COUNT_UNKNOWN);
3818     _gvn.transform(iff);
3819     Node* locked_region = new RegionNode(3);
3820     Node* mark_phi = new PhiNode(locked_region, TypeX_X);
3821 
3822     // Unlocked: Use bits from mark word
3823     locked_region->init_req(1, _gvn.transform(new IfTrueNode(iff)));
3824     mark_phi->init_req(1, mark);
3825 
3826     // Locked: Load prototype header from klass
3827     set_control(_gvn.transform(new IfFalseNode(iff)));
3828     // Make loads control dependent to make sure they are only executed if array is locked
3829     Node* klass_adr = basic_plus_adr(obj, oopDesc::klass_offset_in_bytes());
3830     Node* klass = _gvn.transform(LoadKlassNode::make(_gvn, C->immutable_memory(), klass_adr, TypeInstPtr::KLASS, TypeInstKlassPtr::OBJECT));
3831     Node* proto_adr = basic_plus_adr(klass, in_bytes(Klass::prototype_header_offset()));
3832     Node* proto = _gvn.transform(LoadNode::make(_gvn, control(), C->immutable_memory(), proto_adr, proto_adr->bottom_type()->is_ptr(), TypeX_X, TypeX_X->basic_type(), MemNode::unordered));
3833 
3834     locked_region->init_req(2, control());
3835     mark_phi->init_req(2, proto);
3836     set_control(_gvn.transform(locked_region));
3837     record_for_igvn(locked_region);
3838 
3839     mark = mark_phi;
3840   }
3841 
3842   // Now check if mark word bits are set
3843   Node* mask = MakeConX(mask_val);
3844   Node* masked = _gvn.transform(new AndXNode(_gvn.transform(mark), mask));
3845   record_for_igvn(masked); // Give it a chance to be optimized out by IGVN
3846   Node* cmp = _gvn.transform(new CmpXNode(masked, mask));
3847   return _gvn.transform(new BoolNode(cmp, eq ? BoolTest::eq : BoolTest::ne));
3848 }
3849 
3850 Node* GraphKit::inline_type_test(Node* obj, bool is_inline) {
3851   return mark_word_test(obj, markWord::inline_type_pattern, is_inline, /* check_lock = */ false);
3852 }
3853 
3854 Node* GraphKit::flat_array_test(Node* array_or_klass, bool flat) {
3855   // We can't use immutable memory here because the mark word is mutable.
3856   // PhaseIdealLoop::move_flat_array_check_out_of_loop will make sure the
3857   // check is moved out of loops (mainly to enable loop unswitching).
3858   Node* cmp = _gvn.transform(new FlatArrayCheckNode(C, memory(Compile::AliasIdxRaw), array_or_klass));
3859   record_for_igvn(cmp); // Give it a chance to be optimized out by IGVN
3860   return _gvn.transform(new BoolNode(cmp, flat ? BoolTest::eq : BoolTest::ne));
3861 }
3862 
3863 Node* GraphKit::null_free_array_test(Node* array, bool null_free) {
3864   return mark_word_test(array, markWord::null_free_array_bit_in_place, null_free);
3865 }
3866 
3867 Node* GraphKit::null_free_atomic_array_test(Node* array, ciInlineKlass* vk) {
3868   assert(vk->has_atomic_layout() || vk->has_non_atomic_layout(), "Can't be null-free and flat");
3869 
3870   // TODO 8350865 Add a stress flag to always access atomic if layout exists?
3871   if (!vk->has_non_atomic_layout()) {
3872     return intcon(1); // Always atomic
3873   } else if (!vk->has_atomic_layout()) {
3874     return intcon(0); // Never atomic
3875   }
3876 
3877   Node* array_klass = load_object_klass(array);
3878   int layout_kind_offset = in_bytes(FlatArrayKlass::layout_kind_offset());
3879   Node* layout_kind_addr = basic_plus_adr(array_klass, array_klass, layout_kind_offset);
3880   Node* layout_kind = make_load(nullptr, layout_kind_addr, TypeInt::INT, T_INT, MemNode::unordered);
3881   Node* cmp = _gvn.transform(new CmpINode(layout_kind, intcon((int)LayoutKind::NULL_FREE_ATOMIC_FLAT)));
3882   return _gvn.transform(new BoolNode(cmp, BoolTest::eq));
3883 }
3884 
3885 // Deoptimize if 'ary' is a null-free inline type array and 'val' is null
3886 Node* GraphKit::inline_array_null_guard(Node* ary, Node* val, int nargs, bool safe_for_replace) {
3887   RegionNode* region = new RegionNode(3);
3888   Node* null_ctl = top();
3889   null_check_oop(val, &null_ctl);
3890   if (null_ctl != top()) {
3891     PreserveJVMState pjvms(this);
3892     set_control(null_ctl);
3893     {
3894       // Deoptimize if null-free array
3895       BuildCutout unless(this, null_free_array_test(ary, /* null_free = */ false), PROB_MAX);
3896       inc_sp(nargs);
3897       uncommon_trap(Deoptimization::Reason_null_check,
3898                     Deoptimization::Action_none);
3899     }
3900     region->init_req(1, control());
3901   }
3902   region->init_req(2, control());
3903   set_control(_gvn.transform(region));
3904   record_for_igvn(region);
3905   if (_gvn.type(val) == TypePtr::NULL_PTR) {
3906     // Since we were just successfully storing null, the array can't be null free.
3907     const TypeAryPtr* ary_t = _gvn.type(ary)->is_aryptr();
3908     ary_t = ary_t->cast_to_not_null_free();
3909     Node* cast = _gvn.transform(new CheckCastPPNode(control(), ary, ary_t));
3910     if (safe_for_replace) {
3911       replace_in_map(ary, cast);
3912     }
3913     ary = cast;
3914   }
3915   return ary;
3916 }
3917 
3918 //------------------------------next_monitor-----------------------------------
3919 // What number should be given to the next monitor?
3920 int GraphKit::next_monitor() {
3921   int current = jvms()->monitor_depth()* C->sync_stack_slots();
3922   int next = current + C->sync_stack_slots();
3923   // Keep the toplevel high water mark current:
3924   if (C->fixed_slots() < next)  C->set_fixed_slots(next);
3925   return current;
3926 }
3927 
3928 //------------------------------insert_mem_bar---------------------------------
3929 // Memory barrier to avoid floating things around
3930 // The membar serves as a pinch point between both control and all memory slices.
3931 Node* GraphKit::insert_mem_bar(int opcode, Node* precedent) {
3932   MemBarNode* mb = MemBarNode::make(C, opcode, Compile::AliasIdxBot, precedent);
3933   mb->init_req(TypeFunc::Control, control());
3934   mb->init_req(TypeFunc::Memory,  reset_memory());
3935   Node* membar = _gvn.transform(mb);

4027     lock->create_lock_counter(map()->jvms());
4028     increment_counter(lock->counter()->addr());
4029   }
4030 #endif
4031 
4032   return flock;
4033 }
4034 
4035 
4036 //------------------------------shared_unlock----------------------------------
4037 // Emit unlocking code.
4038 void GraphKit::shared_unlock(Node* box, Node* obj) {
4039   // bci is either a monitorenter bc or InvocationEntryBci
4040   // %%% SynchronizationEntryBCI is redundant; use InvocationEntryBci in interfaces
4041   assert(SynchronizationEntryBCI == InvocationEntryBci, "");
4042 
4043   if (stopped()) {               // Dead monitor?
4044     map()->pop_monitor();        // Kill monitor from debug info
4045     return;
4046   }
4047   assert(!obj->is_InlineType(), "should not unlock on inline type");
4048 
4049   // Memory barrier to avoid floating things down past the locked region
4050   insert_mem_bar(Op_MemBarReleaseLock);
4051 
4052   const TypeFunc *tf = OptoRuntime::complete_monitor_exit_Type();
4053   UnlockNode *unlock = new UnlockNode(C, tf);
4054 #ifdef ASSERT
4055   unlock->set_dbg_jvms(sync_jvms());
4056 #endif
4057   uint raw_idx = Compile::AliasIdxRaw;
4058   unlock->init_req( TypeFunc::Control, control() );
4059   unlock->init_req( TypeFunc::Memory , memory(raw_idx) );
4060   unlock->init_req( TypeFunc::I_O    , top() )     ;   // does no i/o
4061   unlock->init_req( TypeFunc::FramePtr, frameptr() );
4062   unlock->init_req( TypeFunc::ReturnAdr, top() );
4063 
4064   unlock->init_req(TypeFunc::Parms + 0, obj);
4065   unlock->init_req(TypeFunc::Parms + 1, box);
4066   unlock = _gvn.transform(unlock)->as_Unlock();
4067 
4068   Node* mem = reset_memory();
4069 
4070   // unlock has no side-effects, sets few values
4071   set_predefined_output_for_runtime_call(unlock, mem, TypeRawPtr::BOTTOM);
4072 
4073   // Kill monitor from debug info
4074   map()->pop_monitor( );
4075 }
4076 
4077 //-------------------------------get_layout_helper-----------------------------
4078 // If the given klass is a constant or known to be an array,
4079 // fetch the constant layout helper value into constant_value
4080 // and return null.  Otherwise, load the non-constant
4081 // layout helper value, and return the node which represents it.
4082 // This two-faced routine is useful because allocation sites
4083 // almost always feature constant types.
4084 Node* GraphKit::get_layout_helper(Node* klass_node, jint& constant_value) {
4085   const TypeKlassPtr* klass_t = _gvn.type(klass_node)->isa_klassptr();
4086   if (!StressReflectiveCode && klass_t != nullptr) {
4087     bool xklass = klass_t->klass_is_exact();
4088     bool can_be_flat = false;
4089     const TypeAryPtr* ary_type = klass_t->as_instance_type()->isa_aryptr();
4090     if (UseArrayFlattening && !xklass && ary_type != nullptr && !ary_type->is_null_free()) {
4091       // Don't constant fold if the runtime type might be a flat array but the static type is not.
4092       const TypeOopPtr* elem = ary_type->elem()->make_oopptr();
4093       can_be_flat = ary_type->can_be_inline_array() && (!elem->is_inlinetypeptr() || elem->inline_klass()->maybe_flat_in_array());
4094     }
4095     if (!can_be_flat && (xklass || (klass_t->isa_aryklassptr() && klass_t->is_aryklassptr()->elem() != Type::BOTTOM))) {
4096       jint lhelper;
4097       if (klass_t->is_flat()) {
4098         lhelper = ary_type->flat_layout_helper();
4099       } else if (klass_t->isa_aryklassptr()) {
4100         BasicType elem = ary_type->elem()->array_element_basic_type();
4101         if (is_reference_type(elem, true)) {
4102           elem = T_OBJECT;
4103         }
4104         lhelper = Klass::array_layout_helper(elem);
4105       } else {
4106         lhelper = klass_t->is_instklassptr()->exact_klass()->layout_helper();
4107       }
4108       if (lhelper != Klass::_lh_neutral_value) {
4109         constant_value = lhelper;
4110         return (Node*) nullptr;
4111       }
4112     }
4113   }
4114   constant_value = Klass::_lh_neutral_value;  // put in a known value
4115   Node* lhp = basic_plus_adr(klass_node, klass_node, in_bytes(Klass::layout_helper_offset()));
4116   return make_load(nullptr, lhp, TypeInt::INT, T_INT, MemNode::unordered);
4117 }
4118 
4119 // We just put in an allocate/initialize with a big raw-memory effect.
4120 // Hook selected additional alias categories on the initialization.
4121 static void hook_memory_on_init(GraphKit& kit, int alias_idx,
4122                                 MergeMemNode* init_in_merge,
4123                                 Node* init_out_raw) {
4124   DEBUG_ONLY(Node* init_in_raw = init_in_merge->base_memory());
4125   assert(init_in_merge->memory_at(alias_idx) == init_in_raw, "");
4126 
4127   Node* prevmem = kit.memory(alias_idx);
4128   init_in_merge->set_memory_at(alias_idx, prevmem);
4129   if (init_out_raw != nullptr) {
4130     kit.set_memory(init_out_raw, alias_idx);
4131   }
4132 }
4133 
4134 //---------------------------set_output_for_allocation-------------------------
4135 Node* GraphKit::set_output_for_allocation(AllocateNode* alloc,
4136                                           const TypeOopPtr* oop_type,
4137                                           bool deoptimize_on_exception) {
4138   int rawidx = Compile::AliasIdxRaw;
4139   alloc->set_req( TypeFunc::FramePtr, frameptr() );
4140   add_safepoint_edges(alloc);
4141   Node* allocx = _gvn.transform(alloc);
4142   set_control( _gvn.transform(new ProjNode(allocx, TypeFunc::Control) ) );
4143   // create memory projection for i_o
4144   set_memory ( _gvn.transform( new ProjNode(allocx, TypeFunc::Memory, true) ), rawidx );
4145   make_slow_call_ex(allocx, env()->Throwable_klass(), true, deoptimize_on_exception);
4146 
4147   // create a memory projection as for the normal control path
4148   Node* malloc = _gvn.transform(new ProjNode(allocx, TypeFunc::Memory));
4149   set_memory(malloc, rawidx);
4150 
4151   // a normal slow-call doesn't change i_o, but an allocation does
4152   // we create a separate i_o projection for the normal control path
4153   set_i_o(_gvn.transform( new ProjNode(allocx, TypeFunc::I_O, false) ) );
4154   Node* rawoop = _gvn.transform( new ProjNode(allocx, TypeFunc::Parms) );
4155 
4156   // put in an initialization barrier
4157   InitializeNode* init = insert_mem_bar_volatile(Op_Initialize, rawidx,
4158                                                  rawoop)->as_Initialize();
4159   assert(alloc->initialization() == init,  "2-way macro link must work");
4160   assert(init ->allocation()     == alloc, "2-way macro link must work");
4161   {
4162     // Extract memory strands which may participate in the new object's
4163     // initialization, and source them from the new InitializeNode.
4164     // This will allow us to observe initializations when they occur,
4165     // and link them properly (as a group) to the InitializeNode.
4166     assert(init->in(InitializeNode::Memory) == malloc, "");
4167     MergeMemNode* minit_in = MergeMemNode::make(malloc);
4168     init->set_req(InitializeNode::Memory, minit_in);
4169     record_for_igvn(minit_in); // fold it up later, if possible
4170     _gvn.set_type(minit_in, Type::MEMORY);
4171     Node* minit_out = memory(rawidx);
4172     assert(minit_out->is_Proj() && minit_out->in(0) == init, "");
4173     int mark_idx = C->get_alias_index(oop_type->add_offset(oopDesc::mark_offset_in_bytes()));
4174     // Add an edge in the MergeMem for the header fields so an access to one of those has correct memory state.
4175     // Use one NarrowMemProjNode per slice to properly record the adr type of each slice. The Initialize node will have
4176     // multiple projections as a result.
4177     set_memory(_gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(mark_idx))), mark_idx);
4178     int klass_idx = C->get_alias_index(oop_type->add_offset(oopDesc::klass_offset_in_bytes()));
4179     set_memory(_gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(klass_idx))), klass_idx);
4180     if (oop_type->isa_aryptr()) {
4181       // Initially all flat array accesses share a single slice
4182       // but that changes after parsing. Prepare the memory graph so
4183       // it can optimize flat array accesses properly once they
4184       // don't share a single slice.
4185       assert(C->flat_accesses_share_alias(), "should be set at parse time");
4186       const TypePtr* telemref = oop_type->add_offset(Type::OffsetBot);
4187       int            elemidx  = C->get_alias_index(telemref);
4188       hook_memory_on_init(*this, elemidx, minit_in, _gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(elemidx))));
4189     } else if (oop_type->isa_instptr()) {
4190       set_memory(minit_out, C->get_alias_index(oop_type)); // mark word
4191       ciInstanceKlass* ik = oop_type->is_instptr()->instance_klass();
4192       for (int i = 0, len = ik->nof_nonstatic_fields(); i < len; i++) {
4193         ciField* field = ik->nonstatic_field_at(i);
4194         if (field->offset_in_bytes() >= TrackedInitializationLimit * HeapWordSize)
4195           continue;  // do not bother to track really large numbers of fields
4196         // Find (or create) the alias category for this field:
4197         int fieldidx = C->alias_type(field)->index();
4198         hook_memory_on_init(*this, fieldidx, minit_in, _gvn.transform(new NarrowMemProjNode(init, C->get_adr_type(fieldidx))));
4199       }
4200     }
4201   }
4202 
4203   // Cast raw oop to the real thing...
4204   Node* javaoop = new CheckCastPPNode(control(), rawoop, oop_type);
4205   javaoop = _gvn.transform(javaoop);
4206   C->set_recent_alloc(control(), javaoop);
4207   assert(just_allocated_object(control()) == javaoop, "just allocated");
4208 
4209 #ifdef ASSERT
4210   { // Verify that the AllocateNode::Ideal_allocation recognizers work:

4221       assert(alloc->in(AllocateNode::ALength)->is_top(), "no length, please");
4222     }
4223   }
4224 #endif //ASSERT
4225 
4226   return javaoop;
4227 }
4228 
4229 //---------------------------new_instance--------------------------------------
4230 // This routine takes a klass_node which may be constant (for a static type)
4231 // or may be non-constant (for reflective code).  It will work equally well
4232 // for either, and the graph will fold nicely if the optimizer later reduces
4233 // the type to a constant.
4234 // The optional arguments are for specialized use by intrinsics:
4235 //  - If 'extra_slow_test' if not null is an extra condition for the slow-path.
4236 //  - If 'return_size_val', report the total object size to the caller.
4237 //  - deoptimize_on_exception controls how Java exceptions are handled (rethrow vs deoptimize)
4238 Node* GraphKit::new_instance(Node* klass_node,
4239                              Node* extra_slow_test,
4240                              Node* *return_size_val,
4241                              bool deoptimize_on_exception,
4242                              InlineTypeNode* inline_type_node) {
4243   // Compute size in doublewords
4244   // The size is always an integral number of doublewords, represented
4245   // as a positive bytewise size stored in the klass's layout_helper.
4246   // The layout_helper also encodes (in a low bit) the need for a slow path.
4247   jint  layout_con = Klass::_lh_neutral_value;
4248   Node* layout_val = get_layout_helper(klass_node, layout_con);
4249   bool  layout_is_con = (layout_val == nullptr);
4250 
4251   if (extra_slow_test == nullptr)  extra_slow_test = intcon(0);
4252   // Generate the initial go-slow test.  It's either ALWAYS (return a
4253   // Node for 1) or NEVER (return a null) or perhaps (in the reflective
4254   // case) a computed value derived from the layout_helper.
4255   Node* initial_slow_test = nullptr;
4256   if (layout_is_con) {
4257     assert(!StressReflectiveCode, "stress mode does not use these paths");
4258     bool must_go_slow = Klass::layout_helper_needs_slow_path(layout_con);
4259     initial_slow_test = must_go_slow ? intcon(1) : extra_slow_test;
4260   } else {   // reflective case
4261     // This reflective path is used by Unsafe.allocateInstance.
4262     // (It may be stress-tested by specifying StressReflectiveCode.)
4263     // Basically, we want to get into the VM is there's an illegal argument.
4264     Node* bit = intcon(Klass::_lh_instance_slow_path_bit);
4265     initial_slow_test = _gvn.transform( new AndINode(layout_val, bit) );
4266     if (extra_slow_test != intcon(0)) {
4267       initial_slow_test = _gvn.transform( new OrINode(initial_slow_test, extra_slow_test) );
4268     }
4269     // (Macro-expander will further convert this to a Bool, if necessary.)

4280 
4281     // Clear the low bits to extract layout_helper_size_in_bytes:
4282     assert((int)Klass::_lh_instance_slow_path_bit < BytesPerLong, "clear bit");
4283     Node* mask = MakeConX(~ (intptr_t)right_n_bits(LogBytesPerLong));
4284     size = _gvn.transform( new AndXNode(size, mask) );
4285   }
4286   if (return_size_val != nullptr) {
4287     (*return_size_val) = size;
4288   }
4289 
4290   // This is a precise notnull oop of the klass.
4291   // (Actually, it need not be precise if this is a reflective allocation.)
4292   // It's what we cast the result to.
4293   const TypeKlassPtr* tklass = _gvn.type(klass_node)->isa_klassptr();
4294   if (!tklass)  tklass = TypeInstKlassPtr::OBJECT;
4295   const TypeOopPtr* oop_type = tklass->as_instance_type();
4296 
4297   // Now generate allocation code
4298 
4299   // The entire memory state is needed for slow path of the allocation
4300   // since GC and deoptimization can happen.
4301   Node *mem = reset_memory();
4302   set_all_memory(mem); // Create new memory state
4303 
4304   AllocateNode* alloc = new AllocateNode(C, AllocateNode::alloc_type(Type::TOP),
4305                                          control(), mem, i_o(),
4306                                          size, klass_node,
4307                                          initial_slow_test, inline_type_node);
4308 
4309   return set_output_for_allocation(alloc, oop_type, deoptimize_on_exception);
4310 }
4311 
4312 //-------------------------------new_array-------------------------------------
4313 // helper for newarray and anewarray
4314 // The 'length' parameter is (obviously) the length of the array.
4315 // The optional arguments are for specialized use by intrinsics:
4316 //  - If 'return_size_val', report the non-padded array size (sum of header size
4317 //    and array body) to the caller.
4318 //  - deoptimize_on_exception controls how Java exceptions are handled (rethrow vs deoptimize)
4319 Node* GraphKit::new_array(Node* klass_node,     // array klass (maybe variable)
4320                           Node* length,         // number of array elements
4321                           int   nargs,          // number of arguments to push back for uncommon trap
4322                           Node* *return_size_val,
4323                           bool deoptimize_on_exception,
4324                           Node* init_val) {
4325   jint  layout_con = Klass::_lh_neutral_value;
4326   Node* layout_val = get_layout_helper(klass_node, layout_con);
4327   bool  layout_is_con = (layout_val == nullptr);
4328 
4329   if (!layout_is_con && !StressReflectiveCode &&
4330       !too_many_traps(Deoptimization::Reason_class_check)) {
4331     // This is a reflective array creation site.
4332     // Optimistically assume that it is a subtype of Object[],
4333     // so that we can fold up all the address arithmetic.
4334     layout_con = Klass::array_layout_helper(T_OBJECT);
4335     Node* cmp_lh = _gvn.transform( new CmpINode(layout_val, intcon(layout_con)) );
4336     Node* bol_lh = _gvn.transform( new BoolNode(cmp_lh, BoolTest::eq) );
4337     { BuildCutout unless(this, bol_lh, PROB_MAX);
4338       inc_sp(nargs);
4339       uncommon_trap(Deoptimization::Reason_class_check,
4340                     Deoptimization::Action_maybe_recompile);
4341     }
4342     layout_val = nullptr;
4343     layout_is_con = true;
4344   }
4345 
4346   // Generate the initial go-slow test.  Make sure we do not overflow
4347   // if length is huge (near 2Gig) or negative!  We do not need
4348   // exact double-words here, just a close approximation of needed
4349   // double-words.  We can't add any offset or rounding bits, lest we
4350   // take a size -1 of bytes and make it positive.  Use an unsigned
4351   // compare, so negative sizes look hugely positive.
4352   int fast_size_limit = FastAllocateSizeLimit;
4353   if (layout_is_con) {
4354     assert(!StressReflectiveCode, "stress mode does not use these paths");
4355     // Increase the size limit if we have exact knowledge of array type.
4356     int log2_esize = Klass::layout_helper_log2_element_size(layout_con);
4357     fast_size_limit <<= MAX2(LogBytesPerLong - log2_esize, 0);


4358   }
4359 
4360   Node* initial_slow_cmp  = _gvn.transform( new CmpUNode( length, intcon( fast_size_limit ) ) );
4361   Node* initial_slow_test = _gvn.transform( new BoolNode( initial_slow_cmp, BoolTest::gt ) );
4362 
4363   // --- Size Computation ---
4364   // array_size = round_to_heap(array_header + (length << elem_shift));
4365   // where round_to_heap(x) == align_to(x, MinObjAlignmentInBytes)
4366   // and align_to(x, y) == ((x + y-1) & ~(y-1))
4367   // The rounding mask is strength-reduced, if possible.
4368   int round_mask = MinObjAlignmentInBytes - 1;
4369   Node* header_size = nullptr;
4370   // (T_BYTE has the weakest alignment and size restrictions...)
4371   if (layout_is_con) {
4372     int       hsize  = Klass::layout_helper_header_size(layout_con);
4373     int       eshift = Klass::layout_helper_log2_element_size(layout_con);
4374     bool is_flat_array = Klass::layout_helper_is_flatArray(layout_con);
4375     if ((round_mask & ~right_n_bits(eshift)) == 0)
4376       round_mask = 0;  // strength-reduce it if it goes away completely
4377     assert(is_flat_array || (hsize & right_n_bits(eshift)) == 0, "hsize is pre-rounded");
4378     int header_size_min = arrayOopDesc::base_offset_in_bytes(T_BYTE);
4379     assert(header_size_min <= hsize, "generic minimum is smallest");
4380     header_size = intcon(hsize);
4381   } else {
4382     Node* hss   = intcon(Klass::_lh_header_size_shift);
4383     Node* hsm   = intcon(Klass::_lh_header_size_mask);
4384     header_size = _gvn.transform(new URShiftINode(layout_val, hss));
4385     header_size = _gvn.transform(new AndINode(header_size, hsm));
4386   }
4387 
4388   Node* elem_shift = nullptr;
4389   if (layout_is_con) {
4390     int eshift = Klass::layout_helper_log2_element_size(layout_con);
4391     if (eshift != 0)
4392       elem_shift = intcon(eshift);
4393   } else {
4394     // There is no need to mask or shift this value.
4395     // The semantics of LShiftINode include an implicit mask to 0x1F.
4396     assert(Klass::_lh_log2_element_size_shift == 0, "use shift in place");
4397     elem_shift = layout_val;

4446   }
4447   Node* non_rounded_size = _gvn.transform(new AddXNode(headerx, abody));
4448 
4449   if (return_size_val != nullptr) {
4450     // This is the size
4451     (*return_size_val) = non_rounded_size;
4452   }
4453 
4454   Node* size = non_rounded_size;
4455   if (round_mask != 0) {
4456     Node* mask1 = MakeConX(round_mask);
4457     size = _gvn.transform(new AddXNode(size, mask1));
4458     Node* mask2 = MakeConX(~round_mask);
4459     size = _gvn.transform(new AndXNode(size, mask2));
4460   }
4461   // else if round_mask == 0, the size computation is self-rounding
4462 
4463   // Now generate allocation code
4464 
4465   // The entire memory state is needed for slow path of the allocation
4466   // since GC and deoptimization can happen.
4467   Node *mem = reset_memory();
4468   set_all_memory(mem); // Create new memory state
4469 
4470   if (initial_slow_test->is_Bool()) {
4471     // Hide it behind a CMoveI, or else PhaseIdealLoop::split_up will get sick.
4472     initial_slow_test = initial_slow_test->as_Bool()->as_int_value(&_gvn);
4473   }
4474 
4475   const TypeKlassPtr* ary_klass = _gvn.type(klass_node)->isa_klassptr();
4476   const TypeOopPtr* ary_type = ary_klass->as_instance_type();
4477 
4478   Node* raw_init_value = nullptr;
4479   if (init_val != nullptr) {
4480     // TODO 8350865 Fast non-zero init not implemented yet for flat, null-free arrays
4481     if (ary_type->is_flat()) {
4482       initial_slow_test = intcon(1);
4483     }
4484 
4485     if (UseCompressedOops) {
4486       // With compressed oops, the 64-bit init value is built from two 32-bit compressed oops
4487       init_val = _gvn.transform(new EncodePNode(init_val, init_val->bottom_type()->make_narrowoop()));
4488       Node* lower = _gvn.transform(new CastP2XNode(control(), init_val));
4489       Node* upper = _gvn.transform(new LShiftLNode(lower, intcon(32)));
4490       raw_init_value = _gvn.transform(new OrLNode(lower, upper));
4491     } else {
4492       raw_init_value = _gvn.transform(new CastP2XNode(control(), init_val));
4493     }
4494   }
4495 
4496   Node* valid_length_test = _gvn.intcon(1);
4497   if (ary_type->isa_aryptr()) {
4498     BasicType bt = ary_type->isa_aryptr()->elem()->array_element_basic_type();
4499     jint max = TypeAryPtr::max_array_length(bt);
4500     Node* valid_length_cmp  = _gvn.transform(new CmpUNode(length, intcon(max)));
4501     valid_length_test = _gvn.transform(new BoolNode(valid_length_cmp, BoolTest::le));
4502   }
4503 
4504   // Create the AllocateArrayNode and its result projections
4505   AllocateArrayNode* alloc
4506     = new AllocateArrayNode(C, AllocateArrayNode::alloc_type(TypeInt::INT),
4507                             control(), mem, i_o(),
4508                             size, klass_node,
4509                             initial_slow_test,
4510                             length, valid_length_test,
4511                             init_val, raw_init_value);
4512   // Cast to correct type.  Note that the klass_node may be constant or not,
4513   // and in the latter case the actual array type will be inexact also.
4514   // (This happens via a non-constant argument to inline_native_newArray.)
4515   // In any case, the value of klass_node provides the desired array type.
4516   const TypeInt* length_type = _gvn.find_int_type(length);
4517   if (ary_type->isa_aryptr() && length_type != nullptr) {
4518     // Try to get a better type than POS for the size
4519     ary_type = ary_type->is_aryptr()->cast_to_size(length_type);
4520   }
4521 
4522   Node* javaoop = set_output_for_allocation(alloc, ary_type, deoptimize_on_exception);
4523 
4524   array_ideal_length(alloc, ary_type, true);
4525   return javaoop;
4526 }
4527 
4528 // The following "Ideal_foo" functions are placed here because they recognize
4529 // the graph shapes created by the functions immediately above.
4530 
4531 //---------------------------Ideal_allocation----------------------------------

4626 void GraphKit::add_parse_predicates(int nargs) {
4627   if (ShortRunningLongLoop) {
4628     // Will narrow the limit down with a cast node. Predicates added later may depend on the cast so should be last when
4629     // walking up from the loop.
4630     add_parse_predicate(Deoptimization::Reason_short_running_long_loop, nargs);
4631   }
4632   if (UseLoopPredicate) {
4633     add_parse_predicate(Deoptimization::Reason_predicate, nargs);
4634     if (UseProfiledLoopPredicate) {
4635       add_parse_predicate(Deoptimization::Reason_profile_predicate, nargs);
4636     }
4637   }
4638   if (UseAutoVectorizationPredicate) {
4639     add_parse_predicate(Deoptimization::Reason_auto_vectorization_check, nargs);
4640   }
4641   // Loop Limit Check Predicate should be near the loop.
4642   add_parse_predicate(Deoptimization::Reason_loop_limit_check, nargs);
4643 }
4644 
4645 void GraphKit::sync_kit(IdealKit& ideal) {
4646   reset_memory();
4647   set_all_memory(ideal.merged_memory());
4648   set_i_o(ideal.i_o());
4649   set_control(ideal.ctrl());
4650 }
4651 
4652 void GraphKit::final_sync(IdealKit& ideal) {
4653   // Final sync IdealKit and graphKit.
4654   sync_kit(ideal);
4655 }
4656 
4657 Node* GraphKit::load_String_length(Node* str, bool set_ctrl) {
4658   Node* len = load_array_length(load_String_value(str, set_ctrl));
4659   Node* coder = load_String_coder(str, set_ctrl);
4660   // Divide length by 2 if coder is UTF16
4661   return _gvn.transform(new RShiftINode(len, coder));
4662 }
4663 
4664 Node* GraphKit::load_String_value(Node* str, bool set_ctrl) {
4665   int value_offset = java_lang_String::value_offset();
4666   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4667                                                      false, nullptr, Type::Offset(0));
4668   const TypePtr* value_field_type = string_type->add_offset(value_offset);
4669   const TypeAryPtr* value_type = TypeAryPtr::make(TypePtr::NotNull,
4670                                                   TypeAry::make(TypeInt::BYTE, TypeInt::POS, false, false, true, true, true),
4671                                                   ciTypeArrayKlass::make(T_BYTE), true, Type::Offset(0));
4672   Node* p = basic_plus_adr(str, str, value_offset);
4673   Node* load = access_load_at(str, p, value_field_type, value_type, T_OBJECT,
4674                               IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED);
4675   return load;
4676 }
4677 
4678 Node* GraphKit::load_String_coder(Node* str, bool set_ctrl) {
4679   if (!CompactStrings) {
4680     return intcon(java_lang_String::CODER_UTF16);
4681   }
4682   int coder_offset = java_lang_String::coder_offset();
4683   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4684                                                      false, nullptr, Type::Offset(0));
4685   const TypePtr* coder_field_type = string_type->add_offset(coder_offset);
4686 
4687   Node* p = basic_plus_adr(str, str, coder_offset);
4688   Node* load = access_load_at(str, p, coder_field_type, TypeInt::BYTE, T_BYTE,
4689                               IN_HEAP | (set_ctrl ? C2_CONTROL_DEPENDENT_LOAD : 0) | MO_UNORDERED);
4690   return load;
4691 }
4692 
4693 void GraphKit::store_String_value(Node* str, Node* value) {
4694   int value_offset = java_lang_String::value_offset();
4695   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4696                                                      false, nullptr, Type::Offset(0));
4697   const TypePtr* value_field_type = string_type->add_offset(value_offset);
4698 
4699   access_store_at(str,  basic_plus_adr(str, value_offset), value_field_type,
4700                   value, TypeAryPtr::BYTES, T_OBJECT, IN_HEAP | MO_UNORDERED);
4701 }
4702 
4703 void GraphKit::store_String_coder(Node* str, Node* value) {
4704   int coder_offset = java_lang_String::coder_offset();
4705   const TypeInstPtr* string_type = TypeInstPtr::make(TypePtr::NotNull, C->env()->String_klass(),
4706                                                      false, nullptr, Type::Offset(0));
4707   const TypePtr* coder_field_type = string_type->add_offset(coder_offset);
4708 
4709   access_store_at(str, basic_plus_adr(str, coder_offset), coder_field_type,
4710                   value, TypeInt::BYTE, T_BYTE, IN_HEAP | MO_UNORDERED);
4711 }
4712 
4713 // Capture src and dst memory state with a MergeMemNode
4714 Node* GraphKit::capture_memory(const TypePtr* src_type, const TypePtr* dst_type) {
4715   if (src_type == dst_type) {
4716     // Types are equal, we don't need a MergeMemNode
4717     return memory(src_type);
4718   }
4719   MergeMemNode* merge = MergeMemNode::make(map()->memory());
4720   record_for_igvn(merge); // fold it up later, if possible
4721   int src_idx = C->get_alias_index(src_type);
4722   int dst_idx = C->get_alias_index(dst_type);
4723   merge->set_memory_at(src_idx, memory(src_idx));
4724   merge->set_memory_at(dst_idx, memory(dst_idx));
4725   return merge;
4726 }

4799   i_char->init_req(2, AddI(i_char, intcon(2)));
4800 
4801   set_control(IfFalse(iff));
4802   set_memory(st, TypeAryPtr::BYTES);
4803 }
4804 
4805 Node* GraphKit::make_constant_from_field(ciField* field, Node* obj) {
4806   if (!field->is_constant()) {
4807     return nullptr; // Field not marked as constant.
4808   }
4809   ciInstance* holder = nullptr;
4810   if (!field->is_static()) {
4811     ciObject* const_oop = obj->bottom_type()->is_oopptr()->const_oop();
4812     if (const_oop != nullptr && const_oop->is_instance()) {
4813       holder = const_oop->as_instance();
4814     }
4815   }
4816   const Type* con_type = Type::make_constant_from_field(field, holder, field->layout_type(),
4817                                                         /*is_unsigned_load=*/false);
4818   if (con_type != nullptr) {
4819     Node* con = makecon(con_type);
4820     if (field->type()->is_inlinetype()) {
4821       con = InlineTypeNode::make_from_oop(this, con, field->type()->as_inline_klass());
4822     } else if (con_type->is_inlinetypeptr()) {
4823       con = InlineTypeNode::make_from_oop(this, con, con_type->inline_klass());
4824     }
4825     return con;
4826   }
4827   return nullptr;
4828 }
4829 
4830 Node* GraphKit::maybe_narrow_object_type(Node* obj, ciKlass* type) {
4831   const Type* obj_type = obj->bottom_type();
4832   const TypeOopPtr* sig_type = TypeOopPtr::make_from_klass(type);
4833   if (obj_type->isa_oopptr() && sig_type->is_loaded() && !obj_type->higher_equal(sig_type)) {
4834     const Type* narrow_obj_type = obj_type->filter_speculative(sig_type); // keep speculative part
4835     Node* casted_obj = gvn().transform(new CheckCastPPNode(control(), obj, narrow_obj_type));
4836     obj = casted_obj;
4837   }
4838   if (sig_type->is_inlinetypeptr()) {
4839     obj = InlineTypeNode::make_from_oop(this, obj, sig_type->inline_klass());
4840   }
4841   return obj;
4842 }
< prev index next >