From 0d682900c62864d3a11399087144d72c27a88c73 Mon Sep 17 00:00:00 2001 From: Jan Hubicka Date: Thu, 6 Jun 2002 23:20:43 +0200 Subject: i386.md (and promoting splitters): Disable QI to SImode promoting when doing so changes immediate to be 32bit. * i386.md (and promoting splitters): Disable QI to SImode promoting when doing so changes immediate to be 32bit. * rtl.h (emit_*_scope): Declare. * emit-rtl.c (emit_*_scope): New global functions. (try_split): Copy scope. * ifcvt.c (noce_try_store_flag, noce_try_store_flag_constants, noce_try_flag_inc, noce_try_store_flag_mask, noce_try_cmove, noce_try_cmove_arith, noce_try_minmax, noce_try_abs, noce_process_if_block, find_cond_trap): Copy scopes. * recog.c (peephole2_optimize): likewise. From-SVN: r54327 --- gcc/emit-rtl.c | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) (limited to 'gcc/emit-rtl.c') diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c index 9d15fdf..724244b 100644 --- a/gcc/emit-rtl.c +++ b/gcc/emit-rtl.c @@ -3205,7 +3205,7 @@ try_split (pat, trial, last) if (GET_CODE (XVECEXP (seq, 0, i)) == INSN) mark_label_nuses (PATTERN (XVECEXP (seq, 0, i))); - tem = emit_insn_after (seq, trial); + tem = emit_insn_after_scope (seq, trial, INSN_SCOPE (trial)); delete_insn (trial); if (has_barrier) @@ -4069,6 +4069,82 @@ emit_line_note_after (file, line, after) return note; } +/* Like emit_insn_after, but set INSN_SCOPE according to SCOPE. */ +rtx +emit_insn_after_scope (pattern, after, scope) + rtx pattern, after; + tree scope; +{ + rtx last = emit_insn_after (pattern, after); + for (after = NEXT_INSN (after); after != last; after = NEXT_INSN (after)) + INSN_SCOPE (after) = scope; + return last; +} + +/* Like emit_insns_after, but set INSN_SCOPE according to SCOPE. */ +rtx +emit_insns_after_scope (pattern, after, scope) + rtx pattern, after; + tree scope; +{ + rtx last = emit_insns_after (pattern, after); + for (after = NEXT_INSN (after); after != last; after = NEXT_INSN (after)) + INSN_SCOPE (after) = scope; + return last; +} + +/* Like emit_jump_insn_after, but set INSN_SCOPE according to SCOPE. */ +rtx +emit_jump_insn_after_scope (pattern, after, scope) + rtx pattern, after; + tree scope; +{ + rtx last = emit_jump_insn_after (pattern, after); + for (after = NEXT_INSN (after); after != last; after = NEXT_INSN (after)) + INSN_SCOPE (after) = scope; + return last; +} + +/* Like emit_call_insn_after, but set INSN_SCOPE according to SCOPE. */ +rtx +emit_call_insn_after_scope (pattern, after, scope) + rtx pattern, after; + tree scope; +{ + rtx last = emit_call_insn_after (pattern, after); + for (after = NEXT_INSN (after); after != last; after = NEXT_INSN (after)) + INSN_SCOPE (after) = scope; + return last; +} + +/* Like emit_insn_before, but set INSN_SCOPE according to SCOPE. */ +rtx +emit_insn_before_scope (pattern, before, scope) + rtx pattern, before; + tree scope; +{ + rtx first = PREV_INSN (before); + rtx last = emit_insn_before (pattern, before); + + for (first = NEXT_INSN (first); first != last; first = NEXT_INSN (first)) + INSN_SCOPE (first) = scope; + return last; +} + +/* Like emit_insns_before, but set INSN_SCOPE according to SCOPE. */ +rtx +emit_insns_before_scope (pattern, before, scope) + rtx pattern, before; + tree scope; +{ + rtx first = PREV_INSN (before); + rtx last = emit_insns_before (pattern, before); + + for (first = NEXT_INSN (first); first != last; first = NEXT_INSN (first)) + INSN_SCOPE (first) = scope; + return last; +} + /* Make an insn of code INSN with pattern PATTERN and add it to the end of the doubly-linked list. If PATTERN is a SEQUENCE, take the elements of it -- cgit v1.1