re PR tree-optimization/32220 (internal compiler error: in eliminate_temp_copies, at tree-predcom.c:1937)
PR tree-optimization/32220 * tree-predcom.c (eliminate_temp_copies): Handle the case that loop phi node is reached before defining statement. * gfortran.dg/predcom-2.f: New testcase. From-SVN: r125531
This commit is contained in:
parent
554a540059
commit
1b0cfaa6a8
4 changed files with 38 additions and 1 deletions
|
@ -1,3 +1,9 @@
|
|||
2007-06-07 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/32220
|
||||
* tree-predcom.c (eliminate_temp_copies): Handle the case that loop
|
||||
phi node is reached before defining statement.
|
||||
|
||||
2007-06-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
|
||||
PR tree-opt/32231
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2007-06-07 Zdenek Dvorak <dvorakz@suse.cz>
|
||||
|
||||
PR tree-optimization/32220
|
||||
* gfortran.dg/predcom-2.f: New testcase.
|
||||
|
||||
2007-06-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
|
||||
|
||||
PR tree-opt/32231
|
||||
|
|
20
gcc/testsuite/gfortran.dg/predcom-2.f
Normal file
20
gcc/testsuite/gfortran.dg/predcom-2.f
Normal file
|
@ -0,0 +1,20 @@
|
|||
! PR 32220, ICE when the loop is not unrolled enough to eliminate all
|
||||
! register copies
|
||||
! { dg-do compile }
|
||||
! { dg-options "-O3" }
|
||||
|
||||
subroutine derv (b,cosxy,thick)
|
||||
c
|
||||
common /shell4/xji(3,3)
|
||||
c
|
||||
dimension cosxy(6,*),
|
||||
1 thick(*),b(*)
|
||||
c
|
||||
|
||||
do 125 i=1,3
|
||||
b(k2+i)=xji(i,1) + xji(i,2) + xji(i,3)
|
||||
125 b(k3+i)=cosxy(i+3,kk) + cosxy(i,kk)
|
||||
c
|
||||
c
|
||||
return
|
||||
end
|
|
@ -1932,7 +1932,13 @@ eliminate_temp_copies (struct loop *loop, bitmap tmp_vars)
|
|||
|
||||
/* Base all the ssa names in the ud and du chain of NAME on VAR. */
|
||||
stmt = SSA_NAME_DEF_STMT (use);
|
||||
while (TREE_CODE (stmt) == PHI_NODE)
|
||||
while (TREE_CODE (stmt) == PHI_NODE
|
||||
/* In case we could not unroll the loop enough to eliminate
|
||||
all copies, we may reach the loop header before the defining
|
||||
statement (in that case, some register copies will be present
|
||||
in loop latch in the final code, corresponding to the newly
|
||||
created looparound phi nodes). */
|
||||
&& bb_for_stmt (stmt) != loop->header)
|
||||
{
|
||||
gcc_assert (single_pred_p (bb_for_stmt (stmt)));
|
||||
use = PHI_ARG_DEF (stmt, 0);
|
||||
|
|
Loading…
Add table
Reference in a new issue