Commit e7749837 by Richard Henderson Committed by Richard Henderson

bitmap.h (BITMAP_XFREE): New.

        * bitmap.h (BITMAP_XFREE): New.
        * flow.c (life_analysis): Use it.
        (life_analysis_1): Free blocks.

        * combine.c (undo_commit): New.
        (try_combine): Use it.  Don't zap undobuf.undos.
        (combine_instructions): Don't zap undobuf.undos; free the
        undobuf.frees list.

        * local-alloc.c (local_alloc): Free qty_phys_num_sugg.

        * stmt.c (cost_table_): New.
        (estimate_case_costs): Use it instead of xmalloc.

        * toplev.c (compile_file): Reuse dumpname memory instead
        of strdup'ing it.

From-SVN: r30404
parent 920a303d
Thu Nov 4 16:44:53 1999 Richard Henderson <rth@cygnus.com>
* bitmap.h (BITMAP_XFREE): New.
* flow.c (life_analysis): Use it.
(life_analysis_1): Free blocks.
* combine.c (undo_commit): New.
(try_combine): Use it. Don't zap undobuf.undos.
(combine_instructions): Don't zap undobuf.undos; free the
undobuf.frees list.
* local-alloc.c (local_alloc): Free qty_phys_num_sugg.
* stmt.c (cost_table_): New.
(estimate_case_costs): Use it instead of xmalloc.
* toplev.c (compile_file): Reuse dumpname memory instead
of strdup'ing it.
Thu Nov 4 16:36:44 1999 Richard Henderson <rth@cygnus.com> Thu Nov 4 16:36:44 1999 Richard Henderson <rth@cygnus.com>
* reg-stack.c (convert_regs_1): Initialize target_stack->top * reg-stack.c (convert_regs_1): Initialize target_stack->top
......
...@@ -119,13 +119,24 @@ extern void debug_bitmap PROTO((bitmap)); ...@@ -119,13 +119,24 @@ extern void debug_bitmap PROTO((bitmap));
bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head))) bitmap_initialize ((bitmap) xmalloc (sizeof (bitmap_head)))
/* Do any cleanup needed on a bitmap when it is no longer used. */ /* Do any cleanup needed on a bitmap when it is no longer used. */
#define BITMAP_FREE(BITMAP) \ #define BITMAP_FREE(BITMAP) \
do { \ do { \
if (BITMAP) \ if (BITMAP) \
{ \ { \
bitmap_clear (BITMAP); \ bitmap_clear (BITMAP); \
(BITMAP) = 0; \ (BITMAP) = 0; \
} \ } \
} while (0)
/* Do any cleanup needed on an xmalloced bitmap when it is no longer used. */
#define BITMAP_XFREE(BITMAP) \
do { \
if (BITMAP) \
{ \
bitmap_clear (BITMAP); \
free (BITMAP); \
(BITMAP) = 0; \
} \
} while (0) } while (0)
/* Do any one-time initializations needed for bitmaps. */ /* Do any one-time initializations needed for bitmaps. */
......
...@@ -361,6 +361,7 @@ static int combinable_i3pat PROTO((rtx, rtx *, rtx, rtx, int, rtx *)); ...@@ -361,6 +361,7 @@ static int combinable_i3pat PROTO((rtx, rtx *, rtx, rtx, int, rtx *));
static int contains_muldiv PROTO((rtx)); static int contains_muldiv PROTO((rtx));
static rtx try_combine PROTO((rtx, rtx, rtx)); static rtx try_combine PROTO((rtx, rtx, rtx));
static void undo_all PROTO((void)); static void undo_all PROTO((void));
static void undo_commit PROTO((void));
static rtx *find_split_point PROTO((rtx *, rtx)); static rtx *find_split_point PROTO((rtx *, rtx));
static rtx subst PROTO((rtx, rtx, rtx, int, int)); static rtx subst PROTO((rtx, rtx, rtx, int, int));
static rtx combine_simplify_rtx PROTO((rtx, enum machine_mode, int, int)); static rtx combine_simplify_rtx PROTO((rtx, enum machine_mode, int, int));
...@@ -495,7 +496,6 @@ combine_instructions (f, nregs) ...@@ -495,7 +496,6 @@ combine_instructions (f, nregs)
combine_merges = 0; combine_merges = 0;
combine_extras = 0; combine_extras = 0;
combine_successes = 0; combine_successes = 0;
undobuf.undos = undobuf.previous_undos = 0;
combine_max_regno = nregs; combine_max_regno = nregs;
...@@ -717,6 +717,16 @@ combine_instructions (f, nregs) ...@@ -717,6 +717,16 @@ combine_instructions (f, nregs)
free (reg_last_set_sign_bit_copies); free (reg_last_set_sign_bit_copies);
free (uid_cuid); free (uid_cuid);
{
struct undo *undo, *next;
for (undo = undobuf.frees; undo; undo = next)
{
next = undo->next;
free (undo);
}
undobuf.frees = 0;
}
total_attempts += combine_attempts; total_attempts += combine_attempts;
total_merges += combine_merges; total_merges += combine_merges;
total_extras += combine_extras; total_extras += combine_extras;
...@@ -1461,8 +1471,6 @@ try_combine (i3, i2, i1) ...@@ -1461,8 +1471,6 @@ try_combine (i3, i2, i1)
return 0; return 0;
combine_attempts++; combine_attempts++;
undobuf.undos = undobuf.previous_undos = 0;
undobuf.other_insn = 0; undobuf.other_insn = 0;
/* Save the current high-water-mark so we can free storage if we didn't /* Save the current high-water-mark so we can free storage if we didn't
...@@ -2620,6 +2628,7 @@ try_combine (i3, i2, i1) ...@@ -2620,6 +2628,7 @@ try_combine (i3, i2, i1)
} }
combine_successes++; combine_successes++;
undo_commit ();
/* Clear this here, so that subsequent get_last_value calls are not /* Clear this here, so that subsequent get_last_value calls are not
affected. */ affected. */
...@@ -2659,6 +2668,24 @@ undo_all () ...@@ -2659,6 +2668,24 @@ undo_all ()
affected. */ affected. */
subst_prev_insn = NULL_RTX; subst_prev_insn = NULL_RTX;
} }
/* We've committed to accepting the changes we made. Move all
of the undos to the free list. */
static void
undo_commit ()
{
struct undo *undo, *next;
for (undo = undobuf.undos; undo; undo = next)
{
next = undo->next;
undo->next = undobuf.frees;
undobuf.frees = undo;
}
undobuf.undos = undobuf.previous_undos = 0;
}
/* Find the innermost point within the rtx at LOC, possibly LOC itself, /* Find the innermost point within the rtx at LOC, possibly LOC itself,
where we have an arithmetic expression and return that point. LOC will where we have an arithmetic expression and return that point. LOC will
......
...@@ -2466,8 +2466,7 @@ life_analysis (f, nregs, file, remove_dead_code) ...@@ -2466,8 +2466,7 @@ life_analysis (f, nregs, file, remove_dead_code)
if (file) if (file)
dump_flow_info (file); dump_flow_info (file);
BITMAP_FREE (uid_volatile); BITMAP_XFREE (uid_volatile);
free (uid_volatile);
free_basic_block_vars (1); free_basic_block_vars (1);
} }
...@@ -2940,6 +2939,7 @@ life_analysis_1 (f, nregs, flags) ...@@ -2940,6 +2939,7 @@ life_analysis_1 (f, nregs, flags)
blocks = sbitmap_alloc (n_basic_blocks); blocks = sbitmap_alloc (n_basic_blocks);
sbitmap_ones (blocks); sbitmap_ones (blocks);
calculate_global_regs_live (blocks, blocks, flags & PROP_SCAN_DEAD_CODE); calculate_global_regs_live (blocks, blocks, flags & PROP_SCAN_DEAD_CODE);
sbitmap_free (blocks);
} }
/* The only pseudos that are live at the beginning of the function are /* The only pseudos that are live at the beginning of the function are
......
...@@ -420,6 +420,7 @@ local_alloc () ...@@ -420,6 +420,7 @@ local_alloc ()
free (qty_phys_copy_sugg); free (qty_phys_copy_sugg);
free (qty_phys_num_copy_sugg); free (qty_phys_num_copy_sugg);
free (qty_phys_sugg); free (qty_phys_sugg);
free (qty_phys_num_sugg);
free (qty_birth); free (qty_birth);
free (qty_death); free (qty_death);
free (qty_first_reg); free (qty_first_reg);
......
...@@ -106,6 +106,7 @@ typedef struct case_node *case_node_ptr; ...@@ -106,6 +106,7 @@ typedef struct case_node *case_node_ptr;
/* These are used by estimate_case_costs and balance_case_nodes. */ /* These are used by estimate_case_costs and balance_case_nodes. */
/* This must be a signed type, and non-ANSI compilers lack signed char. */ /* This must be a signed type, and non-ANSI compilers lack signed char. */
static short cost_table_[129];
static short *cost_table; static short *cost_table;
static int use_cost_table; static int use_cost_table;
...@@ -5694,7 +5695,7 @@ estimate_case_costs (node) ...@@ -5694,7 +5695,7 @@ estimate_case_costs (node)
if (cost_table == NULL) if (cost_table == NULL)
{ {
cost_table = ((short *) xcalloc (129, sizeof (short))) + 1; cost_table = cost_table_ + 1;
for (i = 0; i < 128; i++) for (i = 0; i < 128; i++)
{ {
......
...@@ -3053,13 +3053,15 @@ compile_file (name) ...@@ -3053,13 +3053,15 @@ compile_file (name)
asm_out_file = stdout; asm_out_file = stdout;
else else
{ {
int len = strlen (dump_base_name);
register char *dumpname = (char *) xmalloc (len + 6);
strcpy (dumpname, dump_base_name);
strip_off_ending (dumpname, len);
strcat (dumpname, ".s");
if (asm_file_name == 0) if (asm_file_name == 0)
asm_file_name = xstrdup (dumpname); {
int len = strlen (dump_base_name);
char *dumpname = (char *) xmalloc (len + 6);
memcpy (dumpname, dump_base_name, len + 1);
strip_off_ending (dumpname, len);
strcat (dumpname, ".s");
asm_file_name = dumpname;
}
if (!strcmp (asm_file_name, "-")) if (!strcmp (asm_file_name, "-"))
asm_out_file = stdout; asm_out_file = stdout;
else else
......
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