diff options
author | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-04-15 06:05:44 +0000 |
---|---|---|
committer | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2015-04-15 06:05:44 +0000 |
commit | c36aa54b39d1e97ac912dcbef8550750bb2dc760 (patch) | |
tree | ef0b3b5fe19860d399f60a0610fc54c9edee6d90 /gcc/emit-rtl.c | |
parent | 7502b19d938bde2fcfc9d5976e82003349dce04f (diff) | |
download | gcc-c36aa54b39d1e97ac912dcbef8550750bb2dc760.tar.gz |
* function.h (struct emit_status): Delete x_first_insn, x_last_insn
and sequence_stack. Add seq.
(seq_stack): Delete.
* function.c (prepare_function_start): Don't access x_last_insn.
* emit-rtl.h (get_current_sequence, get_topmost_sequence): New.
(get_insns, set_first_insn, get_last_insn, set_last_insn): Use them.
* emit_rtl.c (start_sequence, push_topmost_sequence,
pop_topmost_sequence, end_sequence, in_sequence_p, init_emit): Use
sequence accessors.
(get_last_insn_anywhere, add_insn_after_nobb, add_insn_before_nobb,
remove_insn): Likewise. Simplify.
* config/m32c/m32c.c (m32c_leaf_function_p): Use push_topmost_sequence
and pop_topmost_sequence.
(m32c_function_needs_enter): Use get_topmost_sequence. Ignore
debug insns.
* config/rs6000/rs6000.c (rs6000_call_aix): Use get_current_sequence.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@222112 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 111 |
1 files changed, 43 insertions, 68 deletions
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 483eacb2d6c..b8dc7d50e7e 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -3175,12 +3175,10 @@ make_safe_from (rtx x, rtx other) rtx_insn * get_last_insn_anywhere (void) { - struct sequence_stack *stack; - if (get_last_insn ()) - return get_last_insn (); - for (stack = seq_stack; stack; stack = stack->next) - if (stack->last != 0) - return stack->last; + struct sequence_stack *seq; + for (seq = get_current_sequence (); seq; seq = seq->next) + if (seq->last != 0) + return seq->last; return 0; } @@ -4014,19 +4012,14 @@ add_insn_after_nobb (rtx_insn *insn, rtx_insn *after) if (next == NULL) { - if (get_last_insn () == after) - set_last_insn (insn); - else - { - struct sequence_stack *stack = seq_stack; - /* Scan all pending sequences too. */ - for (; stack; stack = stack->next) - if (after == stack->last) - { - stack->last = insn; - break; - } - } + struct sequence_stack *seq; + + for (seq = get_current_sequence (); seq; seq = seq->next) + if (after == seq->last) + { + seq->last = insn; + break; + } } } @@ -4043,21 +4036,16 @@ add_insn_before_nobb (rtx_insn *insn, rtx_insn *before) if (prev == NULL) { - if (get_insns () == before) - set_first_insn (insn); - else - { - struct sequence_stack *stack = seq_stack; - /* Scan all pending sequences too. */ - for (; stack; stack = stack->next) - if (before == stack->first) - { - stack->first = insn; - break; - } + struct sequence_stack *seq; - gcc_assert (stack); - } + for (seq = get_current_sequence (); seq; seq = seq->next) + if (before == seq->first) + { + seq->first = insn; + break; + } + + gcc_assert (seq); } } @@ -4168,24 +4156,18 @@ remove_insn (rtx uncast_insn) SET_NEXT_INSN (sequence->insn (sequence->len () - 1)) = next; } } - else if (get_insns () == insn) - { - if (next) - SET_PREV_INSN (next) = NULL; - set_first_insn (next); - } else { - struct sequence_stack *stack = seq_stack; - /* Scan all pending sequences too. */ - for (; stack; stack = stack->next) - if (insn == stack->first) + struct sequence_stack *seq; + + for (seq = get_current_sequence (); seq; seq = seq->next) + if (insn == seq->first) { - stack->first = next; + seq->first = next; break; } - gcc_assert (stack); + gcc_assert (seq); } if (next) @@ -4197,20 +4179,18 @@ remove_insn (rtx uncast_insn) SET_PREV_INSN (sequence->insn (0)) = prev; } } - else if (get_last_insn () == insn) - set_last_insn (prev); else { - struct sequence_stack *stack = seq_stack; - /* Scan all pending sequences too. */ - for (; stack; stack = stack->next) - if (insn == stack->last) + struct sequence_stack *seq; + + for (seq = get_current_sequence (); seq; seq = seq->next) + if (insn == seq->last) { - stack->last = prev; + seq->last = prev; break; } - gcc_assert (stack); + gcc_assert (seq); } /* Fix up basic block boundaries, if necessary. */ @@ -5399,11 +5379,10 @@ start_sequence (void) else tem = ggc_alloc<sequence_stack> (); - tem->next = seq_stack; + tem->next = get_current_sequence ()->next; tem->first = get_insns (); tem->last = get_last_insn (); - - seq_stack = tem; + get_current_sequence ()->next = tem; set_first_insn (0); set_last_insn (0); @@ -5445,13 +5424,11 @@ push_to_sequence2 (rtx_insn *first, rtx_insn *last) void push_topmost_sequence (void) { - struct sequence_stack *stack, *top = NULL; + struct sequence_stack *top; start_sequence (); - for (stack = seq_stack; stack; stack = stack->next) - top = stack; - + top = get_topmost_sequence (); set_first_insn (top->first); set_last_insn (top->last); } @@ -5462,11 +5439,9 @@ push_topmost_sequence (void) void pop_topmost_sequence (void) { - struct sequence_stack *stack, *top = NULL; - - for (stack = seq_stack; stack; stack = stack->next) - top = stack; + struct sequence_stack *top; + top = get_topmost_sequence (); top->first = get_insns (); top->last = get_last_insn (); @@ -5489,11 +5464,11 @@ pop_topmost_sequence (void) void end_sequence (void) { - struct sequence_stack *tem = seq_stack; + struct sequence_stack *tem = get_current_sequence ()->next; set_first_insn (tem->first); set_last_insn (tem->last); - seq_stack = tem->next; + get_current_sequence ()->next = tem->next; memset (tem, 0, sizeof (*tem)); tem->next = free_sequence_stack; @@ -5505,7 +5480,7 @@ end_sequence (void) int in_sequence_p (void) { - return seq_stack != 0; + return get_current_sequence ()->next != 0; } /* Put the various virtual registers into REGNO_REG_RTX. */ @@ -5721,7 +5696,7 @@ init_emit (void) cur_debug_insn_uid = 1; reg_rtx_no = LAST_VIRTUAL_REGISTER + 1; first_label_num = label_num; - seq_stack = NULL; + get_current_sequence ()->next = NULL; /* Init the tables that describe all the pseudo regs. */ |