Java Solaris Communities Sun Store Join SDN My Profile Why Join?
 
Bug Database
Bug Detail
Quick Lists
Top 25 Bugs
Top 25 RFE's
Recently Closed Bugs
Printable Page Printable Page


Bug Database
Bug ID: 6805522
Votes 0
Synopsis Server VM fails with assertion (block1->start() != block2->start(),"successors have unique bcis")
Category hotspot:compiler2
Reported Against b06
Release Fixed hs15(b05), 6u14(b04) (Bug ID:2174685) , hs14(b13) (Bug ID:2175141) , 7(b54) (Bug ID:2175662)
State 10-Fix Delivered, bug
Priority: 2-High
Related Bugs 6384206
Submit Date 13-FEB-2009
Description
Server VM fails with following assertions when running with fastdebug bits:

#  Internal Error (/BUILD_AREA/jdk7/hotspot/src/share/vm/opto/parse1.cpp:1179), pid=23361, tid=21
#  Error: assert(block1->start() != block2->start(),"successors have unique bcis")
Posted Date : 2009-02-13 19:43:29.0
Work Around
N/A
Evaluation
In current codebase (apparently after some refactoring of ciTypeFlow.*),
cloning of loop head was implemented in ciTypeFlow::clone_loop_head() method,
which does the following transformation:
>       _______        ______                               _______       ______         _______
>      |       |----->|      |                             |       |     |      |------>| head's|
>  --->| head  |      | body |      is transformed to: --->| head  |---->| body |       | clone |---->
>      |_______|<-----|______|                             |_______|     |______|<------|_______|
>                                                                                    (backedge_copy)

But current implementation of ciTypeFlow::clone_loop_head() can't correctly
transform graphs like this:
>       _______        ______      
>      |       |----->|      |    
>  --->| head  |<-----| body |
>      |_______|<-----|______|     

Because only _one_ of body's successors is moved to the cloned block:
>  // tail->head becomes tail->clone
>  for (SuccIter iter(tail); !iter.done(); iter.next()) {
>    if (iter.succ() == head) {
>      iter.set_succ(clone);
>      break;
>    }
>  }

Which results in the following graph, where the "body" block breaks the
assertion, having two different successors starting at the same bci (see also
attached typeflow_run_error.log):
>       _______        ______         _______
>      |       |----->|      |------>| head  | 
>  --->| head  |      | body |       | clone |----->
>      |_______|<-----|______|<------|_______|
>                                  (backedge_copy)
Posted Date : 2009-03-23 20:51:12.0

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/ebebd376f657
Posted Date : 2009-03-23 23:36:13.0
Comments
  
  Include a link with my name & email   


PLEASE NOTE: JDK6 is formerly known as Project Mustang