aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorIra Rosen <irar@il.ibm.com>2010-10-22 12:48:15 +0000
committerIra Rosen <irar@gcc.gnu.org>2010-10-22 12:48:15 +0000
commit57416708a748d64486037509248f4a35e2d033cc (patch)
treec4e84e0f8706775d381154dc45a9893b74ac8bd0 /gcc
parent3020190e3e5014c78439d3f96abe1819b95f8fdd (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gcc.dg/vect/pr46126.c23
-rw-r--r--gcc/tree-vect-stmts.c2
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)