rtl.h (emit_clobber, [...]): Declare.
authorRichard Sandiford <rdsandiford@googlemail.com>
Sun, 1 Jun 2008 09:47:28 +0000 (09:47 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 1 Jun 2008 09:47:28 +0000 (09:47 +0000)
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.

From-SVN: r136251

43 files changed:
gcc/ChangeLog
gcc/builtins.c
gcc/cfgbuild.c
gcc/cfgrtl.c
gcc/config/alpha/alpha.md
gcc/config/arc/arc.md
gcc/config/arm/arm.c
gcc/config/arm/arm.md
gcc/config/arm/linux-elf.h
gcc/config/avr/avr.c
gcc/config/bfin/bfin.c
gcc/config/bfin/bfin.md
gcc/config/cris/cris.c
gcc/config/darwin.c
gcc/config/frv/frv.c
gcc/config/i386/i386.c
gcc/config/ia64/ia64.md
gcc/config/iq2000/iq2000.c
gcc/config/m32c/m32c.c
gcc/config/m32r/m32r.c
gcc/config/mips/mips.md
gcc/config/mn10300/mn10300.md
gcc/config/pa/pa.md
gcc/config/pdp11/pdp11.md
gcc/config/rs6000/rs6000.c
gcc/config/s390/s390.c
gcc/config/s390/s390.md
gcc/config/sh/sh.c
gcc/config/sparc/sparc.c
gcc/config/sparc/sparc.md
gcc/config/spu/spu.c
gcc/config/v850/v850.c
gcc/emit-rtl.c
gcc/explow.c
gcc/expmed.c
gcc/expr.c
gcc/function.c
gcc/lower-subreg.c
gcc/optabs.c
gcc/reload.c
gcc/reload1.c
gcc/rtl.h
gcc/stmt.c

index e50465a7631b2e462773dd67165aaacf06132791..e990443a4bcf54e0a77adaa44eb9ec49e6f91ade 100644 (file)
@@ -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.
index 77cd48beaed6924dcf602e0500e517ec5ea04d01..05eb6bbdd985c975a6303e8b2d1093fb36c22bbb 100644 (file)
@@ -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);
index b4e3baad8201683f90b39e267e04bfa2439dadb7..3b9c6faef8e504d4da16218872bfad667b35aff3 100644 (file)
@@ -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;
     }
 
index 994fb16fc47fba48577bd7bfc58e584b9d2b5e77..8ce39006cf346167e92a7eb530cf765625c3ad45 100644 (file)
@@ -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 ();
            }
        }
index 768ff38b8bb11059382e51cf1192fe79bcbed316..fed9efee89eb0cb308ccfbb9feeeac5c234c6681 100644 (file)
   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
index 64f1c449ca171f96f4a0cdf1162ff4f27100fa57..da435941427f742622dc4c04dac3d7f842b0c51b 100644 (file)
 ;{
 ;  /* 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),
 ;{
 ;  /* 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),
index 38d4a2d9d9f150c524f4f25f9a674389d915da69..e1ec23b3862c13608420ab4d51c60a79e9dc29bc 100644 (file)
@@ -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;
index c66ea74d2afd231796ea650dfc266437609811d0..9cd6e7262a25155d38d9a06e9f2d85bc611f8369 100644 (file)
 
     /* 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 ();
index ca56f7bb66905f622ab9667ef35f91fd54816cf2..7036e71f8b3cdd1ae9f1adc6171e08ec50a44ddc 100644 (file)
 /* 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
index bde58f029b60c4b1e4f211cd0bd76bf89599c8d3..7135c79610a4a5e62c8eebef412c1d126f475a43 100644 (file)
@@ -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)
index d6506b6e09bfb347b9e7c2d37a27e24a7a406b75..a7600cf80e2ebee8a3e05c37e89879c266d359b7 100644 (file)
@@ -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);
        }
     }
 }
index 6b1c1e8e981b8adf57b0cd228b324731c30c10b4..1388266400bcbe2bcaa45d118dbe9d038c5d2f80 100644 (file)
   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]);
     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)
   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]));
index b197956b774485806958f37f3634b57fb33db051..810366f5681368a9f76281f38272c200e7b9fa1b 100644 (file)
@@ -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)
index 388998333411dbcc805e82efe4884131f629bff6..5461fe083e0e61052400701177a44704955e0c72 100644 (file)
@@ -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);
index ef9aa51b9c54cba9f05c649331572d9ebbafaa92..93648ccf39d2581a676d0505c55d6835e8020de8 100644 (file)
@@ -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);
index 6640c62c9f79097090ecd6c144bc24e972aef4a4..16e74228ddf35d2589aa21da1ed6092d3eef3cec 100644 (file)
@@ -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);
index 7135bf4da5857711957879f0f7462708818ea664..cf746f52b68f921b50ff000c068dcc59f5250111 100644 (file)
       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;
index 7ee5eda9407daaedf61d855a24047bca1950935c..2d20a4ba4c2ce00ad02edaa09c849e9330a310f1 100644 (file)
@@ -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
index 697e42a79485b7dcc9c1e7df9f8121c0c6c99e4b..b0733dd83645c79679590bc14440cf1a2184eea2 100644 (file)
@@ -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 ();
 }
 
index 64b7e5f63ab4c0e771106f762f38ebe3a6193220..23e7851b16036c5c2c2f66ee2fa0f6a19cb531e8 100644 (file)
@@ -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.  */
index 592ad528042fd2556d6f4ba3d610501f2e98247d..921e416bd0ef033395bd8d7b2eabbd8ae7965b07 100644 (file)
 
       /* 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;
     }
 })
 
   /* 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;
 })
 
 
   /* 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;
 })
 
 
   /* 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;
 })
 \f
   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;
 })
index 57c51625b227eb77a13b0e76f3372d6065f0b5aa..73043e99b1a732dd78a0f6fb354d764577eb2263 100644 (file)
             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
             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
index a5dc031c91c913d469aa4972482576303de56178..c3d686db5c420c33caf68d78e695dad43973e802 100644 (file)
 
   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
 
   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
index 385c11c5aa3f5c92fd0998fea64554ef6ee69957..32b3e92e9c9917c51a2d7dd3a140a1b587324b8b 100644 (file)
 ;
 ;  /* 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;
 ;}")
 
index 54b38ce843b18461031f4f8d922eae9e881175de..197347677977d363e778dae938fd9fc5735a887b 100644 (file)
@@ -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.  */
index 5ffbcaef338dacd558fc88c7804ffc5f5d9e6e54..ff2edecb2239fc7fbdce58e75ab7333da4826189 100644 (file)
@@ -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);
        }
     }
 
index f97e756518f876a39dbce5449ec9bfcef6df0ae6..d33cc5c32670e236e4a982b7d4bec7e1d86a57da 100644 (file)
   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]);
 
   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]);
 
   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]);
 
 {
   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)));
 {
   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;
                       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);
 
                       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);
 
   "flag_pic"
 {
   emit_insn (s390_load_got ());
-  emit_insn (gen_rtx_USE (VOIDmode, pic_offset_table_rtx));
+  emit_use (pic_offset_table_rtx);
   DONE;
 })
 
   if (temp)
     emit_move_insn (s390_back_chain_rtx (), temp);
 
-  emit_insn (gen_rtx_USE (VOIDmode, base));
+  emit_use (base);
   DONE;
 })
 
index 3af0ee8cff12119a7fb102cc21b59bb263b70d0a..71419ec61deb31dd01afadd6cecb9ab58711b1b2 100644 (file)
@@ -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));
     }
index c1cc725334cc1a6b64316271889454bcbfa564b2..009ab3a2bcfaaa9794940694ad9d291926399d91 100644 (file)
@@ -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
index c02c7094df26599127134e32f1754b097ebf2c06..bc29bcf819cfe4db03e30abc8e8b87df86780ed5 100644 (file)
                  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 ();
      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));
index de307ab32ed95a5ea790bbf545443ae74ed19c9f..b944a00e5bfaf05dd8c29447336dbe367ad4adcb 100644 (file)
@@ -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);
     }
index 2a0f30936413bd4490ccb0f26f80da34356336dd..b9f11b1583f2e79d3e555391bc291e4eae5bd92a 100644 (file)
@@ -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;
            }
 
index 45a256347c00419da5580abbeb50a6e3498dd2cd..1194ad79b81f49887d1106bafa40b672bb429130 100644 (file)
@@ -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.  */
 
index d3cc01b9701b12223893c65883f80535e18b199d..d573836d293f08165c88ede4b672ea1fc863e3ac 100644 (file)
@@ -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 ();
index ab5057a9e8f91e24a466ce4649453c972659bfa3..27ff0c063cf0b605b3051fd0145f147ac24dbd79 100644 (file)
@@ -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++)
        {
index e2693d847402f7e983f07c180376c515befd0a90..d55a2797fb5408cbc50b161fb9672f57e53d0965 100644 (file)
@@ -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
index 845017f7124b09bd93d66cbc8dc6a773b2b350d7..bb4a2e6ab683e36aec3145db71808568a9313a65 100644 (file)
@@ -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);
index 219226048ff17d9c573f141e7bd7eb2540147914..a9e7da998a4ddf93c217d9241fa28fb434dbf83a 100644 (file)
@@ -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,
index b3517697ff2f2a5bceea712cd4b19d26bf76b027..bd054edce1815ea5d7ef9dd37010e6d5a861a37e 100644 (file)
@@ -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);
 
index 7472272d9c4a1eca945de06504ab0c2913ceaac8..ad0a04f6633b59c09432917af1fa7d297e113aa0 100644 (file)
@@ -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);
              }
          }
       }
index 51d3f4c4d19d8ac6a4b54cc163d0d9c9715c8567..7f4136657470ce199f88f5dd96d42c1aed1489a7 100644 (file)
@@ -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);
        }
     }
 
index e9dbb3b8d30797973f3ef9a3e98e0988ebd369f5..2e0884f8f565b604c041e6104d08f5b6d295de80 100644 (file)
--- 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);
index 57e8ad4db7e25ca0905be03da26696e0ba89555a..00dd59ce46350ed157bd9e0da844845e01deee34 100644 (file)
@@ -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)