Commit 9766135b by Jakub Jelinek Committed by Jakub Jelinek

re PR rtl-optimization/47157 (ICE: in calc_dfs_tree, at dominance.c:395 with -O)

	PR rtl-optimization/47157
	* combine.c (try_combine): If undobuf.other_insn becomes
	(set (pc) (pc)) jump, call update_cfg_for_uncondjump on it
	and set *new_direct_jump_p too.

	* gcc.c-torture/compile/pr47157.c: New test.

From-SVN: r168439
parent d652f226
2011-01-03 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/47157
* combine.c (try_combine): If undobuf.other_insn becomes
(set (pc) (pc)) jump, call update_cfg_for_uncondjump on it
and set *new_direct_jump_p too.
2011-01-03 Sebastian Pop <sebastian.pop@amd.com> 2011-01-03 Sebastian Pop <sebastian.pop@amd.com>
PR tree-optimization/47021 PR tree-optimization/47021
......
/* Optimize by combining instructions for GNU compiler. /* Optimize by combining instructions for GNU compiler.
Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998, Copyright (C) 1987, 1988, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
Free Software Foundation, Inc. 2011 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -4378,6 +4378,15 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p) ...@@ -4378,6 +4378,15 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
update_cfg_for_uncondjump (i3); update_cfg_for_uncondjump (i3);
} }
if (undobuf.other_insn != NULL_RTX
&& GET_CODE (PATTERN (undobuf.other_insn)) == SET
&& SET_SRC (PATTERN (undobuf.other_insn)) == pc_rtx
&& SET_DEST (PATTERN (undobuf.other_insn)) == pc_rtx)
{
*new_direct_jump_p = 1;
update_cfg_for_uncondjump (undobuf.other_insn);
}
combine_successes++; combine_successes++;
undo_commit (); undo_commit ();
......
2011-01-03 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/47157
* gcc.c-torture/compile/pr47157.c: New test.
2011-01-03 Ulrich Weigand <Ulrich.Weigand@de.ibm.com> 2011-01-03 Ulrich Weigand <Ulrich.Weigand@de.ibm.com>
* gcc.dg/torture/vector-shift2.c (schar): Define. * gcc.dg/torture/vector-shift2.c (schar): Define.
......
/* PR rtl-optimization/47157 */
struct S { unsigned a; unsigned b; } c = { 1, 0 };
unsigned long int e;
void bar (int);
int baz (void);
static int
foo (int x, short y)
{
return ((x ^ y) & ((x ^ (x ^ y) & ~__INT_MAX__) - y ^ y)) < 0 ? x : x - y;
}
void
test (void)
{
bar (foo (baz () != (c.a | c.b), -1L));
for (e = 0; e; e = 1)
;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment