diff options
author | Richard Guenther <rguenther@suse.de> | 2010-12-02 11:47:12 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2010-12-02 11:47:12 +0000 |
commit | 52bd463c629b5c0c30b6c95c90aa8dc8199fc84e (patch) | |
tree | 192198bbf94e4e391a0d0d68c4409f9a811678b5 /gcc | |
parent | bd632dbdf823bf17aecf95d52f0df5e732e9901a (diff) | |
download | gcc-52bd463c629b5c0c30b6c95c90aa8dc8199fc84e.zip gcc-52bd463c629b5c0c30b6c95c90aa8dc8199fc84e.tar.gz gcc-52bd463c629b5c0c30b6c95c90aa8dc8199fc84e.tar.bz2 |
re PR tree-optimization/46663 (ICE: SIGSEGV in vect_recog_pow_pattern (gimple.h:2055) with -O -fexceptions -ftree-vectorize)
PR tree-optimization/46663
* tree-vect-patterns.c (vect_recog_pow_pattern): Check that
FUNCTION_DECL exists and that it's a builtin.
Co-Authored-By: Ira Rosen <irar@il.ibm.com>
From-SVN: r167366
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr46663.c | 14 | ||||
-rw-r--r-- | gcc/tree-vect-patterns.c | 3 |
4 files changed, 30 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f4302dc..7d7e191 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2010-12-02 Richard Guenther <rguenther@suse.de> + Ira Rosen <irar@il.ibm.com> + + PR tree-optimization/46663 + * tree-vect-patterns.c (vect_recog_pow_pattern): Check that + FUNCTION_DECL exists and that it's a builtin. + 2010-12-02 Jie Zhang <jie@codesourcery.com> PR middle-end/46674 diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d70e0b1..e0ca352 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2010-12-02 Richard Guenther <rguenther@suse.de> + Ira Rosen <irar@il.ibm.com> + + PR tree-optimization/46663 + * gcc.dg/vect/pr46663.c: New test. + 2010-12-02 Jie Zhang <jie@codesourcery.com> PR middle-end/46674 diff --git a/gcc/testsuite/gcc.dg/vect/pr46663.c b/gcc/testsuite/gcc.dg/vect/pr46663.c new file mode 100644 index 0000000..42a1ffb --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr46663.c @@ -0,0 +1,14 @@ +/* { dg-do compile } */ +/* { dg-options "-O -ftree-vectorize -fdump-tree-vect-details -fexceptions" } */ + +typedef __attribute__ ((const)) int (*bart) (void); + +int foo (bart bar, int m) +{ + int i, j = 0; + for (i = 0; i < m; i++) + j += bar(); + return j; +} + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/tree-vect-patterns.c b/gcc/tree-vect-patterns.c index b55bacb..d405304 100644 --- a/gcc/tree-vect-patterns.c +++ b/gcc/tree-vect-patterns.c @@ -472,6 +472,9 @@ vect_recog_pow_pattern (gimple last_stmt, tree *type_in, tree *type_out) return NULL; fn = gimple_call_fndecl (last_stmt); + if (fn == NULL_TREE || DECL_BUILT_IN_CLASS (fn) != BUILT_IN_NORMAL) + return NULL; + switch (DECL_FUNCTION_CODE (fn)) { case BUILT_IN_POWIF: |