< prev index next >

src/share/vm/opto/reg_split.cpp

Print this page

        

*** 78,90 **** const RegMask *w_o_mask; int num_regs = RegMask::num_registers(ireg); bool is_vect = RegMask::is_vector(ireg); if( w_mask->overlap( *o_mask ) && // Overlap AND ! ((num_regs == 1) // Single use or aligned || is_vect // or vector ! || !is_vect && o_mask->is_aligned_pairs()) ) { assert(!is_vect || o_mask->is_aligned_sets(num_regs), "vectors are aligned"); // Don't come here for mis-aligned doubles w_o_mask = w_mask; } else { // wide ideal mask does not overlap with o_mask // Mis-aligned doubles come here and XMM->FPR moves on x86. --- 78,90 ---- const RegMask *w_o_mask; int num_regs = RegMask::num_registers(ireg); bool is_vect = RegMask::is_vector(ireg); if( w_mask->overlap( *o_mask ) && // Overlap AND ! (num_regs == 1 // Single use or aligned || is_vect // or vector ! || (!is_vect && o_mask->is_aligned_pairs())) ) { assert(!is_vect || o_mask->is_aligned_sets(num_regs), "vectors are aligned"); // Don't come here for mis-aligned doubles w_o_mask = w_mask; } else { // wide ideal mask does not overlap with o_mask // Mis-aligned doubles come here and XMM->FPR moves on x86.
*** 1031,1041 **** // bound use if we can't rematerialize the def, or if we need the // split to form a misaligned pair. if( !umask.is_AllStack() && (int)umask.Size() <= lrgs(useidx).num_regs() && (!def->rematerialize() || ! !is_vect && umask.is_misaligned_pair())) { // These need a Split regardless of overlap or pressure // SPLIT - NO DEF - NO CISC SPILL maxlrg = split_USE(MachSpillCopyNode::Bound, def,b,n,inpidx,maxlrg,dup,false, splits,slidx); // If it wasn't split bail if (!maxlrg) { --- 1031,1041 ---- // bound use if we can't rematerialize the def, or if we need the // split to form a misaligned pair. if( !umask.is_AllStack() && (int)umask.Size() <= lrgs(useidx).num_regs() && (!def->rematerialize() || ! (!is_vect && umask.is_misaligned_pair()))) { // These need a Split regardless of overlap or pressure // SPLIT - NO DEF - NO CISC SPILL maxlrg = split_USE(MachSpillCopyNode::Bound, def,b,n,inpidx,maxlrg,dup,false, splits,slidx); // If it wasn't split bail if (!maxlrg) {
*** 1186,1196 **** bool defup = dmask.is_UP(); uint ireg = n->ideal_reg(); bool is_vect = RegMask::is_vector(ireg); // Only split at Def if this is a HRP block or bound (and spilled once) if( !n->rematerialize() && ! (((dmask.is_bound(ireg) || !is_vect && dmask.is_misaligned_pair()) && (deflrg._direct_conflict || deflrg._must_spill)) || // Check for LRG being up in a register and we are inside a high // pressure area. Spill it down immediately. (defup && is_high_pressure(b,&deflrg,insidx))) ) { assert( !n->rematerialize(), "" ); --- 1186,1196 ---- bool defup = dmask.is_UP(); uint ireg = n->ideal_reg(); bool is_vect = RegMask::is_vector(ireg); // Only split at Def if this is a HRP block or bound (and spilled once) if( !n->rematerialize() && ! (((dmask.is_bound(ireg) || (!is_vect && dmask.is_misaligned_pair())) && (deflrg._direct_conflict || deflrg._must_spill)) || // Check for LRG being up in a register and we are inside a high // pressure area. Spill it down immediately. (defup && is_high_pressure(b,&deflrg,insidx))) ) { assert( !n->rematerialize(), "" );
< prev index next >