Commit feb265ab by Jakub Jelinek Committed by Jakub Jelinek

cfgcleanup.c (try_optimize_cfg): If try_simplify_condjump optimized conditional jump...

	* cfgcleanup.c (try_optimize_cfg): If try_simplify_condjump optimized
	conditional jump, request updating life into for the block
	containing it.  Fix a typo which prevented life info update.
	Clear blocks bitmap before using it.

	* gcc.c-torture/compile/20011114-3.c: New test.

From-SVN: r47050
parent 8f5a5db8
......@@ -12,6 +12,11 @@
* config/ia64/ia64.c (ia64_adjust_cost): Handle SUBREGs.
* cfgcleanup.c (try_optimize_cfg): If try_simplify_condjump optimized
conditional jump, request updating life into for the block
containing it. Fix a typo which prevented life info update.
Clear blocks bitmap before using it.
2001-11-15 Neil Booth <neil@daikokuya.demon.co.uk>
* c-common.c: Include c-lex.h.
......
......@@ -1211,7 +1211,10 @@ try_optimize_cfg (mode)
/* Simplify branch over branch. */
if ((mode & CLEANUP_EXPENSIVE) && try_simplify_condjump (b))
changed_here = true;
{
BB_SET_FLAG (b, BB_UPDATE_LIFE);
changed_here = true;
}
/* If B has a single outgoing edge, but uses a non-trivial jump
instruction without side-effects, we can either delete the
......@@ -1261,10 +1264,11 @@ try_optimize_cfg (mode)
if (mode & CLEANUP_CROSSJUMP)
remove_fake_edges ();
if ((mode & CLEANUP_UPDATE_LIFE) & changed_overall)
if ((mode & CLEANUP_UPDATE_LIFE) && changed_overall)
{
bool found = 0;
blocks = sbitmap_alloc (n_basic_blocks);
sbitmap_zero (blocks);
for (i = 0; i < n_basic_blocks; i++)
if (BB_FLAGS (BASIC_BLOCK (i)) & BB_UPDATE_LIFE)
{
......
2001-11-15 Jakub Jelinek <jakub@redhat.com>
* gcc.c-torture/compile/20011114-2.c: New test.
* gcc.c-torture/compile/20011114-3.c: New test.
* gcc.c-torture/compile/20011114-4.c: New test.
2001-11-15 Nathan Sidwell <nathan@codesourcery.com>
......
typedef struct { int s, t; } C;
C x;
int foo (void);
void bar (int);
int baz (void)
{
int a = 0, c, d = 0;
C *b = &x;
while ((c = foo ()))
switch(c)
{
case 23:
bar (1);
break;
default:
break;
}
if (a == 0 || (a & 1))
{
if (b->s)
{
if (a)
bar (1);
else
a = 16;
}
else if (b->t)
{
if (a)
bar (1);
else
a = 32;
}
}
if (d && (a & ~127))
bar (2);
return 0;
}
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