diff options
author | Richard Guenther <rguenther@suse.de> | 2008-07-30 15:43:42 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2008-07-30 15:43:42 +0000 |
commit | 5f8ecf453f015c3862113b1fa22bbf0e6b03f7b9 (patch) | |
tree | 382670be0d4d0cb5420b247b45c8d6b190270f51 /gcc | |
parent | 44bfa35b17b683a5c29dcb512b7f6ec17470ae1f (diff) | |
download | gcc-5f8ecf453f015c3862113b1fa22bbf0e6b03f7b9.zip gcc-5f8ecf453f015c3862113b1fa22bbf0e6b03f7b9.tar.gz gcc-5f8ecf453f015c3862113b1fa22bbf0e6b03f7b9.tar.bz2 |
re PR tree-optimization/36967 (segfault in is_gimple_real_type with -fpredictive-commoning -ffast-math)
2008-07-30 Richard Guenther <rguenther@suse.de>
PR tree-optimization/36967
* tree-predcom.c (remove_stmt): Use gimple_assign_ssa_name_copy_p.
Release defs of statements we remove.
* gfortran.dg/pr36967.f: New testcase.
From-SVN: r138318
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/pr36967.f | 25 | ||||
-rw-r--r-- | gcc/tree-predcom.c | 5 |
4 files changed, 39 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 4e6acf0..474cc2c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2008-07-30 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/36967 + * tree-predcom.c (remove_stmt): Use gimple_assign_ssa_name_copy_p. + Release defs of statements we remove. + 2008-07-30 Nathan Froyd <froydnj@codesourcery.com> * config/arm/arm.c (arm_expand_prologue): Use 0-length rtvec diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c53755b..cdfa294 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2008-07-30 Richard Guenther <rguenther@suse.de> + + PR tree-optimization/36967 + * gfortran.dg/pr36967.f: New testcase. + 2008-07-30 Rafael Avila de Espindola <espindola@google.com> * gcc.dg/visibility-14.c: New test. diff --git a/gcc/testsuite/gfortran.dg/pr36967.f b/gcc/testsuite/gfortran.dg/pr36967.f new file mode 100644 index 0000000..4f85897 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/pr36967.f @@ -0,0 +1,25 @@ +! { dg-options "-O2 -fpredictive-commoning" } + subroutine foo(x,y,n) + integer n + real*8 y(n,n,n),x(n,n,n) + integer k, j, i + do k = 2, n-1 + do j = 2, n-1 + do I = 2, n-1 + y(i,j,k) = y(i,j,k) + + + (x(i-1,j-1,k) + + + x(i,j-1,k-1) + + + x(i,j+1,k-1) + + + x(i,j+1,k+1) + + + x(i+1,j,k+1)) + + + (x(i-1,j-1,k-1) + + + x(i+1,j-1,k-1) + + + x(i-1,j+1,k-1) + + + x(i+1,j+1,k-1) + + + x(i-1,j+1,k+1) + + + x(i+1,j+1,k+1)) + enddo + enddo + enddo + return + end diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c index 63911b3..94245a4 100644 --- a/gcc/tree-predcom.c +++ b/gcc/tree-predcom.c @@ -1707,7 +1707,7 @@ remove_stmt (gimple stmt) remove_phi_node (&psi, true); if (!next - || !gimple_assign_copy_p (next) + || !gimple_assign_ssa_name_copy_p (next) || gimple_assign_rhs1 (next) != name) return; @@ -1727,9 +1727,10 @@ remove_stmt (gimple stmt) mark_virtual_ops_for_renaming (stmt); gsi_remove (&bsi, true); + release_defs (stmt); if (!next - || !gimple_assign_copy_p (next) + || !gimple_assign_ssa_name_copy_p (next) || gimple_assign_rhs1 (next) != name) return; |