hotspot/src/share/vm/opto/idealKit.cpp
changeset 3904 007a45522a7f
parent 3268 f034e0c86895
child 3919 b15d85d98b61
equal deleted inserted replaced
3805:3cddd4882151 3904:007a45522a7f
   376   return st;
   376   return st;
   377 }
   377 }
   378 
   378 
   379 // Card mark store. Must be ordered so that it will come after the store of
   379 // Card mark store. Must be ordered so that it will come after the store of
   380 // the oop.
   380 // the oop.
   381 Node* IdealKit::storeCM(Node* ctl, Node* adr, Node *val, Node* oop_store,
   381 Node* IdealKit::storeCM(Node* ctl, Node* adr, Node *val, Node* oop_store, int oop_adr_idx,
   382                         BasicType bt,
   382                         BasicType bt,
   383                         int adr_idx) {
   383                         int adr_idx) {
   384   assert(adr_idx != Compile::AliasIdxTop, "use other store_to_memory factory" );
   384   assert(adr_idx != Compile::AliasIdxTop, "use other store_to_memory factory" );
   385   const TypePtr* adr_type = NULL;
   385   const TypePtr* adr_type = NULL;
   386   debug_only(adr_type = C->get_adr_type(adr_idx));
   386   debug_only(adr_type = C->get_adr_type(adr_idx));
   387   Node *mem = memory(adr_idx);
   387   Node *mem = memory(adr_idx);
   388 
   388 
   389   // Add required edge to oop_store, optimizer does not support precedence edges.
   389   // Add required edge to oop_store, optimizer does not support precedence edges.
   390   // Convert required edge to precedence edge before allocation.
   390   // Convert required edge to precedence edge before allocation.
   391   Node* st = new (C, 5) StoreCMNode(ctl, mem, adr, adr_type, val, oop_store);
   391   Node* st = new (C, 5) StoreCMNode(ctl, mem, adr, adr_type, val, oop_store, oop_adr_idx);
   392 
   392 
   393   st = transform(st);
   393   st = transform(st);
   394   set_memory(st, adr_idx);
   394   set_memory(st, adr_idx);
   395 
   395 
   396   return st;
   396   return st;