https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117375

--- Comment #7 from qinzhao at gcc dot gnu.org ---
The reason for the ICE is:

The destination of the code movement due to tree sinking might not be the
immediate destination block of the block in which the statement locates. 

for example:
        B2
       /  \
      V    \
     B3     \
     / \     \
    V   \---->V
   B4         B7

A statement in B2 will be sinked to B4, which is not the immediate destination
block of B2, as a result, find_edge (B2,B4) will return NULL.

In order to resolve this issue, we need to find the edge chain from B2 to B4,
i.e, both the edges B2->B3, and B3->B4 are identified.  and both the conditions
in B2 and B3 need to be recorded as move_history of the statement.

Reply via email to