diff options
author | Ira Rosen <ira.rosen@linaro.org> | 2011-11-09 06:41:59 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2011-11-09 06:41:59 +0000 |
commit | 9b858c880ba4ece0cc1842a7aa397783b8b7de06 (patch) | |
tree | 4ad5fb453fe35a7f61f289e8e967d5f662c7979e | |
parent | 65c5ced37b600fb1d247e63ec9117676de79f07d (diff) | |
download | gcc-9b858c880ba4ece0cc1842a7aa397783b8b7de06.zip gcc-9b858c880ba4ece0cc1842a7aa397783b8b7de06.tar.gz gcc-9b858c880ba4ece0cc1842a7aa397783b8b7de06.tar.bz2 |
re PR tree-optimization/51015 (ice in vect_determine_vectorization_factor with -O3)
PR tree-optimization/51015
* tree-vect-loop.c (vect_determine_vectorization_factor): Expect
vectype to be set for pattern def stmts.
From-SVN: r181191
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr51015.c | 19 | ||||
-rw-r--r-- | gcc/tree-vect-loop.c | 8 |
4 files changed, 35 insertions, 3 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 00f5532..1c01e18 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2011-11-09 Ira Rosen <ira.rosen@linaro.org> + + PR tree-optimization/51015 + * tree-vect-loop.c (vect_determine_vectorization_factor): Expect + vectype to be set for pattern def stmts. + 2011-11-09 Alan Modra <amodra@gmail.com> * function.c (bb_active_p): Delete. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0b7167b..80a3662 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-09 Ira Rosen <ira.rosen@linaro.org> + + PR tree-optimization/51015 + * gcc.dg/vect/pr51015.c: New test. + 2011-11-08 David S. Miller <davem@davemloft.net> * lib/target-supports.exp (check_effective_target_sparc_vis): New. diff --git a/gcc/testsuite/gcc.dg/vect/pr51015.c b/gcc/testsuite/gcc.dg/vect/pr51015.c new file mode 100644 index 0000000..bc29b0b --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr51015.c @@ -0,0 +1,19 @@ +/* { dg-do compile } */ + +typedef unsigned long long __u64; +static __u64 ext2_max_sizes[16 - 10 + 1]; + +void e2fsck_pass1() +{ + int i; + __u64 max_sizes; + + for (i = 10; i <= 16; i++) { + max_sizes = 12 + (1ULL << ((i) - 2)); + max_sizes = max_sizes + (1ULL << ((i) - 2)) * (1ULL << ((i) - 2)); + max_sizes = max_sizes + (1ULL << ((i) - 2)) * (1ULL << ((i) - 2)) * (1ULL <<((i) - 2)); + ext2_max_sizes[i - 10] = max_sizes; + } +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/tree-vect-loop.c b/gcc/tree-vect-loop.c index a209b4b..dca1c34 100644 --- a/gcc/tree-vect-loop.c +++ b/gcc/tree-vect-loop.c @@ -342,10 +342,12 @@ vect_determine_vectorization_factor (loop_vec_info loop_vinfo) if (STMT_VINFO_VECTYPE (stmt_info)) { /* The only case when a vectype had been already set is for stmts - that contain a dataref, or for "pattern-stmts" (stmts generated - by the vectorizer to represent/replace a certain idiom). */ + that contain a dataref, or for "pattern-stmts" (stmts + generated by the vectorizer to represent/replace a certain + idiom). */ gcc_assert (STMT_VINFO_DATA_REF (stmt_info) - || is_pattern_stmt_p (stmt_info)); + || is_pattern_stmt_p (stmt_info) + || pattern_def); vectype = STMT_VINFO_VECTYPE (stmt_info); } else |