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
|