re PR middle-end/46499 (gcc.c-torture/execute/20051021-1.c FAILs with -fno-tree-dominator-opts -fno-tree-ccp)

PR middle-end/46499
	* cfgexpand.c (maybe_cleanup_end_of_block): Remove also BARRIERs
	following unconditional jumps.

	* gcc.dg/pr46499-1.c: New test.
	* gcc.dg/pr46499-2.c: New test.

From-SVN: r167082
This commit is contained in:
Jakub Jelinek 2010-11-23 16:16:43 +01:00 committed by Jakub Jelinek
parent ae8358d69a
commit 90eb3e33b8
5 changed files with 70 additions and 1 deletions

View File

@ -1,3 +1,9 @@
2010-11-23 Jakub Jelinek <jakub@redhat.com>
PR middle-end/46499
* cfgexpand.c (maybe_cleanup_end_of_block): Remove also BARRIERs
following unconditional jumps.
2010-11-23 Richard Guenther <rguenther@suse.de>
* doc/md.texi (386 constraints): Clarify A constraint documentation.

View File

@ -1694,7 +1694,14 @@ maybe_cleanup_end_of_block (edge e, rtx last)
{
insn = PREV_INSN (insn);
if (JUMP_P (NEXT_INSN (insn)))
delete_insn (NEXT_INSN (insn));
{
if (!any_condjump_p (insn))
{
gcc_assert (BARRIER_P (NEXT_INSN (NEXT_INSN (insn))));
delete_insn (NEXT_INSN (NEXT_INSN (insn)));
}
delete_insn (NEXT_INSN (insn));
}
}
}
}

View File

@ -1,3 +1,9 @@
2010-11-23 Jakub Jelinek <jakub@redhat.com>
PR middle-end/46499
* gcc.dg/pr46499-1.c: New test.
* gcc.dg/pr46499-2.c: New test.
2010-11-23 Jack Howarth <howarth@bromo.med.uc.edu>
* gcc.target/i386/alias-1.c: Require alias support.

View File

@ -0,0 +1,31 @@
/* PR middle-end/46499 */
/* { dg-do run } */
/* { dg-options "-O -fno-omit-frame-pointer -fno-tree-ccp -fno-tree-dominator-opts -finline-small-functions" } */
extern void abort (void);
int count = 0;
int
foo (void)
{
count++;
return 0;
}
int
bar (void)
{
count++;
return 0;
}
int
main ()
{
if ((foo () == 1) & (bar () == 1))
abort ();
if (count != 2)
abort ();
return 0;
}

View File

@ -0,0 +1,19 @@
/* PR middle-end/46499 */
/* { dg-do compile } */
/* { dg-options "-O -fno-tree-ccp -fno-tree-dominator-opts" } */
extern void abort (void);
static inline int
foo (void)
{
return 0;
}
int
main ()
{
if ((foo () == 1) & (foo () == 1))
abort ();
return 0;
}