aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Guenther <rguenther@suse.de>2008-07-30 15:43:42 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2008-07-30 15:43:42 +0000
commit5f8ecf453f015c3862113b1fa22bbf0e6b03f7b9 (patch)
tree382670be0d4d0cb5420b247b45c8d6b190270f51 /gcc
parent44bfa35b17b683a5c29dcb512b7f6ec17470ae1f (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr36967.f25
-rw-r--r--gcc/tree-predcom.c5
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;