comparison src/share/vm/opto/block.cpp @ 566:91263420e1c6

6791852: assert(b->_nodes[insidx] == n,"got insidx set incorrectly") Summary: Move the CreateEx up before each round of IFG construction Reviewed-by: never, phh
author kvn
date Fri, 06 Feb 2009 13:31:03 -0800
parents 72c5366e5d86
children 0fbdb4381b99 523ded093c31
comparison
equal deleted inserted replaced
565:7fe62bb75bf4 566:91263420e1c6
878 _blocks[i]->dump_head(&_bbs); 878 _blocks[i]->dump_head(&_bbs);
879 } 879 }
880 } 880 }
881 881
882 void PhaseCFG::verify( ) const { 882 void PhaseCFG::verify( ) const {
883 #ifdef ASSERT
883 // Verify sane CFG 884 // Verify sane CFG
884 for( uint i = 0; i < _num_blocks; i++ ) { 885 for( uint i = 0; i < _num_blocks; i++ ) {
885 Block *b = _blocks[i]; 886 Block *b = _blocks[i];
886 uint cnt = b->_nodes.size(); 887 uint cnt = b->_nodes.size();
887 uint j; 888 uint j;
892 n->as_Mach()->ideal_Opcode() == Op_CreateEx ) { 893 n->as_Mach()->ideal_Opcode() == Op_CreateEx ) {
893 assert( j == 1 || b->_nodes[j-1]->is_Phi(), 894 assert( j == 1 || b->_nodes[j-1]->is_Phi(),
894 "CreateEx must be first instruction in block" ); 895 "CreateEx must be first instruction in block" );
895 } 896 }
896 for( uint k = 0; k < n->req(); k++ ) { 897 for( uint k = 0; k < n->req(); k++ ) {
897 Node *use = n->in(k); 898 Node *def = n->in(k);
898 if( use && use != n ) { 899 if( def && def != n ) {
899 assert( _bbs[use->_idx] || use->is_Con(), 900 assert( _bbs[def->_idx] || def->is_Con(),
900 "must have block; constants for debug info ok" ); 901 "must have block; constants for debug info ok" );
902 // Verify that instructions in the block is in correct order.
903 // Uses must follow their definition if they are at the same block.
904 // Mostly done to check that MachSpillCopy nodes are placed correctly
905 // when CreateEx node is moved in build_ifg_physical().
906 if( _bbs[def->_idx] == b &&
907 !(b->head()->is_Loop() && n->is_Phi()) &&
908 // See (+++) comment in reg_split.cpp
909 !(n->jvms() != NULL && n->jvms()->is_monitor_use(k)) ) {
910 assert( b->find_node(def) < j, "uses must follow definitions" );
911 }
901 } 912 }
902 } 913 }
903 } 914 }
904 915
905 j = b->end_idx(); 916 j = b->end_idx();
912 } 923 }
913 else if( bp->is_Mach() && bp->as_Mach()->ideal_Opcode() == Op_If ) { 924 else if( bp->is_Mach() && bp->as_Mach()->ideal_Opcode() == Op_If ) {
914 assert( b->_num_succs == 2, "Conditional branch must have two targets"); 925 assert( b->_num_succs == 2, "Conditional branch must have two targets");
915 } 926 }
916 } 927 }
928 #endif
917 } 929 }
918 #endif 930 #endif
919 931
920 //============================================================================= 932 //=============================================================================
921 //------------------------------UnionFind-------------------------------------- 933 //------------------------------UnionFind--------------------------------------