cse.c (cse_insn): Don't put hard register source into tables for last insn of a libcall.
authorJ"orn Rennecke <amylaar@cygnus.co.uk>
Wed, 16 Jun 1999 13:32:14 +0000 (13:32 +0000)
committerJoern Rennecke <amylaar@gcc.gnu.org>
Wed, 16 Jun 1999 13:32:14 +0000 (14:32 +0100)
* cse.c (cse_insn): Don't put hard register source into tables for
last insn of a libcall.

From-SVN: r27550

gcc/ChangeLog
gcc/cse.c

index 6f050bcedcd11698cb84ac100fe7ca75db2811d5..7a97024a2f4b74f5d604a6df22ef774d21b7d9e8 100644 (file)
@@ -1,3 +1,8 @@
+Wed Jun 16 20:29:00 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
+
+       * cse.c (cse_insn): Don't put hard register source into tables for
+       last insn of a libcall.
+
 Wed Jun 16 19:44:33 1999  J"orn Rennecke <amylaar@cygnus.co.uk>
 
        * loop.c (strength_reduce): Insert sets of derived givs at every
index 5fc6c7889a24b8294ef93f5edaa290359640f072..605d18507539a0365cf10c0d0fa5212a26a1b29a 100644 (file)
--- a/gcc/cse.c
+++ b/gcc/cse.c
@@ -7607,7 +7607,12 @@ cse_insn (insn, libcall_insn)
            enum machine_mode mode
              = GET_MODE (src) == VOIDmode ? GET_MODE (dest) : GET_MODE (src);
 
-           if (sets[i].src_elt == 0)
+           /* Don't put a hard register source into the table if this is
+              the last insn of a libcall.  */
+           if (sets[i].src_elt == 0
+               && (GET_CODE (src) != REG
+                   || REGNO (src) >= FIRST_PSEUDO_REGISTER
+                   || ! find_reg_note (insn, REG_RETVAL, NULL_RTX)))
              {
                register struct table_elt *elt;