Thu, 22 Jan 2015 11:25:23 -0800
8071302: assert(!_reg_node[reg_lo] || edge_from_to(_reg_node[reg_lo], def)) failed: after block local
Summary: Add merge nodes to node to block mapping
Reviewed-by: kvn, vlivanov
src/share/vm/opto/output.cpp | file | annotate | diff | comparison | revisions | |
src/share/vm/opto/postaloc.cpp | file | annotate | diff | comparison | revisions |
1.1 --- a/src/share/vm/opto/output.cpp Fri Jan 23 15:18:50 2015 -0800 1.2 +++ b/src/share/vm/opto/output.cpp Thu Jan 22 11:25:23 2015 -0800 1.3 @@ -2473,7 +2473,7 @@ 1.4 if( iop == Op_Con ) continue; // Do not schedule Top 1.5 if( iop == Op_Node && // Do not schedule PhiNodes, ProjNodes 1.6 mach->pipeline() == MachNode::pipeline_class() && 1.7 - !n->is_SpillCopy() ) // Breakpoints, Prolog, etc 1.8 + !n->is_SpillCopy() && !n->is_MachMerge() ) // Breakpoints, Prolog, etc 1.9 continue; 1.10 break; // Funny loop structure to be sure... 1.11 }
2.1 --- a/src/share/vm/opto/postaloc.cpp Fri Jan 23 15:18:50 2015 -0800 2.2 +++ b/src/share/vm/opto/postaloc.cpp Thu Jan 22 11:25:23 2015 -0800 2.3 @@ -428,6 +428,7 @@ 2.4 // Insert the merge node into the block before the first use. 2.5 uint use_index = block->find_node(reg2defuse.at(reg).first_use()); 2.6 block->insert_node(merge, use_index++); 2.7 + _cfg.map_node_to_block(merge, block); 2.8 2.9 // Let the allocator know about the new node, use the same lrg 2.10 _lrg_map.extend(merge->_idx, lrg);