From 5f8ecf453f015c3862113b1fa22bbf0e6b03f7b9 Mon Sep 17 00:00:00 2001 From: Richard Guenther Date: Wed, 30 Jul 2008 15:43:42 +0000 Subject: [PATCH] re PR tree-optimization/36967 (segfault in is_gimple_real_type with -fpredictive-commoning -ffast-math) 2008-07-30 Richard Guenther 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 --- gcc/ChangeLog | 6 ++++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/pr36967.f | 25 +++++++++++++++++++++++++ gcc/tree-predcom.c | 5 +++-- 4 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/gfortran.dg/pr36967.f 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 + + 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 * 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 + + PR tree-optimization/36967 + * gfortran.dg/pr36967.f: New testcase. + 2008-07-30 Rafael Avila de Espindola * 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; -- 2.7.4