diff options
author | Richard Biener <rguenther@suse.de> | 2013-12-06 09:23:07 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2013-12-06 09:23:07 +0000 |
commit | 95b3eff34ea98fcd67460f208004f5baddc29f0b (patch) | |
tree | d490ce409763d3445fb2ba74ac78008e8d55f526 /gcc/tree-vectorizer.h | |
parent | 3fc92e702e2a3a109cacb81416557d550e26ce44 (diff) | |
download | gcc-95b3eff34ea98fcd67460f208004f5baddc29f0b.zip gcc-95b3eff34ea98fcd67460f208004f5baddc29f0b.tar.gz gcc-95b3eff34ea98fcd67460f208004f5baddc29f0b.tar.bz2 |
re PR tree-optimization/59058 (wrong code at -O3 on x86_64-linux-gnu (affecting gcc 4.6 to trunk))
2013-12-06 Richard Biener <rguenther@suse.de>
PR tree-optimization/59058
* tree-vectorizer.h (struct _loop_vec_info): Add num_itersm1
member.
(LOOP_VINFO_NITERSM1): New macro.
* tree-vect-loop-manip.c (slpeel_tree_peel_loop_to_edge): Express
the vector loop entry test in terms of scalar latch executions.
(vect_do_peeling_for_alignment): Update LOOP_VINFO_NITERSM1.
* tree-vect-loop.c (vect_get_loop_niters): Also return the
number of latch executions.
(new_loop_vec_info): Initialize LOOP_VINFO_NITERSM1.
(vect_analyze_loop_form): Likewise.
(vect_generate_tmps_on_preheader): Compute the number of
vectorized iterations differently.
* gcc.dg/torture/pr59058.c: New testcase.
From-SVN: r205730
Diffstat (limited to 'gcc/tree-vectorizer.h')
-rw-r--r-- | gcc/tree-vectorizer.h | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gcc/tree-vectorizer.h b/gcc/tree-vectorizer.h index 4427d6a..b4daf0a 100644 --- a/gcc/tree-vectorizer.h +++ b/gcc/tree-vectorizer.h @@ -250,8 +250,11 @@ typedef struct _loop_vec_info { /* The loop basic blocks. */ basic_block *bbs; + /* Number of latch executions. */ + tree num_itersm1; /* Number of iterations. */ tree num_iters; + /* Number of iterations of the original loop. */ tree num_iters_unchanged; /* Minimum number of iterations below which vectorization is expected to @@ -349,9 +352,11 @@ typedef struct _loop_vec_info { /* Access Functions. */ #define LOOP_VINFO_LOOP(L) (L)->loop #define LOOP_VINFO_BBS(L) (L)->bbs +#define LOOP_VINFO_NITERSM1(L) (L)->num_itersm1 #define LOOP_VINFO_NITERS(L) (L)->num_iters -/* Since LOOP_VINFO_NITERS can change after prologue peeling - retain total unchanged scalar loop iterations for cost model. */ +/* Since LOOP_VINFO_NITERS and LOOP_VINFO_NITERSM1 can change after + prologue peeling retain total unchanged scalar loop iterations for + cost model. */ #define LOOP_VINFO_NITERS_UNCHANGED(L) (L)->num_iters_unchanged #define LOOP_VINFO_COST_MODEL_MIN_ITERS(L) (L)->min_profitable_iters #define LOOP_VINFO_VECTORIZABLE_P(L) (L)->vectorizable |