src/share/vm/opto/graphKit.hpp

Print this page
rev 5127 : 8023597: Optimize G1 barriers code for unsafe load_store
Summary: Avoid loading old values in G1 pre-barriers for inlined unsafe load_store nodes.


 678   bool too_many_recompiles(Deoptimization::DeoptReason reason) {
 679     return C->too_many_recompiles(method(), bci(), reason);
 680   }
 681 
 682   // Returns the object (if any) which was created the moment before.
 683   Node* just_allocated_object(Node* current_control);
 684 
 685   static bool use_ReduceInitialCardMarks() {
 686     return (ReduceInitialCardMarks
 687             && Universe::heap()->can_elide_tlab_store_barriers());
 688   }
 689 
 690   // Sync Ideal and Graph kits.
 691   void sync_kit(IdealKit& ideal);
 692   void final_sync(IdealKit& ideal);
 693 
 694   // vanilla/CMS post barrier
 695   void write_barrier_post(Node *store, Node* obj,
 696                           Node* adr,  uint adr_idx, Node* val, bool use_precise);
 697 



 698   // G1 pre/post barriers
 699   void g1_write_barrier_pre(bool do_load,
 700                             Node* obj,
 701                             Node* adr,
 702                             uint alias_idx,
 703                             Node* val,
 704                             const TypeOopPtr* val_type,
 705                             Node* pre_val,
 706                             BasicType bt);
 707 
 708   void g1_write_barrier_post(Node* store,
 709                              Node* obj,
 710                              Node* adr,
 711                              uint alias_idx,
 712                              Node* val,
 713                              BasicType bt,
 714                              bool use_precise);
 715   // Helper function for g1
 716   private:
 717   void g1_mark_card(IdealKit& ideal, Node* card_adr, Node* store, uint oop_alias_idx,




 678   bool too_many_recompiles(Deoptimization::DeoptReason reason) {
 679     return C->too_many_recompiles(method(), bci(), reason);
 680   }
 681 
 682   // Returns the object (if any) which was created the moment before.
 683   Node* just_allocated_object(Node* current_control);
 684 
 685   static bool use_ReduceInitialCardMarks() {
 686     return (ReduceInitialCardMarks
 687             && Universe::heap()->can_elide_tlab_store_barriers());
 688   }
 689 
 690   // Sync Ideal and Graph kits.
 691   void sync_kit(IdealKit& ideal);
 692   void final_sync(IdealKit& ideal);
 693 
 694   // vanilla/CMS post barrier
 695   void write_barrier_post(Node *store, Node* obj,
 696                           Node* adr,  uint adr_idx, Node* val, bool use_precise);
 697 
 698   // allow reordering of pre-barrier with oop store and/or post-barrier
 699   bool can_move_pre_barrier() const;
 700 
 701   // G1 pre/post barriers
 702   void g1_write_barrier_pre(bool do_load,
 703                             Node* obj,
 704                             Node* adr,
 705                             uint alias_idx,
 706                             Node* val,
 707                             const TypeOopPtr* val_type,
 708                             Node* pre_val,
 709                             BasicType bt);
 710 
 711   void g1_write_barrier_post(Node* store,
 712                              Node* obj,
 713                              Node* adr,
 714                              uint alias_idx,
 715                              Node* val,
 716                              BasicType bt,
 717                              bool use_precise);
 718   // Helper function for g1
 719   private:
 720   void g1_mark_card(IdealKit& ideal, Node* card_adr, Node* store, uint oop_alias_idx,