diff options
author | Richard Biener <rguenther@suse.de> | 2019-03-07 14:53:37 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2019-03-07 14:53:37 +0000 |
commit | 5161ffa4f5ae6133167673afc607c07e0be787f8 (patch) | |
tree | ca7ad8acb532fbc7cd99febdb4553ecd19f65ca3 /gcc | |
parent | e0f7051e44e99d7e9f6b4d187abde5c09be5c77a (diff) | |
download | gcc-5161ffa4f5ae6133167673afc607c07e0be787f8.zip gcc-5161ffa4f5ae6133167673afc607c07e0be787f8.tar.gz gcc-5161ffa4f5ae6133167673afc607c07e0be787f8.tar.bz2 |
re PR tree-optimization/89618 (Inner loop won't vectorize unless dummy statement is included)
2019-04-07 Richard Biener <rguenther@suse.de>
PR middle-end/89618
* cfgloopmanip.c (copy_loop_info): Copy forgotten fields.
* tree-inline.c (copy_loops): Simplify.
* gcc.target/i386/pr89618.c: New testcase.
From-SVN: r269458
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cfgloopmanip.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/i386/pr89618.c | 21 | ||||
-rw-r--r-- | gcc/tree-inline.c | 16 |
5 files changed, 41 insertions, 12 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index b724446..b5a7387 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-04-07 Richard Biener <rguenther@suse.de> + + PR middle-end/89618 + * cfgloopmanip.c (copy_loop_info): Copy forgotten fields. + * tree-inline.c (copy_loops): Simplify. + 2019-03-07 Martin Liska <mliska@suse.cz> * dwarf2out.c (add_AT_vms_delta): Revert function removal. diff --git a/gcc/cfgloopmanip.c b/gcc/cfgloopmanip.c index 17226b7..7eb587a 100644 --- a/gcc/cfgloopmanip.c +++ b/gcc/cfgloopmanip.c @@ -1015,10 +1015,15 @@ copy_loop_info (struct loop *loop, struct loop *target) target->any_estimate = loop->any_estimate; target->nb_iterations_estimate = loop->nb_iterations_estimate; target->estimate_state = loop->estimate_state; + target->safelen = loop->safelen; target->constraints = loop->constraints; + target->can_be_parallel = loop->can_be_parallel; target->warned_aggressive_loop_optimizations |= loop->warned_aggressive_loop_optimizations; + target->dont_vectorize = loop->dont_vectorize; + target->force_vectorize = loop->force_vectorize; target->in_oacc_kernels_region = loop->in_oacc_kernels_region; + target->unroll = loop->unroll; } /* Copies copy of LOOP as subloop of TARGET loop, placing newly diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 26f1716..d13a7db 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-04-07 Richard Biener <rguenther@suse.de> + + PR middle-end/89618 + * gcc.target/i386/pr89618.c: New testcase. + 2019-03-07 Richard Biener <rguenther@suse.de> PR tree-optimization/89595 diff --git a/gcc/testsuite/gcc.target/i386/pr89618.c b/gcc/testsuite/gcc.target/i386/pr89618.c new file mode 100644 index 0000000..11b2d28 --- /dev/null +++ b/gcc/testsuite/gcc.target/i386/pr89618.c @@ -0,0 +1,21 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -mavx512f -fdump-tree-vect-details" } */ + +void foo (int n, int *off, double *a) +{ + const int m = 32; + + for (int j = 0; j < n/m; ++j) + { + int const start = j*m; + int const end = (j+1)*m; + +#pragma GCC ivdep + for (int i = start; i < end; ++i) + { + a[off[i]] = a[i] < 0 ? a[i] : 0; + } + } +} + +/* { dg-final { scan-tree-dump "LOOP VECTORIZED" "vect" } } */ diff --git a/gcc/tree-inline.c b/gcc/tree-inline.c index 9017da8..d3e53d2 100644 --- a/gcc/tree-inline.c +++ b/gcc/tree-inline.c @@ -2666,23 +2666,15 @@ copy_loops (copy_body_data *id, /* Copy loop meta-data. */ copy_loop_info (src_loop, dest_loop); + if (dest_loop->unroll) + cfun->has_unroll = true; + if (dest_loop->force_vectorize) + cfun->has_force_vectorize_loops = true; /* Finally place it into the loop array and the loop tree. */ place_new_loop (cfun, dest_loop); flow_loop_tree_node_add (dest_parent, dest_loop); - dest_loop->safelen = src_loop->safelen; - if (src_loop->unroll) - { - dest_loop->unroll = src_loop->unroll; - cfun->has_unroll = true; - } - dest_loop->dont_vectorize = src_loop->dont_vectorize; - if (src_loop->force_vectorize) - { - dest_loop->force_vectorize = true; - cfun->has_force_vectorize_loops = true; - } if (src_loop->simduid) { dest_loop->simduid = remap_decl (src_loop->simduid, id); |