]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
cse.c (cse_insn): Don't put hard register source into tables for the last insn of...
authorJeffrey A Law <law@cygnus.com>
Tue, 13 Jul 1999 17:03:22 +0000 (17:03 +0000)
committerJeff Law <law@gcc.gnu.org>
Tue, 13 Jul 1999 17:03:22 +0000 (11:03 -0600)
        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
        the last insn of a libcall.
Bring over from mainline sources.  Fixes various sparc lapack problems.

From-SVN: r28088

gcc/ChangeLog
gcc/cse.c

index 3d6f6f19a0f6c881d8c820af7e1665461f9d20dd..1b2618ef82713232d2b2b43a7bb5f7d7c9ff3351 100644 (file)
@@ -1,5 +1,9 @@
 Tue Jul 13 10:44:14 1999  Jeffrey A Law  (law@cygnus.com)
 
+       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
+       the last insn of a libcall.
+
        * rs6000.c (find_addr_reg): Do not select r0 as an address
        register.
 
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;