diff options
author | Jan Hubicka <jh@suse.cz> | 2002-06-06 23:20:43 +0200 |
---|---|---|
committer | Jan Hubicka <hubicka@gcc.gnu.org> | 2002-06-06 21:20:43 +0000 |
commit | 0d682900c62864d3a11399087144d72c27a88c73 (patch) | |
tree | faa2390f8f70ae3e60f4e184669ef5304b7cb309 /gcc/emit-rtl.c | |
parent | c991649cef7449cefc631fcbcf54c5fd181661c2 (diff) | |
download | gcc-0d682900c62864d3a11399087144d72c27a88c73.zip gcc-0d682900c62864d3a11399087144d72c27a88c73.tar.gz gcc-0d682900c62864d3a11399087144d72c27a88c73.tar.bz2 |
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
Diffstat (limited to 'gcc/emit-rtl.c')
-rw-r--r-- | gcc/emit-rtl.c | 78 |
1 files changed, 77 insertions, 1 deletions
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 |