< prev index next >

src/hotspot/share/opto/graphKit.hpp

Print this page

386     return null_check_common(value, type, true, nullptr, _gvn.type(value)->speculative_always_null());
387   }
388 
389   // Check if value is null and abort if it is
390   Node* must_be_not_null(Node* value, bool do_replace_in_map);
391 
392   // Null check oop.  Return null-path control into (*null_control).
393   // Return a cast-not-null node which depends on the not-null control.
394   // If never_see_null, use an uncommon trap (*null_control sees a top).
395   // The cast is not valid along the null path; keep a copy of the original.
396   // If safe_for_replace, then we can replace the value with the cast
397   // in the parsing map (the cast is guaranteed to dominate the map)
398   Node* null_check_oop(Node* value, Node* *null_control,
399                        bool never_see_null = false,
400                        bool safe_for_replace = false,
401                        bool speculative = false);
402 
403   // Check the null_seen bit.
404   bool seems_never_null(Node* obj, ciProfileData* data, bool& speculating);
405 

406   void guard_klass_being_initialized(Node* klass);
407   void guard_init_thread(Node* klass);
408 
409   void clinit_barrier(ciInstanceKlass* ik, ciMethod* context);
410 
411   // Check for unique class for receiver at call
412   ciKlass* profile_has_unique_klass() {
413     ciCallProfile profile = method()->call_profile_at_bci(bci());
414     if (profile.count() >= 0 &&         // no cast failures here
415         profile.has_receiver(0) &&
416         profile.morphism() == 1) {
417       return profile.receiver(0);
418     }
419     return nullptr;
420   }
421 
422   // record type from profiling with the type system
423   Node* record_profile_for_speculation(Node* n, ciKlass* exact_kls, ProfilePtrKind ptr_kind);
424   void record_profiled_arguments_for_speculation(ciMethod* dest_method, Bytecodes::Code bc);
425   void record_profiled_parameters_for_speculation();

616                              Node* adr,
617                              const TypePtr* adr_type,
618                              int alias_idx,
619                              Node* new_val,
620                              const Type* value_type,
621                              BasicType bt,
622                              DecoratorSet decorators);
623 
624   void access_clone(Node* src, Node* dst, Node* size, bool is_array);
625 
626   // Return addressing for an array element.
627   Node* array_element_address(Node* ary, Node* idx, BasicType elembt,
628                               // Optional constraint on the array size:
629                               const TypeInt* sizetype = nullptr,
630                               // Optional control dependency (for example, on range check)
631                               Node* ctrl = nullptr);
632 
633   // Return a load of array element at idx.
634   Node* load_array_element(Node* ary, Node* idx, const TypeAryPtr* arytype, bool set_ctrl);
635 



636   //---------------- Dtrace support --------------------
637   void make_dtrace_method_entry_exit(ciMethod* method, bool is_entry);
638   void make_dtrace_method_entry(ciMethod* method) {
639     make_dtrace_method_entry_exit(method, true);
640   }
641   void make_dtrace_method_exit(ciMethod* method) {
642     make_dtrace_method_entry_exit(method, false);
643   }
644 
645   //--------------- stub generation -------------------
646  public:
647   void gen_stub(address C_function,
648                 const char *name,
649                 int is_fancy_jump,
650                 bool pass_tls,
651                 bool return_pc);
652 
653   //---------- help for generating calls --------------
654 
655   // Do a null check on the receiver as it would happen before the call to

386     return null_check_common(value, type, true, nullptr, _gvn.type(value)->speculative_always_null());
387   }
388 
389   // Check if value is null and abort if it is
390   Node* must_be_not_null(Node* value, bool do_replace_in_map);
391 
392   // Null check oop.  Return null-path control into (*null_control).
393   // Return a cast-not-null node which depends on the not-null control.
394   // If never_see_null, use an uncommon trap (*null_control sees a top).
395   // The cast is not valid along the null path; keep a copy of the original.
396   // If safe_for_replace, then we can replace the value with the cast
397   // in the parsing map (the cast is guaranteed to dominate the map)
398   Node* null_check_oop(Node* value, Node* *null_control,
399                        bool never_see_null = false,
400                        bool safe_for_replace = false,
401                        bool speculative = false);
402 
403   // Check the null_seen bit.
404   bool seems_never_null(Node* obj, ciProfileData* data, bool& speculating);
405 
406   void guard_klass_is_initialized(Node* klass);
407   void guard_klass_being_initialized(Node* klass);
408   void guard_init_thread(Node* klass);
409 
410   void clinit_barrier(ciInstanceKlass* ik, ciMethod* context);
411 
412   // Check for unique class for receiver at call
413   ciKlass* profile_has_unique_klass() {
414     ciCallProfile profile = method()->call_profile_at_bci(bci());
415     if (profile.count() >= 0 &&         // no cast failures here
416         profile.has_receiver(0) &&
417         profile.morphism() == 1) {
418       return profile.receiver(0);
419     }
420     return nullptr;
421   }
422 
423   // record type from profiling with the type system
424   Node* record_profile_for_speculation(Node* n, ciKlass* exact_kls, ProfilePtrKind ptr_kind);
425   void record_profiled_arguments_for_speculation(ciMethod* dest_method, Bytecodes::Code bc);
426   void record_profiled_parameters_for_speculation();

617                              Node* adr,
618                              const TypePtr* adr_type,
619                              int alias_idx,
620                              Node* new_val,
621                              const Type* value_type,
622                              BasicType bt,
623                              DecoratorSet decorators);
624 
625   void access_clone(Node* src, Node* dst, Node* size, bool is_array);
626 
627   // Return addressing for an array element.
628   Node* array_element_address(Node* ary, Node* idx, BasicType elembt,
629                               // Optional constraint on the array size:
630                               const TypeInt* sizetype = nullptr,
631                               // Optional control dependency (for example, on range check)
632                               Node* ctrl = nullptr);
633 
634   // Return a load of array element at idx.
635   Node* load_array_element(Node* ary, Node* idx, const TypeAryPtr* arytype, bool set_ctrl);
636 
637   //----------- runtime upcalls support ----------------
638   void install_on_method_entry_runtime_upcalls(ciMethod* method);
639 
640   //---------------- Dtrace support --------------------
641   void make_dtrace_method_entry_exit(ciMethod* method, bool is_entry);
642   void make_dtrace_method_entry(ciMethod* method) {
643     make_dtrace_method_entry_exit(method, true);
644   }
645   void make_dtrace_method_exit(ciMethod* method) {
646     make_dtrace_method_entry_exit(method, false);
647   }
648 
649   //--------------- stub generation -------------------
650  public:
651   void gen_stub(address C_function,
652                 const char *name,
653                 int is_fancy_jump,
654                 bool pass_tls,
655                 bool return_pc);
656 
657   //---------- help for generating calls --------------
658 
659   // Do a null check on the receiver as it would happen before the call to
< prev index next >