diff options
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 6b1b3b7..27b8374 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -3376,6 +3376,7 @@ start_sequence () tem->next = seq_stack; tem->first = first_insn; tem->last = last_insn; + tem->sequence_rtl_expr = seq_rtl_expr; seq_stack = tem; @@ -3383,6 +3384,19 @@ start_sequence () last_insn = 0; } +/* Similarly, but indicate that this sequence will be placed in T, an + RTL_EXPR. See the documentation for start_sequence for more + information about how to use this function. */ + +void +start_sequence_for_rtl_expr (t) + tree t; +{ + start_sequence (); + + seq_rtl_expr = t; +} + /* Set up the insn chain starting with FIRST as the current sequence, saving the previously current one. See the documentation for start_sequence for more information about how to use this function. */ @@ -3416,6 +3430,7 @@ push_topmost_sequence () first_insn = top->first; last_insn = top->last; + seq_rtl_expr = top->sequence_rtl_expr; } /* After emitting to the outer-level insn chain, update the outer-level @@ -3431,6 +3446,7 @@ pop_topmost_sequence () top->first = first_insn; top->last = last_insn; + /* ??? Why don't we save seq_rtl_expr here? */ end_sequence (); } @@ -3455,6 +3471,7 @@ end_sequence () first_insn = tem->first; last_insn = tem->last; + seq_rtl_expr = tem->sequence_rtl_expr; seq_stack = tem->next; free (tem); @@ -3743,6 +3760,7 @@ init_emit () f->emit = (struct emit_status *) xmalloc (sizeof (struct emit_status)); first_insn = NULL; last_insn = NULL; + seq_rtl_expr = NULL; cur_insn_uid = 1; reg_rtx_no = LAST_VIRTUAL_REGISTER + 1; last_linenum = 0; @@ -3816,6 +3834,7 @@ mark_sequence_stack (ss) while (ss) { ggc_mark_rtx (ss->first); + ggc_mark_tree (ss->sequence_rtl_expr); ss = ss->next; } } @@ -3837,6 +3856,7 @@ mark_emit_status (es) ggc_mark_rtx (*r); mark_sequence_stack (es->sequence_stack); + ggc_mark_tree (es->sequence_rtl_expr); ggc_mark_rtx (es->x_first_insn); } |