Register CALL_INSN_FUNCTION_USAGE in find_all_hard_reg_sets
authorTom de Vries <tom@codesourcery.com>
Fri, 25 Apr 2014 11:21:29 +0000 (11:21 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Fri, 25 Apr 2014 11:21:29 +0000 (11:21 +0000)
2014-04-25  Tom de Vries  <tom@codesourcery.com>

* rtlanal.c (find_all_hard_reg_sets): Note INSN_CALL_FUNCTION_USAGE
clobbers.

From-SVN: r209799

gcc/ChangeLog
gcc/rtlanal.c

index 4a0af82..21f9b2f 100644 (file)
@@ -1,3 +1,8 @@
+2014-04-25  Tom de Vries  <tom@codesourcery.com>
+
+       * rtlanal.c (find_all_hard_reg_sets): Note INSN_CALL_FUNCTION_USAGE
+       clobbers.
+
 2014-04-25  Radovan Obradovic  <robradovic@mips.com>
             Tom de Vries  <tom@codesourcery.com>
 
index 284c475..f3471b1 100644 (file)
@@ -1052,8 +1052,14 @@ find_all_hard_reg_sets (const_rtx insn, HARD_REG_SET *pset, bool implicit)
 
   CLEAR_HARD_REG_SET (*pset);
   note_stores (PATTERN (insn), record_hard_reg_sets, pset);
-  if (implicit && CALL_P (insn))
-    IOR_HARD_REG_SET (*pset, call_used_reg_set);
+  if (CALL_P (insn))
+    {
+      if (implicit)
+       IOR_HARD_REG_SET (*pset, call_used_reg_set);
+
+      for (link = CALL_INSN_FUNCTION_USAGE (insn); link; link = XEXP (link, 1))
+       record_hard_reg_sets (XEXP (link, 0), NULL, pset);
+    }
   for (link = REG_NOTES (insn); link; link = XEXP (link, 1))
     if (REG_NOTE_KIND (link) == REG_INC)
       record_hard_reg_sets (XEXP (link, 0), NULL, pset);