re PR tree-optimization/48975 (ICE in execute_cse_reciprocals() with -fno-tree-slp-vectorize)

PR tree-optimization/48975
	* tree-if-conv.c (combine_blocks): Call free_bb_predicate
	on all bbs here and free and clear ifc_bbs at the end.

	* gcc.dg/pr48975.c: New test.

From-SVN: r173709
This commit is contained in:
Jakub Jelinek 2011-05-12 19:44:23 +02:00 committed by Jakub Jelinek
parent 13157033d4
commit c2b5fc8de6
4 changed files with 34 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2011-05-12 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48975
* tree-if-conv.c (combine_blocks): Call free_bb_predicate
on all bbs here and free and clear ifc_bbs at the end.
2011-05-12 Richard Guenther <rguenther@suse.de> 2011-05-12 Richard Guenther <rguenther@suse.de>
* gimple.c (gtc_visit): Compare TREE_ADDRESSABLE, handle * gimple.c (gtc_visit): Compare TREE_ADDRESSABLE, handle

View File

@ -1,3 +1,8 @@
2011-05-12 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/48975
* gcc.dg/pr48975.c: New test.
2011-05-12 Tobias Burnus <burnus@net-b.de> 2011-05-12 Tobias Burnus <burnus@net-b.de>
PR fortran/48972 PR fortran/48972

View File

@ -0,0 +1,18 @@
/* PR tree-optimization/48975 */
/* { dg-do compile } */
/* { dg-options "-O3 -ffast-math -fno-tree-slp-vectorize" } */
static int
foo (int x)
{
return (x > 0) ? 0 : x + 1;
}
void
bar (unsigned int x)
{
int l = 1;
lab:
while (x)
x = foo (x);
}

View File

@ -1,5 +1,5 @@
/* If-conversion for vectorizer. /* If-conversion for vectorizer.
Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010 Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
Free Software Foundation, Inc. Free Software Foundation, Inc.
Contributed by Devang Patel <dpatel@apple.com> Contributed by Devang Patel <dpatel@apple.com>
@ -1637,6 +1637,7 @@ combine_blocks (struct loop *loop)
for (i = 0; i < orig_loop_num_nodes; i++) for (i = 0; i < orig_loop_num_nodes; i++)
{ {
bb = ifc_bbs[i]; bb = ifc_bbs[i];
free_bb_predicate (bb);
if (bb_with_exit_edge_p (loop, bb)) if (bb_with_exit_edge_p (loop, bb))
{ {
exit_bb = bb; exit_bb = bb;
@ -1712,6 +1713,9 @@ combine_blocks (struct loop *loop)
&& exit_bb != loop->header && exit_bb != loop->header
&& can_merge_blocks_p (loop->header, exit_bb)) && can_merge_blocks_p (loop->header, exit_bb))
merge_blocks (loop->header, exit_bb); merge_blocks (loop->header, exit_bb);
free (ifc_bbs);
ifc_bbs = NULL;
} }
/* If-convert LOOP when it is legal. For the moment this pass has no /* If-convert LOOP when it is legal. For the moment this pass has no