751 return C->too_many_recompiles(method(), bci(), reason);
752 }
753
754 // Returns the object (if any) which was created the moment before.
755 Node* just_allocated_object(Node* current_control);
756
757 static bool use_ReduceInitialCardMarks();
758
759 // Sync Ideal and Graph kits.
760 void sync_kit(IdealKit& ideal);
761 void final_sync(IdealKit& ideal);
762
763 // vanilla/CMS post barrier
764 void write_barrier_post(Node *store, Node* obj,
765 Node* adr, uint adr_idx, Node* val, bool use_precise);
766
767 // Allow reordering of pre-barrier with oop store and/or post-barrier.
768 // Used for load_store operations which loads old value.
769 bool can_move_pre_barrier() const;
770
771 // G1 pre/post barriers
772 void g1_write_barrier_pre(bool do_load,
773 Node* obj,
774 Node* adr,
775 uint alias_idx,
776 Node* val,
777 const TypeOopPtr* val_type,
778 Node* pre_val,
779 BasicType bt);
780
781 void g1_write_barrier_post(Node* store,
782 Node* obj,
783 Node* adr,
784 uint alias_idx,
785 Node* val,
786 BasicType bt,
787 bool use_precise);
788 // Helper function for g1
789 private:
790 void g1_mark_card(IdealKit& ideal, Node* card_adr, Node* store, uint oop_alias_idx,
791 Node* index, Node* index_adr,
792 Node* buffer, const TypeFunc* tf);
793
794 bool g1_can_remove_pre_barrier(PhaseTransform* phase, Node* adr, BasicType bt, uint adr_idx);
795
796 bool g1_can_remove_post_barrier(PhaseTransform* phase, Node* store, Node* adr);
797
798 public:
799 // Helper function to round double arguments before a call
800 void round_double_arguments(ciMethod* dest_method);
801 void round_double_result(ciMethod* dest_method);
802
803 // rounding for strict float precision conformance
804 Node* precision_rounding(Node* n);
805
806 // rounding for strict double precision conformance
807 Node* dprecision_rounding(Node* n);
808
809 // rounding for non-strict double stores
810 Node* dstore_rounding(Node* n);
811
812 // Helper functions for fast/slow path codes
813 Node* opt_iff(Node* region, Node* iff);
814 Node* make_runtime_call(int flags,
815 const TypeFunc* call_type, address call_addr,
816 const char* call_name,
|
751 return C->too_many_recompiles(method(), bci(), reason);
752 }
753
754 // Returns the object (if any) which was created the moment before.
755 Node* just_allocated_object(Node* current_control);
756
757 static bool use_ReduceInitialCardMarks();
758
759 // Sync Ideal and Graph kits.
760 void sync_kit(IdealKit& ideal);
761 void final_sync(IdealKit& ideal);
762
763 // vanilla/CMS post barrier
764 void write_barrier_post(Node *store, Node* obj,
765 Node* adr, uint adr_idx, Node* val, bool use_precise);
766
767 // Allow reordering of pre-barrier with oop store and/or post-barrier.
768 // Used for load_store operations which loads old value.
769 bool can_move_pre_barrier() const;
770
771 #if INCLUDE_G1GC
772 // G1 pre/post barriers
773 void g1_write_barrier_pre(bool do_load,
774 Node* obj,
775 Node* adr,
776 uint alias_idx,
777 Node* val,
778 const TypeOopPtr* val_type,
779 Node* pre_val,
780 BasicType bt);
781
782 void g1_write_barrier_post(Node* store,
783 Node* obj,
784 Node* adr,
785 uint alias_idx,
786 Node* val,
787 BasicType bt,
788 bool use_precise);
789 // Helper function for g1
790 private:
791 void g1_mark_card(IdealKit& ideal, Node* card_adr, Node* store, uint oop_alias_idx,
792 Node* index, Node* index_adr,
793 Node* buffer, const TypeFunc* tf);
794
795 bool g1_can_remove_pre_barrier(PhaseTransform* phase, Node* adr, BasicType bt, uint adr_idx);
796
797 bool g1_can_remove_post_barrier(PhaseTransform* phase, Node* store, Node* adr);
798 #endif // INCLUDE_G1GC
799
800 public:
801 // Helper function to round double arguments before a call
802 void round_double_arguments(ciMethod* dest_method);
803 void round_double_result(ciMethod* dest_method);
804
805 // rounding for strict float precision conformance
806 Node* precision_rounding(Node* n);
807
808 // rounding for strict double precision conformance
809 Node* dprecision_rounding(Node* n);
810
811 // rounding for non-strict double stores
812 Node* dstore_rounding(Node* n);
813
814 // Helper functions for fast/slow path codes
815 Node* opt_iff(Node* region, Node* iff);
816 Node* make_runtime_call(int flags,
817 const TypeFunc* call_type, address call_addr,
818 const char* call_name,
|