Comment 4 for bug 634731

Revision history for this message
In , Carrot (carrot) wrote :

In TREE level, the two stores are different statements. Only after register allocation, the two stores get same register and make the load redundant.

try_crossjump_bb tries to find same instruction sequence in all predecessors of a basic block bb, and move that code sequence to head of bb. It is triggered by this function, and the store is moved just before the load.

I tried -fgcse-las but it couldn't do the work.

(In reply to comment #2)
> -fgcse-las should do the trick. Note that PRE would do this kind of
> optimization on the tree-level, but it is disabled with -Os (so is gcse).
>
> <bb 2>:
> D.1614_2 = p2_1(D)->front;
> p1_3(D)->head = D.1614_2;
> goto <bb 4>;
>
> <bb 3>:
> D.1616_8 = D.1615_4->next;
> p1_3(D)->head = D.1616_8;
>
> <bb 4>:
> D.1615_4 = p1_3(D)->head;
>