From 72f4e3a7f73ed453bef4a61016fe967e84bb0612 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Fri, 13 Feb 2009 14:37:11 +0000 Subject: [PATCH] re PR target/39152 (Revision 144098 breaks 416.gamess in SPEC CPU 2006) gcc/ 2009-02-13 H.J. Lu PR target/39152 * config/i386/i386.md: Restrict the new peephole2 to move between the general purpose registers. gcc/testsuite/ 2009-02-13 H.J. Lu PR target/39152 * gfortran.dg/gomp/pr39152.f90: New. From-SVN: r144158 --- gcc/ChangeLog | 6 ++++++ gcc/config/i386/i386.md | 4 +++- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/gfortran.dg/gomp/pr39152.f90 | 32 ++++++++++++++++++++++++++++++ 4 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/gfortran.dg/gomp/pr39152.f90 diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 56ef577..0100709 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2009-02-13 H.J. Lu + PR target/39152 + * config/i386/i386.md: Restrict the new peephole2 to move + between the general purpose registers. + +2009-02-13 H.J. Lu + PR target/39162 * config/i386/i386.c (type_natural_mode): Add a new argument. Return the original mode and warn ABI change if vector size diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index f4aaed6..f8a4209 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -20736,7 +20736,9 @@ [(match_dup 0) (match_operand:SI 2 "memory_operand" "")])) (clobber (reg:CC FLAGS_REG))])] - "operands[0] != operands[1]" + "operands[0] != operands[1] + && GENERAL_REGNO_P (REGNO (operands[0])) + && GENERAL_REGNO_P (REGNO (operands[1]))" [(set (match_dup 0) (match_dup 4)) (parallel [(set (match_dup 0) (match_op_dup 3 [(match_dup 0) (match_dup 1)])) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index cb75a98..7908894 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2009-02-13 H.J. Lu + PR target/39152 + * gfortran.dg/gomp/pr39152.f90: New. + +2009-02-13 H.J. Lu + PR target/39162 * gcc.target/i386/pr39162.c: New. diff --git a/gcc/testsuite/gfortran.dg/gomp/pr39152.f90 b/gcc/testsuite/gfortran.dg/gomp/pr39152.f90 new file mode 100644 index 0000000..ff088b5 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/gomp/pr39152.f90 @@ -0,0 +1,32 @@ +! { dg-do compile { target { { i?86-*-* x86_64-*-* } && ilp32 } } } +! { dg-options "-march=i486 -fopenmp -mavx -O3 -funroll-all-loops" } + + call test_workshare + +contains + subroutine test_workshare + integer :: i, j, k, l, m + double precision, dimension (64) :: d, e + integer, dimension (10) :: f, g + integer, dimension (16, 16) :: a, b, c + integer, dimension (16) :: n +!$omp parallel num_threads (4) private (j, k) +!$omp barrier +!$omp workshare + where (g .lt. 0) + f = 100 + elsewhere + where (g .gt. 6) f = f + sum (g) + f = 300 + f + end where +!$omp end workshare nowait +!$omp workshare + forall (j = 1:16, k = 1:16) b (k, j) = a (j, k) + forall (j = 2:16, n (17 - j) / 4 * 4 .ne. n (17 - j)) + n (j) = n (j - 1) * n (j) + end forall +!$omp endworkshare +!$omp end parallel + + end subroutine test_workshare +end -- 2.7.4