src/share/vm/opto/graphKit.cpp
Print this page
rev 5363 : imported patch filtering.diff
rev 5364 : [mq]: graphkit-comment
*** 3711,3721 ****
Node* tls = __ thread(); // ThreadLocalStorage
Node* no_base = __ top();
float likely = PROB_LIKELY(0.999);
float unlikely = PROB_UNLIKELY(0.999);
! Node* zero = __ ConI(0);
Node* zeroX = __ ConX(0);
// Get the alias_index for raw card-mark memory
const TypePtr* card_type = TypeRawPtr::BOTTOM;
--- 3711,3722 ----
Node* tls = __ thread(); // ThreadLocalStorage
Node* no_base = __ top();
float likely = PROB_LIKELY(0.999);
float unlikely = PROB_UNLIKELY(0.999);
! Node* young_card = __ ConI((jint)G1SATBCardTableModRefBS::g1_young_card_val());
! Node* dirty_card = __ ConI((jint)CardTableModRefBS::dirty_card_val());
Node* zeroX = __ ConX(0);
// Get the alias_index for raw card-mark memory
const TypePtr* card_type = TypeRawPtr::BOTTOM;
*** 3767,3781 ****
// Ok must mark the card if not already dirty
// load the original value of the card
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, 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, alias_idx, index, index_adr, buffer, tf);
}
--- 3768,3790 ----
// Ok must mark the card if not already dirty
// load the original value of the card
Node* card_val = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw);
! __ if_then(card_val, BoolTest::ne, young_card); {
! sync_kit(ideal);
! // Use Op_MemBarVolatile to achieve the effect of a StoreLoad barrier.
! insert_mem_bar(Op_MemBarVolatile, oop_store);
! __ sync_kit(this);
!
! Node* card_val_reload = __ load(__ ctrl(), card_adr, TypeInt::INT, T_BYTE, Compile::AliasIdxRaw);
! __ if_then(card_val_reload, BoolTest::ne, dirty_card); {
g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf);
} __ end_if();
} __ end_if();
} __ end_if();
+ } __ end_if();
} else {
// Object.clone() instrinsic uses this path.
g1_mark_card(ideal, card_adr, oop_store, alias_idx, index, index_adr, buffer, tf);
}