< prev index next >

src/share/vm/opto/graphKit.hpp

Print this page
rev 12906 : [mq]: gc_interface

@@ -25,10 +25,11 @@
 #ifndef SHARE_VM_OPTO_GRAPHKIT_HPP
 #define SHARE_VM_OPTO_GRAPHKIT_HPP
 
 #include "ci/ciEnv.hpp"
 #include "ci/ciMethodData.hpp"
+#include "gc/shared/c2BarrierSetCodeGen.hpp"
 #include "opto/addnode.hpp"
 #include "opto/callnode.hpp"
 #include "opto/cfgnode.hpp"
 #include "opto/compile.hpp"
 #include "opto/divnode.hpp"

@@ -101,13 +102,10 @@
   Node* longcon(jlong con)      const { return _gvn.longcon(con); }
   Node* makecon(const Type *t)  const { return _gvn.makecon(t); }
   Node* zerocon(BasicType bt)   const { return _gvn.zerocon(bt); }
   // (See also macro MakeConX in type.hpp, which uses intcon or longcon.)
 
-  // Helper for byte_map_base
-  Node* byte_map_base_node();
-
   jint  find_int_con(Node* n, jint value_if_unknown) {
     return _gvn.find_int_con(n, value_if_unknown);
   }
   jlong find_long_con(Node* n, jlong value_if_unknown) {
     return _gvn.find_long_con(n, value_if_unknown);

@@ -564,74 +562,71 @@
                         MemNode::MemOrd,
                         bool require_atomic_access = false,
                         bool unaligned = false,
                         bool mismatched = false);
 
+  // Perform decorated accesses
 
-  // All in one pre-barrier, store, post_barrier
-  // Insert a write-barrier'd store.  This is to let generational GC
-  // work; we have to flag all oop-stores before the next GC point.
-  //
-  // It comes in 3 flavors of store to an object, array, or unknown.
-  // We use precise card marks for arrays to avoid scanning the entire
-  // array. We use imprecise for object. We use precise for unknown
-  // since we don't know if we have an array or and object or even
-  // where the object starts.
-  //
-  // If val==NULL, it is taken to be a completely unknown value. QQQ
-
-  Node* store_oop(Node* ctl,
+  Node* access_store_at(Node* ctl,
                   Node* obj,   // containing obj
                   Node* adr,   // actual adress to store val at
                   const TypePtr* adr_type,
                   Node* val,
-                  const TypeOopPtr* val_type,
+                        const Type* val_type,
                   BasicType bt,
-                  bool use_precise,
-                  MemNode::MemOrd mo,
-                  bool mismatched = false);
+                        C2DecoratorSet decorators);
 
-  Node* store_oop_to_object(Node* ctl,
-                            Node* obj,   // containing obj
+  Node* access_load_at(Node* obj,   // containing obj
                             Node* adr,   // actual adress to store val at
                             const TypePtr* adr_type,
-                            Node* val,
-                            const TypeOopPtr* val_type,
+                       const Type* val_type,
                             BasicType bt,
-                            MemNode::MemOrd mo) {
-    return store_oop(ctl, obj, adr, adr_type, val, val_type, bt, false, mo);
-  }
+                       C2DecoratorSet decorators);
 
-  Node* store_oop_to_array(Node* ctl,
-                           Node* obj,   // containing obj
-                           Node* adr,   // actual adress to store val at
+  Node* access_cas_val_at(Node* ctl,
+                          Node* obj,
+                          Node* adr,
                            const TypePtr* adr_type,
-                           Node* val,
-                           const TypeOopPtr* val_type,
+                          int alias_idx,
+                          Node* expected_val,
+                          Node* new_val,
+                          const Type* value_type,
                            BasicType bt,
-                           MemNode::MemOrd mo) {
-    return store_oop(ctl, obj, adr, adr_type, val, val_type, bt, true, mo);
-  }
+                          C2DecoratorSet decorators);
 
-  // Could be an array or object we don't know at compile time (unsafe ref.)
-  Node* store_oop_to_unknown(Node* ctl,
-                             Node* obj,   // containing obj
-                             Node* adr,   // actual adress to store val at
+  Node* access_cas_bool_at(Node* ctl,
+                           Node* obj,
+                           Node* adr,
                              const TypePtr* adr_type,
-                             Node* val,
+                           int alias_idx,
+                           Node* expected_val,
+                           Node* new_val,
+                           const Type* value_type,
                              BasicType bt,
-                             MemNode::MemOrd mo,
-                             bool mismatched = false);
+                           C2DecoratorSet decorators);
+
+  Node* access_swap_at(Node* ctl,
+                       Node* obj,
+                       Node* adr,
+                       const TypePtr* adr_type,
+                       int alias_idx,
+                       Node* new_val,
+                       const Type* value_type,
+                       BasicType bt,
+                       C2DecoratorSet decorators);
 
-  // For the few case where the barriers need special help
-  void pre_barrier(bool do_load, Node* ctl,
-                   Node* obj, Node* adr, uint adr_idx, Node* val, const TypeOopPtr* val_type,
-                   Node* pre_val,
-                   BasicType bt);
+  Node* access_fetch_and_add_at(Node* ctl,
+                                Node* obj,
+                                Node* adr,
+                                const TypePtr* adr_type,
+                                int alias_idx,
+                                Node* new_val,
+                                const Type* value_type,
+                                BasicType bt,
+                                C2DecoratorSet decorators);
 
-  void post_barrier(Node* ctl, Node* store, Node* obj, Node* adr, uint adr_idx,
-                    Node* val, BasicType bt, bool use_precise);
+  void access_clone(Node* ctl, Node* src, Node* dst, Node* size, bool is_array);
 
   // Return addressing for an array element.
   Node* array_element_address(Node* ary, Node* idx, BasicType elembt,
                               // Optional constraint on the array size:
                               const TypeInt* sizetype = NULL,

@@ -749,54 +744,14 @@
   }
 
   // Returns the object (if any) which was created the moment before.
   Node* just_allocated_object(Node* current_control);
 
-  static bool use_ReduceInitialCardMarks() {
-    return (ReduceInitialCardMarks
-            && Universe::heap()->can_elide_tlab_store_barriers());
-  }
-
   // Sync Ideal and Graph kits.
   void sync_kit(IdealKit& ideal);
   void final_sync(IdealKit& ideal);
 
-  // vanilla/CMS post barrier
-  void write_barrier_post(Node *store, Node* obj,
-                          Node* adr,  uint adr_idx, Node* val, bool use_precise);
-
-  // Allow reordering of pre-barrier with oop store and/or post-barrier.
-  // Used for load_store operations which loads old value.
-  bool can_move_pre_barrier() const;
-
-  // G1 pre/post barriers
-  void g1_write_barrier_pre(bool do_load,
-                            Node* obj,
-                            Node* adr,
-                            uint alias_idx,
-                            Node* val,
-                            const TypeOopPtr* val_type,
-                            Node* pre_val,
-                            BasicType bt);
-
-  void g1_write_barrier_post(Node* store,
-                             Node* obj,
-                             Node* adr,
-                             uint alias_idx,
-                             Node* val,
-                             BasicType bt,
-                             bool use_precise);
-  // Helper function for g1
-  private:
-  void g1_mark_card(IdealKit& ideal, Node* card_adr, Node* store, uint oop_alias_idx,
-                    Node* index, Node* index_adr,
-                    Node* buffer, const TypeFunc* tf);
-
-  bool g1_can_remove_pre_barrier(PhaseTransform* phase, Node* adr, BasicType bt, uint adr_idx);
-
-  bool g1_can_remove_post_barrier(PhaseTransform* phase, Node* store, Node* adr);
-
   public:
   // Helper function to round double arguments before a call
   void round_double_arguments(ciMethod* dest_method);
   void round_double_result(ciMethod* dest_method);
 
< prev index next >