]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
Add clobber_reg
authorTom de Vries <tom@codesourcery.com>
Fri, 25 Apr 2014 11:21:40 +0000 (11:21 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Fri, 25 Apr 2014 11:21:40 +0000 (11:21 +0000)
2014-04-25  Tom de Vries  <tom@codesourcery.com>

* expr.c (clobber_reg_mode): New function.
* expr.h (clobber_reg): New function.

From-SVN: r209800

gcc/ChangeLog
gcc/expr.c
gcc/expr.h

index 21f9b2f2a99707c99f48aa4f58bd47101674fec0..f0fc311dbc037adca31cacbc456639aa05ff307a 100644 (file)
@@ -1,3 +1,8 @@
+2014-04-25  Tom de Vries  <tom@codesourcery.com>
+
+       * expr.c (clobber_reg_mode): New function.
+       * expr.h (clobber_reg): New function.
+
 2014-04-25  Tom de Vries  <tom@codesourcery.com>
 
        * rtlanal.c (find_all_hard_reg_sets): Note INSN_CALL_FUNCTION_USAGE
index 825a244b09afe3de57106bae17619af5752b32b1..fec6194af1ff3ae4db29a0f1407eae1d9a8d159b 100644 (file)
@@ -2396,6 +2396,18 @@ use_reg_mode (rtx *call_fusage, rtx reg, enum machine_mode mode)
     = gen_rtx_EXPR_LIST (mode, gen_rtx_USE (VOIDmode, reg), *call_fusage);
 }
 
+/* Add a CLOBBER expression for REG to the (possibly empty) list pointed
+   to by CALL_FUSAGE.  REG must denote a hard register.  */
+
+void
+clobber_reg_mode (rtx *call_fusage, rtx reg, enum machine_mode mode)
+{
+  gcc_assert (REG_P (reg) && REGNO (reg) < FIRST_PSEUDO_REGISTER);
+
+  *call_fusage
+    = gen_rtx_EXPR_LIST (mode, gen_rtx_CLOBBER (VOIDmode, reg), *call_fusage);
+}
+
 /* Add USE expressions to *CALL_FUSAGE for each of NREGS consecutive regs,
    starting at REGNO.  All of these registers must be hard registers.  */
 
index 524da6731a9771b20aed1482798875238d5b8526..1823febac2659aa1976b7386413cf59beb7c9dbb 100644 (file)
@@ -346,6 +346,7 @@ extern void copy_blkmode_from_reg (rtx, rtx, tree);
 /* Mark REG as holding a parameter for the next CALL_INSN.
    Mode is TYPE_MODE of the non-promoted parameter, or VOIDmode.  */
 extern void use_reg_mode (rtx *, rtx, enum machine_mode);
+extern void clobber_reg_mode (rtx *, rtx, enum machine_mode);
 
 extern rtx copy_blkmode_to_reg (enum machine_mode, tree);
 
@@ -356,6 +357,13 @@ use_reg (rtx *fusage, rtx reg)
   use_reg_mode (fusage, reg, VOIDmode);
 }
 
+/* Mark REG as clobbered by the call with FUSAGE as CALL_INSN_FUNCTION_USAGE.  */
+static inline void
+clobber_reg (rtx *fusage, rtx reg)
+{
+  clobber_reg_mode (fusage, reg, VOIDmode);
+}
+
 /* Mark NREGS consecutive regs, starting at REGNO, as holding parameters
    for the next CALL_INSN.  */
 extern void use_regs (rtx *, int, int);