Commit 1b0cfaa6 by Zdenek Dvorak Committed by Zdenek Dvorak

re PR tree-optimization/32220 (internal compiler error: in…

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
parent 554a5400
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> 2007-06-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR tree-opt/32231 PR tree-opt/32231
......
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> 2007-06-06 Andrew Pinski <andrew_pinski@playstation.sony.com>
PR tree-opt/32231 PR tree-opt/32231
! 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) ...@@ -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. */ /* Base all the ssa names in the ud and du chain of NAME on VAR. */
stmt = SSA_NAME_DEF_STMT (use); 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))); gcc_assert (single_pred_p (bb_for_stmt (stmt)));
use = PHI_ARG_DEF (stmt, 0); use = PHI_ARG_DEF (stmt, 0);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment