summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>1999-11-01 22:42:01 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>1999-11-01 22:42:01 +0000
commitc05ddfa745d68f6d9db1a7d0992650a41986d376 (patch)
treeea66080ea9530bba1ac5dd0e725e572293518210
parent9fd4e3280e7795e47dcff290b9efcd734217c900 (diff)
downloadgcc-c05ddfa745d68f6d9db1a7d0992650a41986d376.tar.gz
* combine.c (combine_instructions): Use xmalloc instead of alloca.
From-SVN: r30331
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/combine.c45
2 files changed, 32 insertions, 17 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 2dcf116334d..eb02521ee08 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+Mon Nov 1 15:41:01 1999 Mark P. Mitchell <mark@codesourcery.com>
+
+ * combine.c (combine_instructions): Use xmalloc instead of alloca.
+
Mon Nov 1 13:22:30 1999 Richard Henderson <rth@cygnus.com>
* toplev.c (rest_of_compilation): Don't optimize the CFG
diff --git a/gcc/combine.c b/gcc/combine.c
index dbae9dc4f8f..951930d048a 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -499,25 +499,22 @@ combine_instructions (f, nregs)
combine_max_regno = nregs;
- reg_nonzero_bits
- = (unsigned HOST_WIDE_INT *) alloca (nregs * sizeof (HOST_WIDE_INT));
- reg_sign_bit_copies = (char *) alloca (nregs * sizeof (char));
-
- bzero ((char *) reg_nonzero_bits, nregs * sizeof (HOST_WIDE_INT));
- bzero (reg_sign_bit_copies, nregs * sizeof (char));
-
- reg_last_death = (rtx *) alloca (nregs * sizeof (rtx));
- reg_last_set = (rtx *) alloca (nregs * sizeof (rtx));
- reg_last_set_value = (rtx *) alloca (nregs * sizeof (rtx));
- reg_last_set_table_tick = (int *) alloca (nregs * sizeof (int));
- reg_last_set_label = (int *) alloca (nregs * sizeof (int));
- reg_last_set_invalid = (char *) alloca (nregs * sizeof (char));
+ reg_nonzero_bits = ((unsigned HOST_WIDE_INT *)
+ xcalloc (nregs, sizeof (unsigned HOST_WIDE_INT)));
+ reg_sign_bit_copies = (char *) xcalloc (nregs, sizeof (char));
+
+ reg_last_death = (rtx *) xmalloc (nregs * sizeof (rtx));
+ reg_last_set = (rtx *) xmalloc (nregs * sizeof (rtx));
+ reg_last_set_value = (rtx *) xmalloc (nregs * sizeof (rtx));
+ reg_last_set_table_tick = (int *) xmalloc (nregs * sizeof (int));
+ reg_last_set_label = (int *) xmalloc (nregs * sizeof (int));
+ reg_last_set_invalid = (char *) xmalloc (nregs * sizeof (char));
reg_last_set_mode
- = (enum machine_mode *) alloca (nregs * sizeof (enum machine_mode));
+ = (enum machine_mode *) xmalloc (nregs * sizeof (enum machine_mode));
reg_last_set_nonzero_bits
- = (unsigned HOST_WIDE_INT *) alloca (nregs * sizeof (HOST_WIDE_INT));
+ = (unsigned HOST_WIDE_INT *) xmalloc (nregs * sizeof (HOST_WIDE_INT));
reg_last_set_sign_bit_copies
- = (char *) alloca (nregs * sizeof (char));
+ = (char *) xmalloc (nregs * sizeof (char));
init_reg_last_arrays ();
@@ -529,7 +526,7 @@ combine_instructions (f, nregs)
if (INSN_UID (insn) > i)
i = INSN_UID (insn);
- uid_cuid = (int *) alloca ((i + 1) * sizeof (int));
+ uid_cuid = (int *) xmalloc ((i + 1) * sizeof (int));
max_uid_cuid = i;
nonzero_bits_mode = mode_for_size (HOST_BITS_PER_WIDE_INT, MODE_INT, 0);
@@ -704,7 +701,21 @@ combine_instructions (f, nregs)
update_life_info (refresh_blocks, UPDATE_LIFE_GLOBAL_RM_NOTES,
PROP_DEATH_NOTES);
}
+
+ /* Clean up. */
sbitmap_free (refresh_blocks);
+ free (reg_nonzero_bits);
+ free (reg_sign_bit_copies);
+ free (reg_last_death);
+ free (reg_last_set);
+ free (reg_last_set_value);
+ free (reg_last_set_table_tick);
+ free (reg_last_set_label);
+ free (reg_last_set_invalid);
+ free (reg_last_set_mode);
+ free (reg_last_set_nonzero_bits);
+ free (reg_last_set_sign_bit_copies);
+ free (uid_cuid);
total_attempts += combine_attempts;
total_merges += combine_merges;