< prev index next >

src/share/vm/opto/mulnode.cpp

Print this page

        

*** 28,37 **** --- 28,41 ---- #include "opto/connode.hpp" #include "opto/memnode.hpp" #include "opto/mulnode.hpp" #include "opto/phaseX.hpp" #include "opto/subnode.hpp" + #include "utilities/macros.hpp" + #if INCLUDE_ALL_GCS + #include "gc_implementation/shenandoah/c2/shenandoahSupport.hpp" + #endif // Portions of code courtesy of Clifford Click //=============================================================================
*** 471,480 **** --- 475,493 ---- if( !t2 || !t2->is_con() ) return MulNode::Ideal(phase, can_reshape); const int mask = t2->get_con(); Node *load = in(1); uint lop = load->Opcode(); + #if INCLUDE_ALL_GCS + if (UseShenandoahGC && ShenandoahBarrierC2Support::is_gc_state_load(load)) { + // Do not touch the load+mask, we would match the whole sequence exactly. + // Converting the load to LoadUB/LoadUS would mismatch and waste a register + // on the barrier fastpath. + return NULL; + } + #endif + // Masking bits off of a Character? Hi bits are already zero. if( lop == Op_LoadUS && (mask & 0xFFFF0000) ) // Can we make a smaller mask? return new (phase->C) AndINode(load,phase->intcon(mask&0xFFFF));
< prev index next >