mirror of git://gcc.gnu.org/git/gcc.git
re PR tree-optimization/52870 (ICE during SLP pattern matching)
gcc/ PR tree-optimization/52870 * tree-vect-patterns.c (vect_recog_widen_mult_pattern): Verify that presumed pattern statement is within the same loop or basic block. gcc/testsuite/ PR tree-optimization/52870 * gcc.dg/vect/pr52870.c: New test. From-SVN: r186272
This commit is contained in:
parent
5973ae1ac2
commit
c0d942d211
|
@ -1,3 +1,9 @@
|
||||||
|
2012-04-10 Ulrich Weigand <ulrich.weigand@linaro.org>
|
||||||
|
|
||||||
|
PR tree-optimization/52870
|
||||||
|
* tree-vect-patterns.c (vect_recog_widen_mult_pattern): Verify that
|
||||||
|
presumed pattern statement is within the same loop or basic block.
|
||||||
|
|
||||||
2012-04-10 Tristan Gingold <gingold@adacore.com>
|
2012-04-10 Tristan Gingold <gingold@adacore.com>
|
||||||
|
|
||||||
* gengtype.c (main): Make uintptr_t a known type.
|
* gengtype.c (main): Make uintptr_t a known type.
|
||||||
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
2012-04-10 Ulrich Weigand <ulrich.weigand@linaro.org>
|
||||||
|
|
||||||
|
PR tree-optimization/52870
|
||||||
|
* gcc.dg/vect/pr52870.c: New test.
|
||||||
|
|
||||||
2012-04-09 Mike Stump <mikestump@comcast.net>
|
2012-04-09 Mike Stump <mikestump@comcast.net>
|
||||||
|
|
||||||
* g++.dg/cpp0x/udlit-raw-op.C: Don't use CRLF endings.
|
* g++.dg/cpp0x/udlit-raw-op.C: Don't use CRLF endings.
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
/* { dg-do compile } */
|
||||||
|
/* { dg-options "-O1 -ftree-vectorize" } */
|
||||||
|
|
||||||
|
long
|
||||||
|
test (int *x)
|
||||||
|
{
|
||||||
|
unsigned long sx, xprec;
|
||||||
|
|
||||||
|
sx = *x >= 0 ? *x : -*x;
|
||||||
|
|
||||||
|
xprec = sx * 64;
|
||||||
|
|
||||||
|
if (sx < 16384)
|
||||||
|
foo (sx);
|
||||||
|
|
||||||
|
return xprec;
|
||||||
|
}
|
|
@ -564,6 +564,16 @@ vect_recog_widen_mult_pattern (VEC (gimple, heap) **stmts,
|
||||||
VEC (tree, heap) *dummy_vec;
|
VEC (tree, heap) *dummy_vec;
|
||||||
bool op1_ok;
|
bool op1_ok;
|
||||||
bool promotion;
|
bool promotion;
|
||||||
|
loop_vec_info loop_vinfo;
|
||||||
|
struct loop *loop = NULL;
|
||||||
|
bb_vec_info bb_vinfo;
|
||||||
|
stmt_vec_info stmt_vinfo;
|
||||||
|
|
||||||
|
stmt_vinfo = vinfo_for_stmt (last_stmt);
|
||||||
|
loop_vinfo = STMT_VINFO_LOOP_VINFO (stmt_vinfo);
|
||||||
|
bb_vinfo = STMT_VINFO_BB_VINFO (stmt_vinfo);
|
||||||
|
if (loop_vinfo)
|
||||||
|
loop = LOOP_VINFO_LOOP (loop_vinfo);
|
||||||
|
|
||||||
if (!is_gimple_assign (last_stmt))
|
if (!is_gimple_assign (last_stmt))
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -635,6 +645,11 @@ vect_recog_widen_mult_pattern (VEC (gimple, heap) **stmts,
|
||||||
|| gimple_assign_rhs_code (use_stmt) != NOP_EXPR)
|
|| gimple_assign_rhs_code (use_stmt) != NOP_EXPR)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
if (!gimple_bb (use_stmt)
|
||||||
|
|| (loop && !flow_bb_inside_loop_p (loop, gimple_bb (use_stmt)))
|
||||||
|
|| (!loop && gimple_bb (use_stmt) != BB_VINFO_BB (bb_vinfo)))
|
||||||
|
return NULL;
|
||||||
|
|
||||||
use_lhs = gimple_assign_lhs (use_stmt);
|
use_lhs = gimple_assign_lhs (use_stmt);
|
||||||
use_type = TREE_TYPE (use_lhs);
|
use_type = TREE_TYPE (use_lhs);
|
||||||
if (!INTEGRAL_TYPE_P (use_type)
|
if (!INTEGRAL_TYPE_P (use_type)
|
||||||
|
|
Loading…
Reference in New Issue