summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-08-18 18:29:40 +0000
committerlaw <law@138bc75d-0d04-0410-961f-82ee72b054a4>1998-08-18 18:29:40 +0000
commitb058ca77cffd8c556b082ebb87a79303c9bc3208 (patch)
tree5aed366b6918755d29ab59bf170407c3b2b93ac5 /gcc
parent2be33b00b769fc3784251050281854a8d2853339 (diff)
downloadgcc-b058ca77cffd8c556b082ebb87a79303c9bc3208.tar.gz
* combine.c (can_combine_p): Allow combining insns with REG_RETVAL
notes. (try_combine): Allow combining insns with REG_LIBCALL notes. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@21833 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/combine.c13
2 files changed, 16 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 97dea44cce2..02b3a5fe113 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -5,6 +5,10 @@ Tue Aug 18 12:40:27 1998 Richard Henderson <rth@cygnus.com>
Tue Aug 18 10:33:30 1998 Jeffrey A Law (law@cygnus.com)
+ * combine.c (can_combine_p): Allow combining insns with REG_RETVAL
+ notes.
+ (try_combine): Allow combining insns with REG_LIBCALL notes.
+
* expr.c (emit_block_move): Do not call memcpy as a libcall
instead build up a CALL_EXPR and call it like any other
function.
diff --git a/gcc/combine.c b/gcc/combine.c
index 155585b9f1c..5c050f2a9ba 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -958,8 +958,14 @@ can_combine_p (insn, i3, pred, succ, pdest, psrc)
/* Don't substitute into an incremented register. */
|| FIND_REG_INC_NOTE (i3, dest)
|| (succ && FIND_REG_INC_NOTE (succ, dest))
+#if 0
/* Don't combine the end of a libcall into anything. */
+ /* ??? This gives worse code, and appears to be unnecessary, since no
+ pass after flow uses REG_LIBCALL/REG_RETVAL notes. Local-alloc does
+ use REG_RETVAL notes for noconflict blocks, but other code here
+ makes sure that those insns don't disappear. */
|| find_reg_note (insn, REG_RETVAL, NULL_RTX)
+#endif
/* Make sure that DEST is not used after SUCC but before I3. */
|| (succ && ! all_adjacent
&& reg_used_between_p (dest, succ, i3))
@@ -1371,7 +1377,12 @@ try_combine (i3, i2, i1)
if (GET_RTX_CLASS (GET_CODE (i3)) != 'i'
|| GET_RTX_CLASS (GET_CODE (i2)) != 'i'
|| (i1 && GET_RTX_CLASS (GET_CODE (i1)) != 'i')
- || find_reg_note (i3, REG_LIBCALL, NULL_RTX))
+#if 0
+ /* ??? This gives worse code, and appears to be unnecessary, since no
+ pass after flow uses REG_LIBCALL/REG_RETVAL notes. */
+ || find_reg_note (i3, REG_LIBCALL, NULL_RTX)
+#endif
+)
return 0;
combine_attempts++;