From: Richard Biener Date: Tue, 19 Nov 2013 09:21:07 +0000 (+0000) Subject: re PR tree-optimization/57517 (internal compiler error: in eliminate_temp_copies... X-Git-Tag: releases/gcc-4.9.0~2666 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7906dbe42433518f7adef2ca388d7edc0a7fd246;p=thirdparty%2Fgcc.git re PR tree-optimization/57517 (internal compiler error: in eliminate_temp_copies, at tree-predcom.c:1913) 2013-11-19 Richard Biener PR tree-optimization/57517 * tree-predcom.c (combinable_refs_p): Verify the combination is always executed when the refs are. * gfortran.fortran-torture/compile/pr57517.f90: New testcase. * gcc.dg/torture/pr57517.c: Likewise. From-SVN: r205010 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d759d4c5c080..65601e8c7758 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-11-19 Richard Biener + + PR tree-optimization/57517 + * tree-predcom.c (combinable_refs_p): Verify the combination + is always executed when the refs are. + 2013-11-19 Jeff Law * tree-ssa-threadupdate.c: Include ssa-iterators.h diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7e28844d2627..06e0bf551b82 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2013-11-19 Richard Biener + + PR tree-optimization/57517 + * gfortran.fortran-torture/compile/pr57517.f90: New testcase. + * gcc.dg/torture/pr57517.c: Likewise. + 2013-11-19 Jan Hubicka * gcc.target/i386/memcpy-3.c: New testcase. diff --git a/gcc/testsuite/gcc.dg/torture/pr57517.c b/gcc/testsuite/gcc.dg/torture/pr57517.c new file mode 100644 index 000000000000..2422d8ee64ab --- /dev/null +++ b/gcc/testsuite/gcc.dg/torture/pr57517.c @@ -0,0 +1,16 @@ +/* { dg-do compile } */ + +int x[1024], y[1024], z[1024], w[1024]; +void foo (void) +{ + int i; + for (i = 1; i < 1024; ++i) + { + int a = x[i]; + int b = y[i]; + int c = x[i-1]; + int d = y[i-1]; + if (w[i]) + z[i] = (a + b) + (c + d); + } +} diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 new file mode 100644 index 000000000000..f32698aa3a67 --- /dev/null +++ b/gcc/testsuite/gfortran.fortran-torture/compile/pr57517.f90 @@ -0,0 +1,13 @@ +SUBROUTINE cal_helicity (uh, ph, phb, wavg, ims, ime, its, ite) + INTEGER, INTENT( IN ) :: ims, ime, its, ite + REAL, DIMENSION( ims:ime), INTENT( IN ) :: ph, phb, wavg + REAL, DIMENSION( ims:ime), INTENT( INOUT ) :: uh + INTEGER :: i + REAL :: zu + DO i = its, ite + zu = (ph(i ) + phb(i)) + (ph(i-1) + phb(i-1)) + IF (wavg(i) .GT. 0) THEN + uh(i) = uh(i) + zu + ENDIF + END DO +END SUBROUTINE cal_helicity diff --git a/gcc/tree-predcom.c b/gcc/tree-predcom.c index 77a15ab5523f..a43d19b08a9f 100644 --- a/gcc/tree-predcom.c +++ b/gcc/tree-predcom.c @@ -2035,7 +2035,11 @@ combinable_refs_p (dref r1, dref r2, stmt = find_common_use_stmt (&name1, &name2); - if (!stmt) + if (!stmt + /* A simple post-dominance check - make sure the combination + is executed under the same condition as the references. */ + || (gimple_bb (stmt) != gimple_bb (r1->stmt) + && gimple_bb (stmt) != gimple_bb (r2->stmt))) return false; acode = gimple_assign_rhs_code (stmt);