aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorYuri Rumyantsev <ysrumyan@gmail.com>2016-07-18 14:30:20 +0000
committerIlya Enkovich <ienkovich@gcc.gnu.org>2016-07-18 14:30:20 +0000
commit94e136b95b163c60090dc0a711b07de03649aca1 (patch)
tree1c8a92434360b3bcfd40b883259b77ed2484d39e /gcc
parent7072df0aae0c59ae437e5cc28e4e5e5777e930ba (diff)
downloadgcc-94e136b95b163c60090dc0a711b07de03649aca1.zip
gcc-94e136b95b163c60090dc0a711b07de03649aca1.tar.gz
gcc-94e136b95b163c60090dc0a711b07de03649aca1.tar.bz2
re PR middle-end/71734 (FAIL: libgomp.fortran/simd4.f90 -O3 -g execution test)
gcc/ 2016-07-18 Yuri Rumyantsev <ysrumyan@gmail.com> PR tree-optimization/71734 * tree-ssa-loop-im.c (ref_indep_loop_p_1): Add REF_LOOP argument which contains REF, use it to check safelen, assume that safelen value must be greater 1, fix style. (ref_indep_loop_p_2): Add REF_LOOP argument. (ref_indep_loop_p): Pass LOOP as additional argument to ref_indep_loop_p_2. gcc/testsuite/ 2016-07-18 Yuri Rumyantsev <ysrumyan@gmail.com> PR tree-optimization/71734 * g++.dg/vect/pr70729.cc: Delete redundant dg options, fix style. From-SVN: r238435
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog10
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/vect/pr70729.cc17
-rw-r--r--gcc/tree-ssa-loop-im.c30
4 files changed, 40 insertions, 22 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 69d1e56..3f24fab 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,13 @@
+2016-07-18 Yuri Rumyantsev <ysrumyan@gmail.com>
+
+ PR tree-optimization/71734
+ * tree-ssa-loop-im.c (ref_indep_loop_p_1): Add REF_LOOP argument which
+ contains REF, use it to check safelen, assume that safelen value
+ must be greater 1, fix style.
+ (ref_indep_loop_p_2): Add REF_LOOP argument.
+ (ref_indep_loop_p): Pass LOOP as additional argument to
+ ref_indep_loop_p_2.
+
2016-07-18 Dominik Vogt <vogt@linux.vnet.ibm.com>
* cfgexpand.c (expand_stack_vars): Implement synamic stack space
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 00dacc4b..30e214a 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-07-18 Yuri Rumyantsev <ysrumyan@gmail.com>
+
+ PR tree-optimization/71734
+ * g++.dg/vect/pr70729.cc: Delete redundant dg options, fix style.
+
2016-07-18 Dominik Vogt <vogt@linux.vnet.ibm.com>
* gcc.target/s390/warn-dynamicstack-1.c: New test.
diff --git a/gcc/testsuite/g++.dg/vect/pr70729.cc b/gcc/testsuite/g++.dg/vect/pr70729.cc
index 0d5d353..014de8c 100644
--- a/gcc/testsuite/g++.dg/vect/pr70729.cc
+++ b/gcc/testsuite/g++.dg/vect/pr70729.cc
@@ -1,14 +1,13 @@
// { dg-do compile }
-// { dg-require-effective-target vect_simd_clones }
-// { dg-additional-options "-Ofast" }
-// { dg-additional-options "-mavx2 -fopenmp-simd" { target x86_64-*-* i?86-*-* } }
+// { dg-additional-options "-ffast-math -fopenmp-simd" }
+// { dg-additional-options "-msse2" { target x86_64-*-* i?86-*-* } }
#include <string.h>
#include <xmmintrin.h>
-inline void* my_alloc(size_t bytes) {return _mm_malloc(bytes, 128);}
-inline void my_free(void* memory) {_mm_free(memory);}
+inline void* my_alloc (size_t bytes) {return _mm_malloc (bytes, 128);}
+inline void my_free (void* memory) {_mm_free (memory);}
template <typename T>
class Vec
@@ -18,13 +17,13 @@ class Vec
public:
- Vec (int n) : isize(n) {data = (T*)my_alloc(isize*sizeof(T));}
+ Vec (int n) : isize (n) {data = (T*)my_alloc (isize*sizeof (T));}
~Vec () {my_free(data);}
Vec& operator = (const Vec& other)
{
if (this != &other)
- memcpy(data, other.data, isize*sizeof(T));
+ memcpy (data, other.data, isize*sizeof (T));
return *this;
}
@@ -67,7 +66,7 @@ struct Ss
void Ss::foo (float *in, float w)
{
#pragma omp simd
- for (int i=0; i<S_n; i++)
+ for (int i = 0; i < S_n; i++)
{
float w1 = C2[S_n + i] * w;
v1.v_i[i] += (int)w1;
@@ -75,4 +74,4 @@ void Ss::foo (float *in, float w)
}
}
-// { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } }
+// { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" { target x86_64-*-* i?86-*-* } } }
diff --git a/gcc/tree-ssa-loop-im.c b/gcc/tree-ssa-loop-im.c
index ee04826..278f60a 100644
--- a/gcc/tree-ssa-loop-im.c
+++ b/gcc/tree-ssa-loop-im.c
@@ -2109,11 +2109,12 @@ record_dep_loop (struct loop *loop, im_mem_ref *ref, bool stored_p)
loop = loop_outer (loop);
}
-/* Returns true if REF is independent on all other memory references in
- LOOP. */
+/* Returns true if REF in REF_LOOP is independent on all other memory
+ references in LOOP. */
static bool
-ref_indep_loop_p_1 (struct loop *loop, im_mem_ref *ref, bool stored_p)
+ref_indep_loop_p_1 (struct loop *ref_loop, struct loop *loop,
+ im_mem_ref *ref, bool stored_p)
{
bitmap refs_to_check;
unsigned i;
@@ -2128,13 +2129,14 @@ ref_indep_loop_p_1 (struct loop *loop, im_mem_ref *ref, bool stored_p)
if (bitmap_bit_p (refs_to_check, UNANALYZABLE_MEM_ID))
return false;
- if (loop->safelen > 0)
+ if (ref_loop->safelen > 1)
{
if (dump_file && (dump_flags & TDF_DETAILS))
{
- fprintf(dump_file,"Consider REF independent in loop#%d\n", loop->num);
- print_generic_expr(dump_file, ref->mem.ref, TDF_SLIM);
- fprintf(dump_file, "\n");
+ fprintf (dump_file,"REF is independent in ref_loop#%d\n",
+ ref_loop->num);
+ print_generic_expr (dump_file, ref->mem.ref, TDF_SLIM);
+ fprintf (dump_file, "\n");
}
return true;
}
@@ -2149,11 +2151,13 @@ ref_indep_loop_p_1 (struct loop *loop, im_mem_ref *ref, bool stored_p)
return true;
}
-/* Returns true if REF is independent on all other memory references in
- LOOP. Wrapper over ref_indep_loop_p_1, caching its results. */
+/* Returns true if REF in REF_LOOP is independent on all other memory
+ references in LOOP. Wrapper over ref_indep_loop_p_1, caching its
+ results. */
static bool
-ref_indep_loop_p_2 (struct loop *loop, im_mem_ref *ref, bool stored_p)
+ref_indep_loop_p_2 (struct loop *ref_loop, struct loop *loop,
+ im_mem_ref *ref, bool stored_p)
{
stored_p |= (ref->stored && bitmap_bit_p (ref->stored, loop->num));
@@ -2165,12 +2169,12 @@ ref_indep_loop_p_2 (struct loop *loop, im_mem_ref *ref, bool stored_p)
struct loop *inner = loop->inner;
while (inner)
{
- if (!ref_indep_loop_p_2 (inner, ref, stored_p))
+ if (!ref_indep_loop_p_2 (ref_loop, inner, ref, stored_p))
return false;
inner = inner->next;
}
- bool indep_p = ref_indep_loop_p_1 (loop, ref, stored_p);
+ bool indep_p = ref_indep_loop_p_1 (ref_loop, loop, ref, stored_p);
if (dump_file && (dump_flags & TDF_DETAILS))
fprintf (dump_file, "Querying dependencies of ref %u in loop %d: %s\n",
@@ -2209,7 +2213,7 @@ ref_indep_loop_p (struct loop *loop, im_mem_ref *ref)
{
gcc_checking_assert (MEM_ANALYZABLE (ref));
- return ref_indep_loop_p_2 (loop, ref, false);
+ return ref_indep_loop_p_2 (loop, loop, ref, false);
}
/* Returns true if we can perform store motion of REF from LOOP. */