src/share/vm/opto/graphKit.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File
*** old/src/share/vm/opto/graphKit.hpp	Thu Oct 17 18:54:50 2013
--- new/src/share/vm/opto/graphKit.hpp	Thu Oct 17 18:54:49 2013

*** 384,397 **** --- 384,428 ---- bool never_see_null = false, bool safe_for_replace = false); // Check the null_seen bit. bool seems_never_null(Node* obj, ciProfileData* data); + // At a call, if profiling tells us there's a unique klass for the + // receiver, return it. + ciKlass* profile_has_unique_klass() { + ciCallProfile profile = method()->call_profile_at_bci(bci()); + if (profile.count() >= 0 && // no cast failures here + profile.has_receiver(0) && + profile.morphism() == 1) { + return profile.receiver(0); + } + return NULL; + } + + // Record profiling data exact_kls for Node n with the type system + // so that it can propagate it (speculation) + Node* record_profile_for_speculation(Node* n, ciKlass* exact_kls); + // Record profiling data from receiver profiling at an invoke with + // the type system so that it can propagate it (speculation) + Node* record_profiled_receiver_for_speculation(Node* n); + // Record profiling data from argument profiling at an invoke with + // the type system so that it can propagate it (speculation) + void record_profiled_arguments_for_speculation(ciMethod* dest_method, Bytecodes::Code bc); + // Record profiling data from argument profiling at an invoke with + // the type system so that it can propagate it (speculation) + void record_profiled_parameters_for_speculation(); + // Use the type profile to narrow an object type. Node* maybe_cast_profiled_receiver(Node* not_null_obj, ! ciProfileData* data, ! ciKlass* require_klass); ! ciKlass* require_klass, ! ciKlass* spec, + bool safe_for_replace); + + // Cast obj to type and emit guard unless we had too many traps here already + Node* maybe_cast_profiled_obj(Node* obj, + ciKlass* type, + bool not_null = false); // Cast obj to not-null on this path Node* cast_not_null(Node* obj, bool do_replace_in_map = true); // Replace all occurrences of one node by another. void replace_in_map(Node* old, Node* neww);
*** 773,783 **** --- 804,814 ---- // helper functions for the fast path/slow path idioms Node* fast_and_slow(Node* in, const Type *result_type, Node* null_result, IfNode* fast_test, Node* fast_result, address slow_call, const TypeFunc *slow_call_type, Node* slow_arg, Klass* ex_klass, Node* slow_result); // Generate an instance-of idiom. Used by both the instance-of bytecode // and the reflective instance-of call. ! Node* gen_instanceof( Node *subobj, Node* superkls ); ! Node* gen_instanceof(Node *subobj, Node* superkls, bool safe_for_replace = false); // Generate a check-cast idiom. Used by both the check-cast bytecode // and the array-store bytecode Node* gen_checkcast( Node *subobj, Node* superkls, Node* *failure_control = NULL );

src/share/vm/opto/graphKit.hpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File