aboutsummaryrefslogtreecommitdiff
path: root/gcc/emit-rtl.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2002-06-06 23:20:43 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2002-06-06 21:20:43 +0000
commit0d682900c62864d3a11399087144d72c27a88c73 (patch)
treefaa2390f8f70ae3e60f4e184669ef5304b7cb309 /gcc/emit-rtl.c
parentc991649cef7449cefc631fcbcf54c5fd181661c2 (diff)
downloadgcc-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.c78
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