diff options
author | Jakub Jelinek <jakub@redhat.com> | 2012-01-30 14:48:37 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2012-01-30 14:48:37 +0100 |
commit | 2f32669918c6422f072b3b648809b792b5b909f6 (patch) | |
tree | d611f349ef72e7c39faf03dcb10d5a45d92b41d3 /gcc | |
parent | dd44dcb02211b31660a9688878d39ae9bf41aa52 (diff) | |
download | gcc-2f32669918c6422f072b3b648809b792b5b909f6.zip gcc-2f32669918c6422f072b3b648809b792b5b909f6.tar.gz gcc-2f32669918c6422f072b3b648809b792b5b909f6.tar.bz2 |
re PR tree-optimization/52046 (ICE: verify_gimple failed: invalid operands in ternary operation with -O -fexceptions -fnon-call-exceptions -ftree-vectorize)
PR tree-optimization/52046
* tree-vect-patterns.c (check_bool_pattern): Give up if
a comparison could throw.
* gcc.dg/pr52046.c: New test.
From-SVN: r183724
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/pr52046.c | 14 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.c | 7 |
4 files changed, 27 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2bec9cb..c819d1d 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,9 @@ 2012-01-30 Jakub Jelinek <jakub@redhat.com> + PR tree-optimization/52046 + * tree-vect-patterns.c (check_bool_pattern): Give up if + a comparison could throw. + PR debug/52048 * tree-ssa-tail-merge.c (local_def): Ignore debug uses. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e543e9a..36dab8f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2012-01-30 Jakub Jelinek <jakub@redhat.com> + PR tree-optimization/52046 + * gcc.dg/pr52046.c: New test. + PR debug/52048 * g++.dg/other/pr52048.C: New test. diff --git a/gcc/testsuite/gcc.dg/pr52046.c b/gcc/testsuite/gcc.dg/pr52046.c new file mode 100644 index 0000000..e72061f --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr52046.c @@ -0,0 +1,14 @@ +/* PR tree-optimization/52046 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -fexceptions -fnon-call-exceptions" } */ + +extern float a[], b[], c[], d[]; +extern int k[]; + +void +foo (void) +{ + int i; + for (i = 0; i < 1024; ++i) + k[i] = (a[i] < b[i]) | (c[i] < d[i]); +} diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index 34ac2e5..f63b4e5 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -1,5 +1,5 @@ /* Analysis Utilities for Loop Vectorization. - Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011 + Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc. Contributed by Dorit Nuzman <dorit@il.ibm.com> @@ -1967,6 +1967,11 @@ check_bool_pattern (tree var, loop_vec_info loop_vinfo) { tree vecitype, comp_vectype; + /* If the comparison can throw, then is_gimple_condexpr will be + false and we can't make a COND_EXPR/VEC_COND_EXPR out of it. */ + if (stmt_could_throw_p (def_stmt)) + return false; + comp_vectype = get_vectype_for_scalar_type (TREE_TYPE (rhs1)); if (comp_vectype == NULL_TREE) return false; |