< prev index next >

src/share/vm/opto/ifnode.cpp

Print this page

        

*** 21,30 **** --- 21,31 ---- * questions. * */ #include "precompiled.hpp" + #include "gc_implementation/shenandoah/shenandoahHeap.hpp" #include "memory/allocation.inline.hpp" #include "opto/addnode.hpp" #include "opto/cfgnode.hpp" #include "opto/connode.hpp" #include "opto/loopnode.hpp"
*** 607,616 **** --- 608,640 ---- // Give up the search at true merges return NULL; // Dead loop? Or hit root? } + bool IfNode::is_shenandoah_marking_if(PhaseTransform *phase) const { + if (!UseShenandoahGC) { + return false; + } + + if (Opcode() != Op_If) { + return false; + } + + Node* bol = in(1); + assert(bol->is_Bool(), ""); + Node* cmpx = bol->in(1); + if (bol->as_Bool()->_test._test == BoolTest::ne && + cmpx->is_Cmp() && cmpx->in(2) == phase->intcon(0) && + cmpx->in(1)->in(1)->is_shenandoah_state_load() && + cmpx->in(1)->in(2)->is_Con() && + cmpx->in(1)->in(2) == phase->intcon(ShenandoahHeap::MARKING | ShenandoahHeap::TRAVERSAL)) { + return true; + } + + return false; + } + //------------------------------filtered_int_type-------------------------------- // Return a possibly more restrictive type for val based on condition control flow for an if const TypeInt* IfNode::filtered_int_type(PhaseGVN* gvn, Node *val, Node* if_proj) { assert(if_proj &&
< prev index next >