< prev index next >

src/share/vm/opto/phaseX.cpp

Print this page

        

*** 32,41 **** --- 32,42 ---- #include "opto/machnode.hpp" #include "opto/opcodes.hpp" #include "opto/phaseX.hpp" #include "opto/regalloc.hpp" #include "opto/rootnode.hpp" + #include "opto/shenandoahSupport.hpp" //============================================================================= #define NODE_HASH_MINIMUM_SIZE 255 //------------------------------NodeHash--------------------------------------- NodeHash::NodeHash(uint est_max_size) :
*** 563,572 **** --- 564,605 ---- } } #endif + bool PhaseTransform::eqv(const Node* n1, const Node* n2) const { + if (UseShenandoahGC) { + + if (n1 == n2) return true; + + if (n1 == NULL || n2 == NULL) return false; + + if (n1->is_AddP() && n2->is_AddP()) { + Node* addp1 = n1->as_AddP(); + Node* base1 = addp1->in(AddPNode::Base); + Node* addr1 = addp1->in(AddPNode::Address); + Node* offs1 = addp1->in(AddPNode::Offset); + + Node* addp2 = n2->as_AddP(); + Node* base2 = addp2->in(AddPNode::Base); + Node* addr2 = addp2->in(AddPNode::Address); + Node* offs2 = addp2->in(AddPNode::Offset); + + if (base1 == addr1 && base2 == addr2) { + + addr1 = ShenandoahBarrierNode::skip_through_barrier(addr1); + addr2 = ShenandoahBarrierNode::skip_through_barrier(addr2); + + if (addr1 == addr2 && offs1 == offs2) return true; + } + + } + return false; + } else { + return n1 == n2; + } + } //============================================================================= //------------------------------PhaseValues------------------------------------ // Set minimum table size to "255" PhaseValues::PhaseValues( Arena *arena, uint est_max_size ) : PhaseTransform(arena, GVN), _table(arena, est_max_size) {
*** 1188,1197 **** --- 1221,1233 ---- // If 'k' computes a constant, replace it with a constant if (t->singleton() && !k->is_Con()) { NOT_PRODUCT(set_progress();) Node* con = makecon(t); // Make a constant add_users_to_worklist(k); + if (k->Opcode() == Op_ShenandoahWriteBarrier) { + assert(con->is_top(), "can only replace barrier with top"); + } subsume_node(k, con); // Everybody using k now uses con return con; } // Now check for Identities
< prev index next >