Mercurial > hg > truffle
diff src/share/vm/opto/macro.cpp @ 3282:149bb459be66
7029167: add support for conditional card marks
Reviewed-by: iveresov, kvn
author | never |
---|---|
date | Wed, 27 Apr 2011 15:40:36 -0700 |
parents | b1a2afa37ec4 |
children | bad7ecd0b6ed |
line wrap: on
line diff
--- a/src/share/vm/opto/macro.cpp Tue Apr 26 12:14:22 2011 -0700 +++ b/src/share/vm/opto/macro.cpp Wed Apr 27 15:40:36 2011 -0700 @@ -221,9 +221,16 @@ Node *shift = p2x->unique_out(); Node *addp = shift->unique_out(); for (DUIterator_Last jmin, j = addp->last_outs(jmin); j >= jmin; --j) { - Node *st = addp->last_out(j); - assert(st->is_Store(), "store required"); - _igvn.replace_node(st, st->in(MemNode::Memory)); + Node *mem = addp->last_out(j); + if (UseCondCardMark && mem->is_Load()) { + assert(mem->Opcode() == Op_LoadB, "unexpected code shape"); + // The load is checking if the card has been written so + // replace it with zero to fold the test. + _igvn.replace_node(mem, intcon(0)); + continue; + } + assert(mem->is_Store(), "store required"); + _igvn.replace_node(mem, mem->in(MemNode::Memory)); } } else { // G1 pre/post barriers