diff options
Diffstat (limited to 'gcc/reg-stack.c')
-rw-r--r-- | gcc/reg-stack.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/gcc/reg-stack.c b/gcc/reg-stack.c index bdd1c98..19f6660 100644 --- a/gcc/reg-stack.c +++ b/gcc/reg-stack.c @@ -303,7 +303,7 @@ stack_regs_mentioned (insn) unsigned int uid, max; int test; - if (! INSN_P (insn)) + if (! INSN_P (insn) || !stack_regs_mentioned_data) return 0; uid = INSN_UID (insn); @@ -419,6 +419,13 @@ reg_to_stack (first, file) int max_uid; block_info bi; + /* Clean up previous run. */ + if (stack_regs_mentioned_data) + { + VARRAY_FREE (stack_regs_mentioned_data); + stack_regs_mentioned_data = 0; + } + if (!optimize) split_all_insns (0); @@ -479,11 +486,8 @@ reg_to_stack (first, file) VARRAY_CHAR_INIT (stack_regs_mentioned_data, max_uid + 1, "stack_regs_mentioned cache"); - if (convert_regs (file) && optimize) - cleanup_cfg (CLEANUP_EXPENSIVE | CLEANUP_CROSSJUMP | CLEANUP_POST_REGSTACK); + convert_regs (file); - /* Clean up. */ - VARRAY_FREE (stack_regs_mentioned_data); free (bi); } |