diff options
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/graphite-scop-detection.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr68715-2.c | 35 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/graphite/pr68715.c | 36 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/graphite/pr68715.f90 | 31 |
6 files changed, 118 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index d8f2eea..e7c759f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2016-03-16 Tom de Vries <tom@codesourcery.com> + PR tree-optimization/68715 + * graphite-scop-detection.c (scop_detection::merge_sese): Add missing + single_pred_p test. + +2016-03-16 Tom de Vries <tom@codesourcery.com> + PR tree-optimization/68809 * graphite-scop-detection.c (same_close_phi_node): Test if result types are the same. diff --git a/gcc/graphite-scop-detection.c b/gcc/graphite-scop-detection.c index e20baa10..7615842 100644 --- a/gcc/graphite-scop-detection.c +++ b/gcc/graphite-scop-detection.c @@ -836,7 +836,9 @@ scop_detection::merge_sese (sese_l first, sese_l second) const { /* Find the first empty succ (with single exit) of combined.exit. */ basic_block imm_succ = combined.exit->dest; - if (single_succ_p (imm_succ) && trivially_empty_bb_p (imm_succ)) + if (single_succ_p (imm_succ) + && single_pred_p (imm_succ) + && trivially_empty_bb_p (imm_succ)) combined.exit = single_succ_edge (imm_succ); else { diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 90e19ee..8d2546c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,12 @@ 2016-03-16 Tom de Vries <tom@codesourcery.com> + PR tree-optimization/68715 + * gcc.dg/graphite/pr68715-2.c: New test. + * gcc.dg/graphite/pr68715.c: New test. + * gfortran.dg/graphite/pr68715.f90: New test. + +2016-03-16 Tom de Vries <tom@codesourcery.com> + PR tree-optimization/68809 * gcc.dg/graphite/pr68809-2.c: New test. * gcc.dg/graphite/pr68809.c: New test. diff --git a/gcc/testsuite/gcc.dg/graphite/pr68715-2.c b/gcc/testsuite/gcc.dg/graphite/pr68715-2.c new file mode 100644 index 0000000..270d948 --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr68715-2.c @@ -0,0 +1,35 @@ +/* { dg-do compile } */ +/* { dg-options "-Ofast -floop-interchange" } */ + +int a, b, c, d, f, g; +int e[1], h[1]; +void fn2 (); +void fn3 (); +void +fn1 () +{ + fn2 (); + b = 0; + for (; b < 10; b++) + ; +} + +void +fn2 () +{ + if (a) + { + fn3 (); + c = d; + } +} + +void +fn3 () +{ + for (; g; g++) + e[g] = 2; + if (f) + for (; g; g++) + h[g] = 5; +} diff --git a/gcc/testsuite/gcc.dg/graphite/pr68715.c b/gcc/testsuite/gcc.dg/graphite/pr68715.c new file mode 100644 index 0000000..14da2fb --- /dev/null +++ b/gcc/testsuite/gcc.dg/graphite/pr68715.c @@ -0,0 +1,36 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -floop-interchange" } */ + +int a[1], c[1]; +int b, d, e; + +void +fn1 (int p1) +{ + for (;;) + ; +} + +int +fn3 () +{ + for (; e; e++) + c[e] = 2; + for (; d; d--) + a[d] = 8; + return 0; +} + +int fn5 (int); + +int +fn2 () +{ + fn3 (); +} + +void +fn4 () +{ + fn1 (b || fn5 (fn2 ())); +} diff --git a/gcc/testsuite/gfortran.dg/graphite/pr68715.f90 b/gcc/testsuite/gfortran.dg/graphite/pr68715.f90 new file mode 100644 index 0000000..c011756 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/graphite/pr68715.f90 @@ -0,0 +1,31 @@ +! { dg-do compile } +! { dg-options "-floop-nest-optimize -O1" } + +SUBROUTINE se_core_core_interaction(calculate_forces) + INTEGER, PARAMETER :: dp=8 + LOGICAL, INTENT(in) :: calculate_forces + REAL(KIND=dp), DIMENSION(3) :: force_ab, rij + LOGICAL :: lfoo,kfoo,mfoo,nfoo,ffoo + INTEGER, PARAMETER :: mi2=42 + CALL dummy(lfoo,kfoo,mfoo,nfoo,method_id,core_core) + IF (lfoo) THEN + DO WHILE (ffoo()) + IF (lfoo) CYCLE + IF (kfoo) CYCLE + dr1 = DOT_PRODUCT(rij,rij) + IF (dr1 > rij_threshold) THEN + SELECT CASE (method_id) + CASE (mi2) + IF (calculate_forces) THEN + CALL dummy2(force_ab) + IF (nfoo) THEN + force_ab = force_ab + core_core*dr3inv + END IF + END IF + END SELECT + END IF + enuclear = enuclear + enucij + END DO + CALL dummy3(enuclear) + END IF +END SUBROUTINE se_core_core_interaction |