comparison src/share/vm/opto/idealKit.cpp @ 985:685e959d09ea

6877254: Server vm crashes with no branches off of store slice" when run with CMS and UseSuperWord(default) Summary: design StoreCMNode::Ideal to promote its oopStore input if the input is a MergeMem node Reviewed-by: kvn, never
author cfang
date Mon, 14 Sep 2009 09:49:54 -0700
parents fc4be448891f
children a1423fe86a18
comparison
equal deleted inserted replaced
958:c7e94e8fff43 985:685e959d09ea
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;