diff options
author | Ira Rosen <irar@il.ibm.com> | 2010-10-22 12:48:15 +0000 |
---|---|---|
committer | Ira Rosen <irar@gcc.gnu.org> | 2010-10-22 12:48:15 +0000 |
commit | 57416708a748d64486037509248f4a35e2d033cc (patch) | |
tree | c4e84e0f8706775d381154dc45a9893b74ac8bd0 /gcc | |
parent | 3020190e3e5014c78439d3f96abe1819b95f8fdd (diff) | |
download | gcc-57416708a748d64486037509248f4a35e2d033cc.zip gcc-57416708a748d64486037509248f4a35e2d033cc.tar.gz gcc-57416708a748d64486037509248f4a35e2d033cc.tar.bz2 |
re PR tree-optimization/46126 (Revision 165777 failed to build 254.gap in SPEC CPU 2K)
PR tree-optimization/46126
* tree-vect-stmts.c (vect_analyze_stmt): Pass NODE to
vectorizable_shift in case of basic block vectorization.
From-SVN: r165825
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gcc.dg/vect/pr46126.c | 23 | ||||
-rw-r--r-- | gcc/tree-vect-stmts.c | 2 |
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 32dc3d3..4f9fc04 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2010-10-22 Ira Rosen <irar@il.ibm.com> + + PR tree-optimization/46126 + * tree-vect-stmts.c (vect_analyze_stmt): Pass NODE to + vectorizable_shift in case of basic block vectorization. + 2010-10-22 Joseph Myers <joseph@codesourcery.com> * target.h (enum opt_levels, struct default_options): New. diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b279dc3..1ca8a4a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-10-22 Ira Rosen <irar@il.ibm.com> + + PR tree-optimization/46126 + * gcc.dg/vect/pr46126.c: New. + 2010-10-21 Iain Sandoe <iains@gcc.gnu.org> Based on the CFString implementation in FSF apple/trunk branch. diff --git a/gcc/testsuite/gcc.dg/vect/pr46126.c b/gcc/testsuite/gcc.dg/vect/pr46126.c new file mode 100644 index 0000000..6eb178aa --- /dev/null +++ b/gcc/testsuite/gcc.dg/vect/pr46126.c @@ -0,0 +1,23 @@ +/* { dg-do compile } */ + +typedef struct TypHeader { + struct TypHeader * * ptr; + unsigned char type; + } * TypHandle; + extern TypHandle (* EvTab[81]) ( TypHandle hd ); + TypHandle FunApplyRel ( TypHandle hdCall ) + { + TypHandle hdApp; + TypHandle * ptApp; + long lp; + long lc; + hdApp = ((long)(((TypHandle*)((hdCall)->ptr))[1])&1 ? +(((TypHandle*)((hdCall)->ptr))[1]) : (* +EvTab[(((long)(((TypHandle*)((hdCall)->ptr))[1]) & 1) ? 1 : +((((TypHandle*)((hdCall)->ptr))[1])->type))])((((TypHandle*)((hdCall)->ptr))[1]))); + ptApp = ((TypHandle*)((hdApp)->ptr)); + ptApp[1] = ((TypHandle) (((long)(lp) << 2) + 1)); + ptApp[2] = ((TypHandle) (((long)(lc) << 2) + 1)); + } + +/* { dg-final { cleanup-tree-dump "vect" } } */ diff --git a/gcc/tree-vect-stmts.c b/gcc/tree-vect-stmts.c index 3617ec3..01fd5cf 100644 --- a/gcc/tree-vect-stmts.c +++ b/gcc/tree-vect-stmts.c @@ -4663,7 +4663,7 @@ vect_analyze_stmt (gimple stmt, bool *need_to_vectorize, slp_tree node) else { if (bb_vinfo) - ok = (vectorizable_shift (stmt, NULL, NULL, NULL) + ok = (vectorizable_shift (stmt, NULL, NULL, node) || vectorizable_operation (stmt, NULL, NULL, node) || vectorizable_assignment (stmt, NULL, NULL, node) || vectorizable_load (stmt, NULL, NULL, node, NULL) |