Mercurial > hg > graal-compiler
diff src/share/vm/opto/graphKit.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 | 26fbe81d30cf |
children | 39b01ab7035a |
line wrap: on
line diff
--- a/src/share/vm/opto/graphKit.cpp Thu Sep 10 18:18:06 2009 -0700 +++ b/src/share/vm/opto/graphKit.cpp Mon Sep 14 09:49:54 2009 -0700 @@ -1450,7 +1450,7 @@ case BarrierSet::CardTableModRef: case BarrierSet::CardTableExtension: - write_barrier_post(store, obj, adr, val, use_precise); + write_barrier_post(store, obj, adr, adr_idx, val, use_precise); break; case BarrierSet::ModRef: @@ -3165,6 +3165,7 @@ void GraphKit::write_barrier_post(Node* oop_store, Node* obj, Node* adr, + uint adr_idx, Node* val, bool use_precise) { // No store check needed if we're storing a NULL or an old object @@ -3214,7 +3215,7 @@ __ store(__ ctrl(), card_adr, zero, bt, adr_type); } else { // Specialized path for CM store barrier - __ storeCM(__ ctrl(), card_adr, zero, oop_store, bt, adr_type); + __ storeCM(__ ctrl(), card_adr, zero, oop_store, adr_idx, bt, adr_type); } // Final sync IdealKit and GraphKit. @@ -3314,6 +3315,7 @@ void GraphKit::g1_mark_card(IdealKit& ideal, Node* card_adr, Node* oop_store, + uint oop_alias_idx, Node* index, Node* index_adr, Node* buffer, @@ -3323,7 +3325,7 @@ Node* no_base = __ top(); BasicType card_bt = T_BYTE; // Smash zero into card. MUST BE ORDERED WRT TO STORE - __ storeCM(__ ctrl(), card_adr, zero, oop_store, card_bt, Compile::AliasIdxRaw); + __ storeCM(__ ctrl(), card_adr, zero, oop_store, oop_alias_idx, card_bt, Compile::AliasIdxRaw); // Now do the queue work __ if_then(index, BoolTest::ne, zero); { @@ -3435,13 +3437,13 @@ Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw); __ if_then(card_val, BoolTest::ne, zero); { - g1_mark_card(ideal, card_adr, oop_store, index, index_adr, buffer, tf); + g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); } __ end_if(); } __ end_if(); } __ end_if(); } else { // Object.clone() instrinsic uses this path. - g1_mark_card(ideal, card_adr, oop_store, index, index_adr, buffer, tf); + g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf); } // Final sync IdealKit and GraphKit.