summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1997-11-05 02:08:25 +0000
committerwilson <wilson@138bc75d-0d04-0410-961f-82ee72b054a4>1997-11-05 02:08:25 +0000
commit1436766309549efab406163cc56181402e2b8f62 (patch)
tree33834564081d4c750f91a7dd005a5a79aea1608e /gcc/combine.c
parentbb09b94c66b1c70a6d88affbc2efdcd79a18b198 (diff)
downloadgcc-1436766309549efab406163cc56181402e2b8f62.tar.gz
Fix alpha-linux GNU libc build failures.
* combine.c (try_combine): When setting elim_i2, check whether newi2pat sets i2dest. When calling distribute_notes for i3dest_killed, pass elim_i2 and elim_i1. When setting elim_i1, check if newi2pat sets i1dest. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@16334 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 20bcaf9b37e..6bc921b6f8e 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2146,10 +2146,15 @@ try_combine (i3, i2, i1)
rtx i3links, i2links, i1links = 0;
rtx midnotes = 0;
register int regno;
- /* Compute which registers we expect to eliminate. */
- rtx elim_i2 = (newi2pat || i2dest_in_i2src || i2dest_in_i1src
+ /* Compute which registers we expect to eliminate. newi2pat may be setting
+ either i3dest or i2dest, so we must check it. Also, i1dest may be the
+ same as i3dest, in which case newi2pat may be setting i1dest. */
+ rtx elim_i2 = ((newi2pat && reg_set_p (i2dest, newi2pat))
+ || i2dest_in_i2src || i2dest_in_i1src
? 0 : i2dest);
- rtx elim_i1 = i1 == 0 || i1dest_in_i1src ? 0 : i1dest;
+ rtx elim_i1 = (i1 == 0 || i1dest_in_i1src
+ || (newi2pat && reg_set_p (i1dest, newi2pat))
+ ? 0 : i1dest);
/* Get the old REG_NOTES and LOG_LINKS from all our insns and
clear them. */
@@ -2312,12 +2317,12 @@ try_combine (i3, i2, i1)
if (newi2pat && reg_set_p (i3dest_killed, newi2pat))
distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
NULL_RTX),
- NULL_RTX, i2, NULL_RTX, NULL_RTX, NULL_RTX);
+ NULL_RTX, i2, NULL_RTX, elim_i2, elim_i1);
else
distribute_notes (gen_rtx (EXPR_LIST, REG_DEAD, i3dest_killed,
NULL_RTX),
NULL_RTX, i3, newi2pat ? i2 : NULL_RTX,
- NULL_RTX, NULL_RTX);
+ elim_i2, elim_i1);
}
if (i2dest_in_i2src)