aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.md4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/gomp/pr39152.f9032
4 files changed, 46 insertions, 1 deletions
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 <hongjiu.lu@intel.com>
+ PR target/39152
+ * config/i386/i386.md: Restrict the new peephole2 to move
+ between the general purpose registers.
+
+2009-02-13 H.J. Lu <hongjiu.lu@intel.com>
+
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 <hongjiu.lu@intel.com>
+ PR target/39152
+ * gfortran.dg/gomp/pr39152.f90: New.
+
+2009-02-13 H.J. Lu <hongjiu.lu@intel.com>
+
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