* 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
* 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.
/* 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
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>
--- /dev/null
+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;
+}