summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2008-06-01 09:47:28 +0000
committerrsandifo <rsandifo@138bc75d-0d04-0410-961f-82ee72b054a4>2008-06-01 09:47:28 +0000
commit18b42941fcf0c68fb7a047bc6653a25c652d076c (patch)
tree37c8032992aa66cf0017e07e121f03c775ad12a6
parentc843de3c75bdc658eda42994811223b2e79399f1 (diff)
downloadgcc-18b42941fcf0c68fb7a047bc6653a25c652d076c.tar.gz
gcc/
* rtl.h (emit_clobber, gen_clobber, emit_use, gen_use): Declare. * emit-rtl.c (emit_clobber, gen_clobber, emit_use, gen_use): New functions. Do not emit uses and clobbers of CONCATs; individually use and clobber their operands. * builtins.c (expand_builtin_setjmp_receiver): Use emit_clobber, gen_clobber, emit_use and gen_use. (expand_builtin_longjmp, expand_builtin_nonlocal_goto): Likewise. (expand_builtin_return): Likewise. * cfgbuild.c (count_basic_blocks): Likewise. * cfgrtl.c (rtl_flow_call_edges_add): Likewise. * explow.c (emit_stack_restore): Likewise. * expmed.c (extract_bit_field_1): Likewise. * expr.c (convert_move, emit_move_complex_parts): Likewise. (emit_move_multi_word, store_constructor): Likewise. * function.c (do_clobber_return_reg, do_use_return_reg): Likewise. (thread_prologue_and_epilogue_insns): Likewise. * lower-subreg.c (resolve_simple_move): Likewise. * optabs.c (widen_operand, expand_binop): Likewise. (expand_doubleword_bswap, emit_no_conflict_block): Likewise. * reload.c (find_reloads): Likewise. * reload1.c (eliminate_regs_in_insn): Likewise. * stmt.c (expand_nl_goto_receiver): Likewise. * config/alpha/alpha.md (builtin_longjmp): Likewise. * config/arc/arc.md (*movdi_insn, *movdf_insn): Likewise. * config/arm/arm.c (arm_load_pic_register): Likewise. (thumb1_expand_epilogue, thumb_set_return_address): Likewise. * config/arm/arm.md (untyped_return): Likewise. * config/arm/linux-elf.h (PROFILE_HOOK): Likewise. * config/avr/avr.c (expand_prologue): Likewise. * config/bfin/bfin.c (do_unlink): Likewise. * config/bfin/bfin.md (<optab>di3, adddi3, subdi3): Likewise. * config/cris/cris.c (cris_expand_prologue): Likewise. * config/darwin.c (machopic_indirect_data_reference): Likewise. (machopic_legitimize_pic_address): Likewise. * config/frv/frv.c (frv_frame_access, frv_expand_epilogue): Likewise. (frv_ifcvt_modify_insn, frv_expand_mdpackh_builtin): Likewise. * config/i386/i386.c (ix86_expand_vector_move_misalign): Likewise. (ix86_expand_convert_uns_didf_sse): Likewise. (ix86_expand_vector_init_general): Likewise. * config/ia64/ia64.md (eh_epilogue): Likewise. * config/iq2000/iq2000.c (iq2000_expand_epilogue): Likewise. * config/m32c/m32c.c (m32c_emit_eh_epilogue): Likewise. * config/m32r/m32r.c (m32r_reload_lr): Likewise. (config/iq2000/iq2000.c): Likewise. * config/mips/mips.md (fixuns_truncdfsi2): Likewise. (fixuns_truncdfdi2, fixuns_truncsfsi2, fixuns_truncsfdi2): Likewise. (builtin_longjmp): Likewise. * config/mn10300/mn10300.md (call, call_value): Likewise. * config/pa/pa.md (nonlocal_goto, nonlocal_longjmp): Likewise. * config/pdp11/pdp11.md (abshi2): Likewise. * config/rs6000/rs6000.c (rs6000_emit_move): Likewise. * config/s390/s390.c (s390_emit_prologue): Likewise. * config/s390/s390.md (movmem_long, setmem_long): Likewise. (cmpmem_long, extendsidi2, zero_extendsidi2, udivmoddi4): Likewise. (builtin_setjmp_receiver, restore_stack_nonlocal): Likewise. * config/sh/sh.c (prepare_move_operands): Likewise. (output_stack_adjust, sh_expand_epilogue): Likewise. (sh_set_return_address, sh_expand_t_scc): Likewise. * config/sparc/sparc.c (load_pic_register): Likewise. * config/sparc/sparc.md (untyped_return, nonlocal_goto): Likewise. * config/spu/spu.c (spu_expand_epilogue): Likewise. * config/v850/v850.c (expand_epilogue): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@136251 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/ChangeLog65
-rw-r--r--gcc/builtins.c35
-rw-r--r--gcc/cfgbuild.c2
-rw-r--r--gcc/cfgrtl.c2
-rw-r--r--gcc/config/alpha/alpha.md4
-rw-r--r--gcc/config/arc/arc.md4
-rw-r--r--gcc/config/arm/arm.c8
-rw-r--r--gcc/config/arm/arm.md3
-rw-r--r--gcc/config/arm/linux-elf.h2
-rw-r--r--gcc/config/avr/avr.c2
-rw-r--r--gcc/config/bfin/bfin.c4
-rw-r--r--gcc/config/bfin/bfin.md6
-rw-r--r--gcc/config/cris/cris.c2
-rw-r--r--gcc/config/darwin.c13
-rw-r--r--gcc/config/frv/frv.c12
-rw-r--r--gcc/config/i386/i386.c8
-rw-r--r--gcc/config/ia64/ia64.md4
-rw-r--r--gcc/config/iq2000/iq2000.c3
-rw-r--r--gcc/config/m32c/m32c.c2
-rw-r--r--gcc/config/m32r/m32r.c4
-rw-r--r--gcc/config/mips/mips.md14
-rw-r--r--gcc/config/mn10300/mn10300.md4
-rw-r--r--gcc/config/pa/pa.md24
-rw-r--r--gcc/config/pdp11/pdp11.md2
-rw-r--r--gcc/config/rs6000/rs6000.c2
-rw-r--r--gcc/config/s390/s390.c2
-rw-r--r--gcc/config/s390/s390.md22
-rw-r--r--gcc/config/sh/sh.c13
-rw-r--r--gcc/config/sparc/sparc.c4
-rw-r--r--gcc/config/sparc/sparc.md8
-rw-r--r--gcc/config/spu/spu.c3
-rw-r--r--gcc/config/v850/v850.c2
-rw-r--r--gcc/emit-rtl.c56
-rw-r--r--gcc/explow.c7
-rw-r--r--gcc/expmed.c2
-rw-r--r--gcc/expr.c10
-rw-r--r--gcc/function.c6
-rw-r--r--gcc/lower-subreg.c2
-rw-r--r--gcc/optabs.c6
-rw-r--r--gcc/reload.c2
-rw-r--r--gcc/reload1.c7
-rw-r--r--gcc/rtl.h4
-rw-r--r--gcc/stmt.c4
43 files changed, 243 insertions, 148 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e50465a7631..e990443a4bc 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,68 @@
+2008-06-01 Richard Sandiford <rdsandiford@googlemail.com>
+
+ * rtl.h (emit_clobber, gen_clobber, emit_use, gen_use): Declare.
+ * emit-rtl.c (emit_clobber, gen_clobber, emit_use, gen_use): New
+ functions. Do not emit uses and clobbers of CONCATs; individually
+ use and clobber their operands.
+ * builtins.c (expand_builtin_setjmp_receiver): Use emit_clobber,
+ gen_clobber, emit_use and gen_use.
+ (expand_builtin_longjmp, expand_builtin_nonlocal_goto): Likewise.
+ (expand_builtin_return): Likewise.
+ * cfgbuild.c (count_basic_blocks): Likewise.
+ * cfgrtl.c (rtl_flow_call_edges_add): Likewise.
+ * explow.c (emit_stack_restore): Likewise.
+ * expmed.c (extract_bit_field_1): Likewise.
+ * expr.c (convert_move, emit_move_complex_parts): Likewise.
+ (emit_move_multi_word, store_constructor): Likewise.
+ * function.c (do_clobber_return_reg, do_use_return_reg): Likewise.
+ (thread_prologue_and_epilogue_insns): Likewise.
+ * lower-subreg.c (resolve_simple_move): Likewise.
+ * optabs.c (widen_operand, expand_binop): Likewise.
+ (expand_doubleword_bswap, emit_no_conflict_block): Likewise.
+ * reload.c (find_reloads): Likewise.
+ * reload1.c (eliminate_regs_in_insn): Likewise.
+ * stmt.c (expand_nl_goto_receiver): Likewise.
+ * config/alpha/alpha.md (builtin_longjmp): Likewise.
+ * config/arc/arc.md (*movdi_insn, *movdf_insn): Likewise.
+ * config/arm/arm.c (arm_load_pic_register): Likewise.
+ (thumb1_expand_epilogue, thumb_set_return_address): Likewise.
+ * config/arm/arm.md (untyped_return): Likewise.
+ * config/arm/linux-elf.h (PROFILE_HOOK): Likewise.
+ * config/avr/avr.c (expand_prologue): Likewise.
+ * config/bfin/bfin.c (do_unlink): Likewise.
+ * config/bfin/bfin.md (<optab>di3, adddi3, subdi3): Likewise.
+ * config/cris/cris.c (cris_expand_prologue): Likewise.
+ * config/darwin.c (machopic_indirect_data_reference): Likewise.
+ (machopic_legitimize_pic_address): Likewise.
+ * config/frv/frv.c (frv_frame_access, frv_expand_epilogue): Likewise.
+ (frv_ifcvt_modify_insn, frv_expand_mdpackh_builtin): Likewise.
+ * config/i386/i386.c (ix86_expand_vector_move_misalign): Likewise.
+ (ix86_expand_convert_uns_didf_sse): Likewise.
+ (ix86_expand_vector_init_general): Likewise.
+ * config/ia64/ia64.md (eh_epilogue): Likewise.
+ * config/iq2000/iq2000.c (iq2000_expand_epilogue): Likewise.
+ * config/m32c/m32c.c (m32c_emit_eh_epilogue): Likewise.
+ * config/m32r/m32r.c (m32r_reload_lr): Likewise.
+ (config/iq2000/iq2000.c): Likewise.
+ * config/mips/mips.md (fixuns_truncdfsi2): Likewise.
+ (fixuns_truncdfdi2, fixuns_truncsfsi2, fixuns_truncsfdi2): Likewise.
+ (builtin_longjmp): Likewise.
+ * config/mn10300/mn10300.md (call, call_value): Likewise.
+ * config/pa/pa.md (nonlocal_goto, nonlocal_longjmp): Likewise.
+ * config/pdp11/pdp11.md (abshi2): Likewise.
+ * config/rs6000/rs6000.c (rs6000_emit_move): Likewise.
+ * config/s390/s390.c (s390_emit_prologue): Likewise.
+ * config/s390/s390.md (movmem_long, setmem_long): Likewise.
+ (cmpmem_long, extendsidi2, zero_extendsidi2, udivmoddi4): Likewise.
+ (builtin_setjmp_receiver, restore_stack_nonlocal): Likewise.
+ * config/sh/sh.c (prepare_move_operands): Likewise.
+ (output_stack_adjust, sh_expand_epilogue): Likewise.
+ (sh_set_return_address, sh_expand_t_scc): Likewise.
+ * config/sparc/sparc.c (load_pic_register): Likewise.
+ * config/sparc/sparc.md (untyped_return, nonlocal_goto): Likewise.
+ * config/spu/spu.c (spu_expand_epilogue): Likewise.
+ * config/v850/v850.c (expand_epilogue): Likewise.
+
2008-05-31 Anatoly Sokolov <aesok@post.ru>
* config/avr/avr.md (UNSPECV_WRITE_SP_IRQ_ON): New constants.
diff --git a/gcc/builtins.c b/gcc/builtins.c
index 77cd48beaed..05eb6bbdd98 100644
--- a/gcc/builtins.c
+++ b/gcc/builtins.c
@@ -708,11 +708,11 @@ expand_builtin_setjmp_receiver (rtx receiver_label ATTRIBUTE_UNUSED)
{
/* Clobber the FP when we get here, so we have to make sure it's
marked as used by this function. */
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
/* Mark the static chain as clobbered here so life information
doesn't get messed up for it. */
- emit_insn (gen_rtx_CLOBBER (VOIDmode, static_chain_rtx));
+ emit_clobber (static_chain_rtx);
/* Now put in the code to restore the frame pointer, and argument
pointer, if needed. */
@@ -723,7 +723,7 @@ expand_builtin_setjmp_receiver (rtx receiver_label ATTRIBUTE_UNUSED)
emit_move_insn (virtual_stack_vars_rtx, hard_frame_pointer_rtx);
/* This might change the hard frame pointer in ways that aren't
apparent to early optimization passes, so force a clobber. */
- emit_insn (gen_rtx_CLOBBER (VOIDmode, hard_frame_pointer_rtx));
+ emit_clobber (hard_frame_pointer_rtx);
}
#if ARG_POINTER_REGNUM != HARD_FRAME_POINTER_REGNUM
@@ -822,18 +822,14 @@ expand_builtin_longjmp (rtx buf_addr, rtx value)
{
lab = copy_to_reg (lab);
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- gen_rtx_SCRATCH (VOIDmode))));
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- hard_frame_pointer_rtx)));
+ emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+ emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
emit_move_insn (hard_frame_pointer_rtx, fp);
emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
+ emit_use (stack_pointer_rtx);
emit_indirect_jump (lab);
}
}
@@ -892,13 +888,8 @@ expand_builtin_nonlocal_goto (tree exp)
{
r_label = copy_to_reg (r_label);
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- gen_rtx_SCRATCH (VOIDmode))));
-
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- hard_frame_pointer_rtx)));
+ emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+ emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
/* Restore frame pointer for containing function.
This sets the actual hard register used for the frame pointer
@@ -910,8 +901,8 @@ expand_builtin_nonlocal_goto (tree exp)
/* USE of hard_frame_pointer_rtx added for consistency;
not clear if really needed. */
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
+ emit_use (stack_pointer_rtx);
/* If the architecture is using a GP register, we must
conservatively assume that the target function makes use of it.
@@ -924,7 +915,7 @@ expand_builtin_nonlocal_goto (tree exp)
a no-op if the GP register is a global invariant.) */
if ((unsigned) PIC_OFFSET_TABLE_REGNUM != INVALID_REGNUM
&& fixed_regs[PIC_OFFSET_TABLE_REGNUM])
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
emit_indirect_jump (r_label);
}
@@ -1602,7 +1593,7 @@ expand_builtin_return (rtx result)
emit_move_insn (reg, adjust_address (result, mode, size));
push_to_sequence (call_fusage);
- emit_insn (gen_rtx_USE (VOIDmode, reg));
+ emit_use (reg);
call_fusage = get_insns ();
end_sequence ();
size += GET_MODE_SIZE (mode);
diff --git a/gcc/cfgbuild.c b/gcc/cfgbuild.c
index b4e3baad820..3b9c6faef8e 100644
--- a/gcc/cfgbuild.c
+++ b/gcc/cfgbuild.c
@@ -170,7 +170,7 @@ count_basic_blocks (const_rtx f)
check for the edge case of do-nothing functions with no basic blocks. */
if (count == NUM_FIXED_BLOCKS)
{
- emit_insn (gen_rtx_USE (VOIDmode, const0_rtx));
+ emit_use (const0_rtx);
count = NUM_FIXED_BLOCKS + 1;
}
diff --git a/gcc/cfgrtl.c b/gcc/cfgrtl.c
index 994fb16fc47..8ce39006cf3 100644
--- a/gcc/cfgrtl.c
+++ b/gcc/cfgrtl.c
@@ -2809,7 +2809,7 @@ rtl_flow_call_edges_add (sbitmap blocks)
e = find_edge (bb, EXIT_BLOCK_PTR);
if (e)
{
- insert_insn_on_edge (gen_rtx_USE (VOIDmode, const0_rtx), e);
+ insert_insn_on_edge (gen_use (const0_rtx), e);
commit_edge_insertions ();
}
}
diff --git a/gcc/config/alpha/alpha.md b/gcc/config/alpha/alpha.md
index 768ff38b8bb..fed9efee89e 100644
--- a/gcc/config/alpha/alpha.md
+++ b/gcc/config/alpha/alpha.md
@@ -6948,8 +6948,8 @@
emit_move_insn (hard_frame_pointer_rtx, fp);
emit_move_insn (pv, lab);
emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
+ emit_use (stack_pointer_rtx);
/* Load the label we are jumping through into $27 so that we know
where to look for it when we get back to setjmp's function for
diff --git a/gcc/config/arc/arc.md b/gcc/config/arc/arc.md
index 64f1c449ca1..da435941427 100644
--- a/gcc/config/arc/arc.md
+++ b/gcc/config/arc/arc.md
@@ -313,7 +313,7 @@
;{
; /* Flow doesn't understand that this is effectively a DFmode move.
; It doesn't know that all of `operands[0]' is set. */
-; emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[0]));
+; emit_clobber (operands[0]);
;
; /* Emit insns that movsi_insn can handle. */
; emit_insn (gen_movsi (operand_subword (operands[0], 0, 0, DImode),
@@ -406,7 +406,7 @@
;{
; /* Flow doesn't understand that this is effectively a DFmode move.
; It doesn't know that all of `operands[0]' is set. */
-; emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[0]));
+; emit_clobber (operands[0]);
;
; /* Emit insns that movsi_insn can handle. */
; emit_insn (gen_movsi (operand_subword (operands[0], 0, 0, DFmode),
diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c
index 38d4a2d9d9f..e1ec23b3862 100644
--- a/gcc/config/arm/arm.c
+++ b/gcc/config/arm/arm.c
@@ -3693,7 +3693,7 @@ arm_load_pic_register (unsigned long saved_regs ATTRIBUTE_UNUSED)
/* Need to emit this whether or not we obey regdecls,
since setjmp/longjmp can cause life info to screw up. */
- emit_insn (gen_rtx_USE (VOIDmode, pic_reg));
+ emit_use (pic_reg);
}
@@ -17064,10 +17064,10 @@ thumb1_expand_epilogue (void)
so that flow2 will get register lifetimes correct. */
for (regno = 0; regno < 13; regno++)
if (df_regs_ever_live_p (regno) && !call_used_regs[regno])
- emit_insn (gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (SImode, regno)));
+ emit_clobber (gen_rtx_REG (SImode, regno));
if (! df_regs_ever_live_p (LR_REGNUM))
- emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode, LR_REGNUM)));
+ emit_use (gen_rtx_REG (SImode, LR_REGNUM));
}
static void
@@ -18329,7 +18329,7 @@ thumb_set_return_address (rtx source, rtx scratch)
rtx addr;
unsigned long mask;
- emit_insn (gen_rtx_USE (VOIDmode, source));
+ emit_use (source);
offsets = arm_get_frame_offsets ();
mask = offsets->saved_regs_mask;
diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md
index c66ea74d2af..9cd6e7262a2 100644
--- a/gcc/config/arm/arm.md
+++ b/gcc/config/arm/arm.md
@@ -8785,8 +8785,7 @@
/* Emit USE insns before the return. */
for (i = 0; i < XVECLEN (operands[1], 0); i++)
- emit_insn (gen_rtx_USE (VOIDmode,
- SET_DEST (XVECEXP (operands[1], 0, i))));
+ emit_use (SET_DEST (XVECEXP (operands[1], 0, i)));
/* Construct the return. */
expand_naked_return ();
diff --git a/gcc/config/arm/linux-elf.h b/gcc/config/arm/linux-elf.h
index ca56f7bb669..7036e71f8b3 100644
--- a/gcc/config/arm/linux-elf.h
+++ b/gcc/config/arm/linux-elf.h
@@ -111,7 +111,7 @@
/* The GNU/Linux profiler clobbers the link register. Make sure the
prologue knows to save it. */
#define PROFILE_HOOK(X) \
- emit_insn (gen_rtx_CLOBBER (VOIDmode, gen_rtx_REG (SImode, LR_REGNUM)))
+ emit_clobber (gen_rtx_REG (SImode, LR_REGNUM))
/* The GNU/Linux profiler needs a frame pointer. */
#define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile
diff --git a/gcc/config/avr/avr.c b/gcc/config/avr/avr.c
index bde58f029b6..7135c79610a 100644
--- a/gcc/config/avr/avr.c
+++ b/gcc/config/avr/avr.c
@@ -680,7 +680,7 @@ expand_prologue (void)
RTX_FRAME_RELATED_P (insn) = 1;
/* Prevent any attempt to delete the setting of ZERO_REG! */
- emit_insn (gen_rtx_USE (VOIDmode, zero_reg_rtx));
+ emit_use (zero_reg_rtx);
}
if (minimize && (frame_pointer_needed
|| (AVR_2_BYTE_PC && live_seq > 6)
diff --git a/gcc/config/bfin/bfin.c b/gcc/config/bfin/bfin.c
index d6506b6e09b..a7600cf80e2 100644
--- a/gcc/config/bfin/bfin.c
+++ b/gcc/config/bfin/bfin.c
@@ -1009,12 +1009,12 @@ do_unlink (rtx spreg, HOST_WIDE_INT frame_size, bool all, int epilogue_p)
{
rtx fpreg = gen_rtx_REG (Pmode, REG_FP);
emit_move_insn (fpreg, postinc);
- emit_insn (gen_rtx_USE (VOIDmode, fpreg));
+ emit_use (fpreg);
}
if (! current_function_is_leaf)
{
emit_move_insn (bfin_rets_rtx, postinc);
- emit_insn (gen_rtx_USE (VOIDmode, bfin_rets_rtx));
+ emit_use (bfin_rets_rtx);
}
}
}
diff --git a/gcc/config/bfin/bfin.md b/gcc/config/bfin/bfin.md
index 6b1c1e8e981..1388266400b 100644
--- a/gcc/config/bfin/bfin.md
+++ b/gcc/config/bfin/bfin.md
@@ -904,7 +904,7 @@
enum insn_code icode = CODE_FOR_<optab>si3;
if (!reg_overlap_mentioned_p (operands[0], operands[1])
&& !reg_overlap_mentioned_p (operands[0], operands[2]))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[0]));
+ emit_clobber (operands[0]);
split_di (operands, 3, lo_half, hi_half);
if (!(*insn_data[icode].operand[2].predicate) (lo_half[2], SImode))
lo_half[2] = force_reg (SImode, lo_half[2]);
@@ -1022,7 +1022,7 @@
xops[4] = force_reg (SImode, xops[4]);
if (!reg_overlap_mentioned_p (operands[0], operands[1])
&& !reg_overlap_mentioned_p (operands[0], operands[2]))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[0]));
+ emit_clobber (operands[0]);
emit_insn (gen_add_with_carry (xops[0], xops[2], xops[4], xops[7]));
emit_insn (gen_movbisi (xops[6], xops[7]));
if (!register_operand (xops[5], SImode)
@@ -1055,7 +1055,7 @@
xops[7] = gen_rtx_REG (BImode, REG_CC);
if (!reg_overlap_mentioned_p (operands[0], operands[1])
&& !reg_overlap_mentioned_p (operands[0], operands[2]))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[0]));
+ emit_clobber (operands[0]);
emit_insn (gen_sub_with_carry (xops[0], xops[2], xops[4], xops[7]));
emit_insn (gen_notbi (xops[7], xops[7]));
emit_insn (gen_movbisi (xops[6], xops[7]));
diff --git a/gcc/config/cris/cris.c b/gcc/config/cris/cris.c
index b197956b774..810366f5681 100644
--- a/gcc/config/cris/cris.c
+++ b/gcc/config/cris/cris.c
@@ -3002,7 +3002,7 @@ cris_expand_prologue (void)
the GOT register load as maybe-dead. To see this, remove the
line below and try libsupc++/vec.cc or a trivial
"static void y (); void x () {try {y ();} catch (...) {}}". */
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
}
if (cris_max_stackframe && framesize > cris_max_stackframe)
diff --git a/gcc/config/darwin.c b/gcc/config/darwin.c
index 38899833341..5461fe083e0 100644
--- a/gcc/config/darwin.c
+++ b/gcc/config/darwin.c
@@ -555,7 +555,7 @@ machopic_indirect_data_reference (rtx orig, rtx reg)
emit_insn (gen_rtx_SET (VOIDmode, reg,
gen_rtx_LO_SUM (Pmode, reg,
copy_rtx (offset))));
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
orig = gen_rtx_PLUS (Pmode, pic_offset_table_rtx, reg);
#endif
@@ -756,9 +756,7 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
pic_ref = reg;
#else
- emit_insn (gen_rtx_USE (VOIDmode,
- gen_rtx_REG (Pmode,
- PIC_OFFSET_TABLE_REGNUM)));
+ emit_use (gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM));
emit_insn (gen_rtx_SET (VOIDmode, reg,
gen_rtx_HIGH (Pmode,
@@ -782,9 +780,7 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
pic = reg;
}
#if 0
- emit_insn (gen_rtx_USE (VOIDmode,
- gen_rtx_REG (Pmode,
- PIC_OFFSET_TABLE_REGNUM)));
+ emit_use (gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM));
#endif
if (reload_in_progress)
@@ -857,8 +853,7 @@ machopic_legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
pic = reg;
}
#if 0
- emit_insn (gen_rtx_USE (VOIDmode,
- pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
#endif
if (reload_in_progress)
df_set_regs_ever_live (REGNO (pic), true);
diff --git a/gcc/config/frv/frv.c b/gcc/config/frv/frv.c
index ef9aa51b9c5..93648ccf39d 100644
--- a/gcc/config/frv/frv.c
+++ b/gcc/config/frv/frv.c
@@ -1682,7 +1682,7 @@ frv_frame_access (frv_frame_accessor_t *accessor, rtx reg, int stack_offset)
}
else
emit_insn (gen_rtx_SET (VOIDmode, reg, mem));
- emit_insn (gen_rtx_USE (VOIDmode, reg));
+ emit_use (reg);
}
else
{
@@ -1946,7 +1946,7 @@ frv_expand_epilogue (bool emit_return)
if (frame_pointer_needed)
{
emit_insn (gen_rtx_SET (VOIDmode, fp, gen_rtx_MEM (Pmode, fp)));
- emit_insn (gen_rtx_USE (VOIDmode, fp));
+ emit_use (fp);
}
/* Deallocate the stack frame. */
@@ -1972,7 +1972,7 @@ frv_expand_epilogue (bool emit_return)
emit_move_insn (lr, return_addr);
}
- emit_insn (gen_rtx_USE (VOIDmode, lr));
+ emit_use (lr);
}
}
@@ -5999,7 +5999,7 @@ frv_ifcvt_modify_insn (ce_if_block_t *ce_info,
goto fail;
}
- frv_ifcvt_add_insn (gen_rtx_USE (VOIDmode, dest), insn, FALSE);
+ frv_ifcvt_add_insn (gen_use (dest), insn, FALSE);
}
/* If we are just loading a constant created for a nested conditional
@@ -9099,8 +9099,8 @@ frv_expand_mdpackh_builtin (tree call, rtx target)
/* The high half of each word is not explicitly initialized, so indicate
that the input operands are not live before this point. */
- emit_insn (gen_rtx_CLOBBER (DImode, op0));
- emit_insn (gen_rtx_CLOBBER (DImode, op1));
+ emit_clobber (op0);
+ emit_clobber (op1);
/* Move each argument into the low half of its associated input word. */
emit_move_insn (simplify_gen_subreg (HImode, op0, DImode, 2), arg1);
diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c
index 6640c62c9f7..16e74228ddf 100644
--- a/gcc/config/i386/i386.c
+++ b/gcc/config/i386/i386.c
@@ -10549,7 +10549,7 @@ ix86_expand_vector_move_misalign (enum machine_mode mode, rtx operands[])
writing to the top half twice. */
if (TARGET_SSE_SPLIT_REGS)
{
- emit_insn (gen_rtx_CLOBBER (VOIDmode, op0));
+ emit_clobber (op0);
zero = op0;
}
else
@@ -10583,7 +10583,7 @@ ix86_expand_vector_move_misalign (enum machine_mode mode, rtx operands[])
if (TARGET_SSE_PARTIAL_REG_DEPENDENCY)
emit_move_insn (op0, CONST0_RTX (mode));
else
- emit_insn (gen_rtx_CLOBBER (VOIDmode, op0));
+ emit_clobber (op0);
if (mode != V4SFmode)
op0 = gen_lowpart (V4SFmode, op0);
@@ -10976,7 +10976,7 @@ ix86_expand_convert_uns_didf_sse (rtx target, rtx input)
emit_insn (gen_movdi_to_sse (int_xmm, input));
else if (TARGET_SSE_SPLIT_REGS)
{
- emit_insn (gen_rtx_CLOBBER (VOIDmode, int_xmm));
+ emit_clobber (int_xmm);
emit_move_insn (gen_lowpart (DImode, int_xmm), input);
}
else
@@ -24184,7 +24184,7 @@ ix86_expand_vector_init_general (bool mmx_ok, enum machine_mode mode,
else if (n_words == 2)
{
rtx tmp = gen_reg_rtx (mode);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, tmp));
+ emit_clobber (tmp);
emit_move_insn (gen_lowpart (word_mode, tmp), words[0]);
emit_move_insn (gen_highpart (word_mode, tmp), words[1]);
emit_move_insn (target, tmp);
diff --git a/gcc/config/ia64/ia64.md b/gcc/config/ia64/ia64.md
index 7135bf4da58..cf746f52b68 100644
--- a/gcc/config/ia64/ia64.md
+++ b/gcc/config/ia64/ia64.md
@@ -6332,8 +6332,8 @@
emit_move_insn (sp, operands[2]);
operands[2] = sp;
}
- emit_insn (gen_rtx_USE (VOIDmode, sp));
- emit_insn (gen_rtx_USE (VOIDmode, bsp));
+ emit_use (sp);
+ emit_use (bsp);
cfun->machine->ia64_eh_epilogue_sp = sp;
cfun->machine->ia64_eh_epilogue_bsp = bsp;
diff --git a/gcc/config/iq2000/iq2000.c b/gcc/config/iq2000/iq2000.c
index 7ee5eda9407..2d20a4ba4c2 100644
--- a/gcc/config/iq2000/iq2000.c
+++ b/gcc/config/iq2000/iq2000.c
@@ -2085,8 +2085,7 @@ iq2000_expand_epilogue (void)
/* Perform the additional bump for __throw. */
emit_move_insn (gen_rtx_REG (Pmode, HARD_FRAME_POINTER_REGNUM),
stack_pointer_rtx);
- emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (Pmode,
- HARD_FRAME_POINTER_REGNUM)));
+ emit_use (gen_rtx_REG (Pmode, HARD_FRAME_POINTER_REGNUM));
emit_jump_insn (gen_eh_return_internal ());
}
else
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c
index 697e42a7948..b0733dd8364 100644
--- a/gcc/config/m32c/m32c.c
+++ b/gcc/config/m32c/m32c.c
@@ -4079,7 +4079,7 @@ m32c_emit_eh_epilogue (rtx ret_addr)
(fudged), and return (fudged). This is actually easier to do in
assembler, so punt to libgcc. */
emit_jump_insn (gen_eh_epilogue (ret_addr, cfun->machine->eh_stack_adjust));
- /* emit_insn (gen_rtx_CLOBBER (HImode, gen_rtx_REG (HImode, R0L_REGNO))); */
+ /* emit_clobber (gen_rtx_REG (HImode, R0L_REGNO)); */
emit_barrier ();
}
diff --git a/gcc/config/m32r/m32r.c b/gcc/config/m32r/m32r.c
index 64b7e5f63ab..23e7851b160 100644
--- a/gcc/config/m32r/m32r.c
+++ b/gcc/config/m32r/m32r.c
@@ -1349,7 +1349,7 @@ m32r_reload_lr (rtx sp, int size)
emit_insn (gen_movsi (lr, gen_frame_mem (Pmode, tmp)));
}
- emit_insn (gen_rtx_USE (VOIDmode, lr));
+ emit_use (lr);
}
void
@@ -1361,7 +1361,7 @@ m32r_load_pic_register (void)
/* Need to emit this whether or not we obey regdecls,
since setjmp/longjmp can cause life info to screw up. */
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
}
/* Expand the m32r prologue as a series of insns. */
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 592ad528042..921e416bd0e 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -2912,7 +2912,7 @@
/* Allow REG_NOTES to be set on last insn (labels don't have enough
fields, and can't be used for REG_NOTES anyway). */
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (stack_pointer_rtx);
DONE;
}
})
@@ -2955,7 +2955,7 @@
/* Allow REG_NOTES to be set on last insn (labels don't have enough
fields, and can't be used for REG_NOTES anyway). */
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (stack_pointer_rtx);
DONE;
})
@@ -2997,7 +2997,7 @@
/* Allow REG_NOTES to be set on last insn (labels don't have enough
fields, and can't be used for REG_NOTES anyway). */
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (stack_pointer_rtx);
DONE;
})
@@ -3039,7 +3039,7 @@
/* Allow REG_NOTES to be set on last insn (labels don't have enough
fields, and can't be used for REG_NOTES anyway). */
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (stack_pointer_rtx);
DONE;
})
@@ -5685,9 +5685,9 @@
mips_emit_move (pv, lab);
emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
mips_emit_move (gp, gpv);
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, gp));
+ emit_use (hard_frame_pointer_rtx);
+ emit_use (stack_pointer_rtx);
+ emit_use (gp);
emit_indirect_jump (pv);
DONE;
})
diff --git a/gcc/config/mn10300/mn10300.md b/gcc/config/mn10300/mn10300.md
index 57c51625b22..73043e99b1a 100644
--- a/gcc/config/mn10300/mn10300.md
+++ b/gcc/config/mn10300/mn10300.md
@@ -1807,7 +1807,7 @@
shared library support for AM30 either, so we just assume
the linker is going to adjust all @PLT relocs to the
actual symbols. */
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
XEXP (operands[0], 0) = gen_sym2PLT (XEXP (operands[0], 0));
}
else
@@ -1852,7 +1852,7 @@
shared library support for AM30 either, so we just assume
the linker is going to adjust all @PLT relocs to the
actual symbols. */
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
XEXP (operands[1], 0) = gen_sym2PLT (XEXP (operands[1], 0));
}
else
diff --git a/gcc/config/pa/pa.md b/gcc/config/pa/pa.md
index a5dc031c91c..c3d686db5c4 100644
--- a/gcc/config/pa/pa.md
+++ b/gcc/config/pa/pa.md
@@ -7432,12 +7432,8 @@
lab = copy_to_reg (lab);
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- gen_rtx_SCRATCH (VOIDmode))));
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- hard_frame_pointer_rtx)));
+ emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+ emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
/* Restore the frame pointer. The virtual_stack_vars_rtx is saved
instead of the hard_frame_pointer_rtx in the save area. As a
@@ -7449,8 +7445,8 @@
emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
+ emit_use (stack_pointer_rtx);
/* Nonlocal goto jumps are only used between functions in the same
translation unit. Thus, we can avoid the extra overhead of an
@@ -8892,12 +8888,8 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
(POINTER_SIZE * 2) / BITS_PER_UNIT));
rtx pv = gen_rtx_REG (Pmode, 1);
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- gen_rtx_SCRATCH (VOIDmode))));
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- hard_frame_pointer_rtx)));
+ emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+ emit_clobber (gen_rtx_MEM (BLKmode, hard_frame_pointer_rtx));
/* Restore the frame pointer. The virtual_stack_vars_rtx is saved
instead of the hard_frame_pointer_rtx in the save area. We need
@@ -8913,8 +8905,8 @@ add,l %2,%3,%3\;bv,n %%r0(%3)"
/* This bit is the same as expand_builtin_longjmp. */
emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
+ emit_use (stack_pointer_rtx);
/* Load the label we are jumping through into r1 so that we know
where to look for it when we get back to setjmp's function for
diff --git a/gcc/config/pdp11/pdp11.md b/gcc/config/pdp11/pdp11.md
index 385c11c5aa3..32b3e92e9c9 100644
--- a/gcc/config/pdp11/pdp11.md
+++ b/gcc/config/pdp11/pdp11.md
@@ -1593,7 +1593,7 @@
;
; /* allow REG_NOTES to be set on last insn (labels don't have enough
; fields, and can't be used for REG_NOTES anyway). */
-; emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
+; emit_use (stack_pointer_rtx);
; DONE;
;}")
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 54b38ce843b..19734767797 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -5000,7 +5000,7 @@ rs6000_emit_move (rtx dest, rtx source, enum machine_mode mode)
This should not be done for operands that contain LABEL_REFs.
For now, we just handle the obvious case. */
if (GET_CODE (operands[1]) != LABEL_REF)
- emit_insn (gen_rtx_USE (VOIDmode, operands[1]));
+ emit_use (operands[1]);
#if TARGET_MACHO
/* Darwin uses a special PIC legitimizer. */
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index 5ffbcaef338..ff2edecb223 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -7797,7 +7797,7 @@ s390_emit_prologue (void)
if (TARGET_BACKCHAIN && flag_non_call_exceptions)
{
addr = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode));
- emit_insn (gen_rtx_CLOBBER (VOIDmode, addr));
+ emit_clobber (addr);
}
}
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index f97e756518f..d33cc5c3267 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -2494,11 +2494,11 @@
rtx len0 = gen_lowpart (Pmode, reg0);
rtx len1 = gen_lowpart (Pmode, reg1);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg0));
+ emit_clobber (reg0);
emit_move_insn (addr0, force_operand (XEXP (operands[0], 0), NULL_RTX));
emit_move_insn (len0, operands[2]);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1));
+ emit_clobber (reg1);
emit_move_insn (addr1, force_operand (XEXP (operands[1], 0), NULL_RTX));
emit_move_insn (len1, operands[2]);
@@ -2694,7 +2694,7 @@
rtx addr0 = gen_lowpart (Pmode, gen_highpart (word_mode, reg0));
rtx len0 = gen_lowpart (Pmode, reg0);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg0));
+ emit_clobber (reg0);
emit_move_insn (addr0, force_operand (XEXP (operands[0], 0), NULL_RTX));
emit_move_insn (len0, operands[1]);
@@ -2850,11 +2850,11 @@
rtx len0 = gen_lowpart (Pmode, reg0);
rtx len1 = gen_lowpart (Pmode, reg1);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg0));
+ emit_clobber (reg0);
emit_move_insn (addr0, force_operand (XEXP (operands[0], 0), NULL_RTX));
emit_move_insn (len0, operands[2]);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg1));
+ emit_clobber (reg1);
emit_move_insn (addr1, force_operand (XEXP (operands[1], 0), NULL_RTX));
emit_move_insn (len1, operands[2]);
@@ -3215,7 +3215,7 @@
{
if (!TARGET_64BIT)
{
- emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[0]));
+ emit_clobber (operands[0]);
emit_move_insn (gen_highpart (SImode, operands[0]), operands[1]);
emit_move_insn (gen_lowpart (SImode, operands[0]), const0_rtx);
emit_insn (gen_ashrdi3 (operands[0], operands[0], GEN_INT (32)));
@@ -3365,7 +3365,7 @@
{
if (!TARGET_64BIT)
{
- emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[0]));
+ emit_clobber (operands[0]);
emit_move_insn (gen_lowpart (SImode, operands[0]), operands[1]);
emit_move_insn (gen_highpart (SImode, operands[0]), const0_rtx);
DONE;
@@ -5116,7 +5116,7 @@
gen_rtx_ZERO_EXTEND (TImode, div_equal));
operands[4] = gen_reg_rtx(TImode);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[4]));
+ emit_clobber (operands[4]);
emit_move_insn (gen_lowpart (DImode, operands[4]), operands[1]);
emit_move_insn (gen_highpart (DImode, operands[4]), const0_rtx);
@@ -5234,7 +5234,7 @@
gen_rtx_ZERO_EXTEND (DImode, div_equal));
operands[4] = gen_reg_rtx(DImode);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, operands[4]));
+ emit_clobber (operands[4]);
emit_move_insn (gen_lowpart (SImode, operands[4]), operands[1]);
emit_move_insn (gen_highpart (SImode, operands[4]), const0_rtx);
@@ -8004,7 +8004,7 @@
"flag_pic"
{
emit_insn (s390_load_got ());
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
DONE;
})
@@ -8087,7 +8087,7 @@
if (temp)
emit_move_insn (s390_back_chain_rtx (), temp);
- emit_insn (gen_rtx_USE (VOIDmode, base));
+ emit_use (base);
DONE;
})
diff --git a/gcc/config/sh/sh.c b/gcc/config/sh/sh.c
index 3af0ee8cff1..71419ec61de 100644
--- a/gcc/config/sh/sh.c
+++ b/gcc/config/sh/sh.c
@@ -1371,8 +1371,7 @@ prepare_move_operands (rtx operands[], enum machine_mode mode)
if (flag_schedule_insns)
emit_insn (gen_blockage ());
emit_insn (gen_GOTaddr2picreg ());
- emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode,
- PIC_REG)));
+ emit_use (gen_rtx_REG (SImode, PIC_REG));
if (flag_schedule_insns)
emit_insn (gen_blockage ());
}
@@ -5723,8 +5722,8 @@ output_stack_adjust (int size, rtx reg, int epilogue_p,
mem = gen_tmp_stack_mem (Pmode, gen_rtx_POST_INC (Pmode, reg));
emit_move_insn (tmp_reg, mem);
/* Tell flow the insns that pop r4/r5 aren't dead. */
- emit_insn (gen_rtx_USE (VOIDmode, tmp_reg));
- emit_insn (gen_rtx_USE (VOIDmode, adj_reg));
+ emit_use (tmp_reg);
+ emit_use (adj_reg);
return;
}
const_reg = gen_rtx_REG (GET_MODE (reg), temp);
@@ -6862,7 +6861,7 @@ sh_expand_epilogue (bool sibcall_p)
USE PR_MEDIA_REG, since it will be explicitly copied to TR0_REG
by the return pattern. */
if (TEST_HARD_REG_BIT (live_regs_mask, PR_REG))
- emit_insn (gen_rtx_USE (VOIDmode, gen_rtx_REG (SImode, PR_REG)));
+ emit_use (gen_rtx_REG (SImode, PR_REG));
}
static int sh_need_epilogue_known = 0;
@@ -6916,7 +6915,7 @@ sh_set_return_address (rtx ra, rtx tmp)
emit_insn (GEN_MOV (rr, ra));
/* Tell flow the register for return isn't dead. */
- emit_insn (gen_rtx_USE (VOIDmode, rr));
+ emit_use (rr);
return;
}
@@ -10714,7 +10713,7 @@ sh_expand_t_scc (enum rtx_code code, rtx target)
emit_insn (gen_movrt (result));
else if ((code == EQ && val == 0) || (code == NE && val == 1))
{
- emit_insn (gen_rtx_CLOBBER (VOIDmode, result));
+ emit_clobber (result);
emit_insn (gen_subc (result, result, result));
emit_insn (gen_addsi3 (result, result, const1_rtx));
}
diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c
index c1cc725334c..009ab3a2bcf 100644
--- a/gcc/config/sparc/sparc.c
+++ b/gcc/config/sparc/sparc.c
@@ -3427,7 +3427,7 @@ load_pic_register (bool delay_pic_helper)
if (TARGET_VXWORKS_RTP)
{
emit_insn (gen_vxworks_load_got ());
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
return;
}
@@ -3457,7 +3457,7 @@ load_pic_register (bool delay_pic_helper)
since setjmp/longjmp can cause life info to screw up.
??? In the case where we don't obey regdecls, this is not sufficient
since we may not fall out the bottom. */
- emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+ emit_use (pic_offset_table_rtx);
}
/* Emit a call instruction with the pattern given by PAT. ADDR is the
diff --git a/gcc/config/sparc/sparc.md b/gcc/config/sparc/sparc.md
index c02c7094df2..bc29bcf819c 100644
--- a/gcc/config/sparc/sparc.md
+++ b/gcc/config/sparc/sparc.md
@@ -7104,8 +7104,8 @@
adjust_address (result, TARGET_ARCH64 ? TFmode : DFmode, 8));
/* Put USE insns before the return. */
- emit_insn (gen_rtx_USE (VOIDmode, valreg1));
- emit_insn (gen_rtx_USE (VOIDmode, valreg2));
+ emit_use (valreg1);
+ emit_use (valreg2);
/* Construct the return. */
expand_naked_return ();
@@ -7191,8 +7191,8 @@
and reload the appropriate value into %fp. */
emit_move_insn (hard_frame_pointer_rtx, stack);
- emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
- emit_insn (gen_rtx_USE (VOIDmode, static_chain_rtx));
+ emit_use (stack_pointer_rtx);
+ emit_use (static_chain_rtx);
/* ??? The V9-specific version was disabled in rev 1.65. */
emit_jump_insn (gen_goto_handler_and_restore (labreg));
diff --git a/gcc/config/spu/spu.c b/gcc/config/spu/spu.c
index de307ab32ed..b944a00e5bf 100644
--- a/gcc/config/spu/spu.c
+++ b/gcc/config/spu/spu.c
@@ -1906,8 +1906,7 @@ spu_expand_epilogue (bool sibcall_p)
if (!sibcall_p)
{
- emit_insn (gen_rtx_USE
- (VOIDmode, gen_rtx_REG (SImode, LINK_REGISTER_REGNUM)));
+ emit_use (gen_rtx_REG (SImode, LINK_REGISTER_REGNUM));
jump = emit_jump_insn (gen__return ());
emit_barrier_after (jump);
}
diff --git a/gcc/config/v850/v850.c b/gcc/config/v850/v850.c
index 2a0f3093641..b9f11b1583f 100644
--- a/gcc/config/v850/v850.c
+++ b/gcc/config/v850/v850.c
@@ -1909,7 +1909,7 @@ Saved %d bytes via epilogue function (%d vs. %d) in function %s\n",
plus_constant (stack_pointer_rtx,
offset)));
- emit_insn (gen_rtx_USE (VOIDmode, restore_regs[i]));
+ emit_use (restore_regs[i]);
offset -= 4;
}
diff --git a/gcc/emit-rtl.c b/gcc/emit-rtl.c
index 45a256347c0..1194ad79b81 100644
--- a/gcc/emit-rtl.c
+++ b/gcc/emit-rtl.c
@@ -4548,6 +4548,62 @@ emit_note (enum insn_note kind)
return note;
}
+/* Emit a clobber of lvalue X. */
+
+rtx
+emit_clobber (rtx x)
+{
+ /* CONCATs should not appear in the insn stream. */
+ if (GET_CODE (x) == CONCAT)
+ {
+ emit_clobber (XEXP (x, 0));
+ return emit_clobber (XEXP (x, 1));
+ }
+ return emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+}
+
+/* Return a sequence of insns to clobber lvalue X. */
+
+rtx
+gen_clobber (rtx x)
+{
+ rtx seq;
+
+ start_sequence ();
+ emit_clobber (x);
+ seq = get_insns ();
+ end_sequence ();
+ return seq;
+}
+
+/* Emit a use of rvalue X. */
+
+rtx
+emit_use (rtx x)
+{
+ /* CONCATs should not appear in the insn stream. */
+ if (GET_CODE (x) == CONCAT)
+ {
+ emit_use (XEXP (x, 0));
+ return emit_use (XEXP (x, 1));
+ }
+ return emit_insn (gen_rtx_USE (VOIDmode, x));
+}
+
+/* Return a sequence of insns to use rvalue X. */
+
+rtx
+gen_use (rtx x)
+{
+ rtx seq;
+
+ start_sequence ();
+ emit_use (x);
+ seq = get_insns ();
+ end_sequence ();
+ return seq;
+}
+
/* Cause next statement to emit a line note even if the line number
has not changed. */
diff --git a/gcc/explow.c b/gcc/explow.c
index d3cc01b9701..d573836d293 100644
--- a/gcc/explow.c
+++ b/gcc/explow.c
@@ -1016,11 +1016,8 @@ emit_stack_restore (enum save_level save_level, rtx sa, rtx after)
/* These clobbers prevent the scheduler from moving
references to variable arrays below the code
that deletes (pops) the arrays. */
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode,
- gen_rtx_SCRATCH (VOIDmode))));
- emit_insn (gen_rtx_CLOBBER (VOIDmode,
- gen_rtx_MEM (BLKmode, stack_pointer_rtx)));
+ emit_clobber (gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (VOIDmode)));
+ emit_clobber (gen_rtx_MEM (BLKmode, stack_pointer_rtx));
}
discard_pending_stack_adjust ();
diff --git a/gcc/expmed.c b/gcc/expmed.c
index ab5057a9e8f..27ff0c063cf 100644
--- a/gcc/expmed.c
+++ b/gcc/expmed.c
@@ -1374,7 +1374,7 @@ extract_bit_field_1 (rtx str_rtx, unsigned HOST_WIDE_INT bitsize,
target = gen_reg_rtx (mode);
/* Indicate for flow that the entire target reg is being set. */
- emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
+ emit_clobber (target);
for (i = 0; i < nwords; i++)
{
diff --git a/gcc/expr.c b/gcc/expr.c
index e2693d84740..d55a2797fb5 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -557,7 +557,7 @@ convert_move (rtx to, rtx from, int unsignedp)
{
if (reg_overlap_mentioned_p (to, from))
from = force_reg (from_mode, from);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, to));
+ emit_clobber (to);
}
convert_move (word_to, from, unsignedp);
emit_unop_insn (code, to, word_to, equiv_code);
@@ -3108,7 +3108,7 @@ emit_move_complex_parts (rtx x, rtx y)
hard regs shouldn't appear here except as return values. */
if (!reload_completed && !reload_in_progress
&& REG_P (x) && !reg_overlap_mentioned_p (x, y))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+ emit_clobber (x);
write_complex_part (x, read_complex_part (y, false), false);
write_complex_part (x, read_complex_part (y, true), true);
@@ -3305,7 +3305,7 @@ emit_move_multi_word (enum machine_mode mode, rtx x, rtx y)
if (x != y
&& ! (reload_in_progress || reload_completed)
&& need_clobber != 0)
- emit_insn (gen_rtx_CLOBBER (VOIDmode, x));
+ emit_clobber (x);
emit_insn (seq);
@@ -5160,7 +5160,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
}
if (REG_P (target) && !cleared)
- emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
+ emit_clobber (target);
/* Store each element of the constructor into the
corresponding field of TARGET. */
@@ -5360,7 +5360,7 @@ store_constructor (tree exp, rtx target, int cleared, HOST_WIDE_INT size)
if (!cleared && REG_P (target))
/* Inform later passes that the old value is dead. */
- emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
+ emit_clobber (target);
/* Store each element of the constructor into the
corresponding element of TARGET, determined by counting the
diff --git a/gcc/function.c b/gcc/function.c
index 845017f7124..bb4a2e6ab68 100644
--- a/gcc/function.c
+++ b/gcc/function.c
@@ -4311,7 +4311,7 @@ diddle_return_value (void (*doit) (rtx, void *), void *arg)
static void
do_clobber_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
{
- emit_insn (gen_rtx_CLOBBER (VOIDmode, reg));
+ emit_clobber (reg);
}
void
@@ -4334,7 +4334,7 @@ clobber_return_register (void)
static void
do_use_return_reg (rtx reg, void *arg ATTRIBUTE_UNUSED)
{
- emit_insn (gen_rtx_USE (VOIDmode, reg));
+ emit_use (reg);
}
static void
@@ -4740,7 +4740,7 @@ thread_prologue_and_epilogue_insns (void)
/* Insert an explicit USE for the frame pointer
if the profiling is on and the frame pointer is required. */
if (crtl->profile && frame_pointer_needed)
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
/* Retain a map of the prologue insns. */
record_insns (seq, &prologue);
diff --git a/gcc/lower-subreg.c b/gcc/lower-subreg.c
index 219226048ff..a9e7da998a4 100644
--- a/gcc/lower-subreg.c
+++ b/gcc/lower-subreg.c
@@ -836,7 +836,7 @@ resolve_simple_move (rtx set, rtx insn)
unsigned int i;
if (REG_P (dest) && !HARD_REGISTER_NUM_P (REGNO (dest)))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, dest));
+ emit_clobber (dest);
for (i = 0; i < words; ++i)
emit_move_insn (simplify_gen_subreg_concatn (word_mode, dest,
diff --git a/gcc/optabs.c b/gcc/optabs.c
index b3517697ff2..bd054edce18 100644
--- a/gcc/optabs.c
+++ b/gcc/optabs.c
@@ -329,7 +329,7 @@ widen_operand (rtx op, enum machine_mode mode, enum machine_mode oldmode,
part to OP. */
result = gen_reg_rtx (mode);
- emit_insn (gen_rtx_CLOBBER (VOIDmode, result));
+ emit_clobber (result);
emit_move_insn (gen_lowpart (GET_MODE (op), result), op);
return result;
}
@@ -1998,7 +1998,7 @@ expand_binop (enum machine_mode mode, optab binoptab, rtx op0, rtx op1,
/* Indicate for flow that the entire target reg is being set. */
if (REG_P (target))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, xtarget));
+ emit_clobber (xtarget);
/* Do the actual arithmetic. */
for (i = 0; i < nwords; i++)
@@ -2755,7 +2755,7 @@ expand_doubleword_bswap (enum machine_mode mode, rtx op, rtx target)
if (target == 0)
target = gen_reg_rtx (mode);
if (REG_P (target))
- emit_insn (gen_rtx_CLOBBER (VOIDmode, target));
+ emit_clobber (target);
emit_move_insn (operand_subword (target, 0, 1, mode), t0);
emit_move_insn (operand_subword (target, 1, 1, mode), t1);
diff --git a/gcc/reload.c b/gcc/reload.c
index 7472272d9c4..ad0a04f6633 100644
--- a/gcc/reload.c
+++ b/gcc/reload.c
@@ -4083,7 +4083,7 @@ find_reloads (rtx insn, int replace, int ind_levels, int live_known,
PUT_MODE (emit_insn_before (gen_rtx_USE (VOIDmode, operand),
insn), QImode);
if (modified[i] != RELOAD_READ)
- emit_insn_after (gen_rtx_CLOBBER (VOIDmode, operand), insn);
+ emit_insn_after (gen_clobber (operand), insn);
}
}
}
diff --git a/gcc/reload1.c b/gcc/reload1.c
index 51d3f4c4d19..7f413665747 100644
--- a/gcc/reload1.c
+++ b/gcc/reload1.c
@@ -3316,14 +3316,13 @@ eliminate_regs_in_insn (rtx insn, int replace)
this point. */
*recog_data.operand_loc[i] = 0;
- /* If an output operand changed from a REG to a MEM and INSN is an
- insn, write a CLOBBER insn. */
+ /* If an output operand changed from a REG to a MEM and INSN is an
+ insn, write a CLOBBER insn. */
if (recog_data.operand_type[i] != OP_IN
&& REG_P (orig_operand[i])
&& MEM_P (substed_operand[i])
&& replace)
- emit_insn_after (gen_rtx_CLOBBER (VOIDmode, orig_operand[i]),
- insn);
+ emit_insn_after (gen_clobber (orig_operand[i]), insn);
}
}
diff --git a/gcc/rtl.h b/gcc/rtl.h
index e9dbb3b8d30..2e0884f8f56 100644
--- a/gcc/rtl.h
+++ b/gcc/rtl.h
@@ -1609,6 +1609,10 @@ extern rtx emit_label (rtx);
extern rtx emit_barrier (void);
extern rtx emit_note (enum insn_note);
extern rtx emit_note_copy (rtx);
+extern rtx gen_clobber (rtx);
+extern rtx emit_clobber (rtx);
+extern rtx gen_use (rtx);
+extern rtx emit_use (rtx);
extern rtx make_insn_raw (rtx);
extern rtx make_jump_insn_raw (rtx);
extern void add_function_usage_to (rtx, rtx);
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 57e8ad4db7e..00dd59ce463 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -1775,11 +1775,11 @@ expand_nl_goto_receiver (void)
{
/* Clobber the FP when we get here, so we have to make sure it's
marked as used by this function. */
- emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
+ emit_use (hard_frame_pointer_rtx);
/* Mark the static chain as clobbered here so life information
doesn't get messed up for it. */
- emit_insn (gen_rtx_CLOBBER (VOIDmode, static_chain_rtx));
+ emit_clobber (static_chain_rtx);
#ifdef HAVE_nonlocal_goto
if (! HAVE_nonlocal_goto)