combine.c (try_combine): Fix formatting issues, improve comments and fix a pasto.

* combine.c (try_combine): Fix formatting issues, improve comments and
	fix a pasto.

From-SVN: r166263
This commit is contained in:
Eric Botcazou 2010-11-03 17:53:51 +00:00 committed by Eric Botcazou
parent 8cf8ca52ae
commit f891030a48
2 changed files with 34 additions and 19 deletions

View File

@ -1,3 +1,8 @@
2010-11-03 Eric Botcazou <ebotcazou@adacore.com>
* combine.c (try_combine): Fix formatting issues, improve comments and
fix a pasto.
2010-11-03 Eric Botcazou <ebotcazou@adacore.com>
* tree-tailcall.c (find_tail_calls): Convert the operands to the type

View File

@ -2502,6 +2502,7 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
rtx i3dest_killed = 0;
/* SET_DEST and SET_SRC of I2, I1 and I0. */
rtx i2dest = 0, i2src = 0, i1dest = 0, i1src = 0, i0dest = 0, i0src = 0;
/* Copy of SET_SRC of I1, if needed. */
rtx i1src_copy = 0;
/* Set if I2DEST was reused as a scratch register. */
bool i2scratch = false;
@ -3072,23 +3073,23 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
}
n_occurrences = 0; /* `subst' counts here */
/* If I1 feeds into I2 and I1DEST is in I1SRC, we need to make a
unique copy of I2SRC each time we substitute it to avoid
self-referential rtl. */
subst_low_luid = DF_INSN_LUID (i2);
/* If I1 feeds into I2 and I1DEST is in I1SRC, we need to make a unique
copy of I2SRC each time we substitute it, in order to avoid creating
self-referential RTL when we will be substituting I1SRC for I1DEST
later. Likewise if I0 feeds into I2 and I0DEST is in I0SRC. */
newpat = subst (PATTERN (i3), i2dest, i2src, 0,
((i1_feeds_i2_n && i1dest_in_i1src)
|| (i0_feeds_i2_n && i0dest_in_i0src)));
(i1_feeds_i2_n && i1dest_in_i1src)
|| (i0_feeds_i2_n && i0dest_in_i0src));
substed_i2 = 1;
/* Record whether i2's body now appears within i3's body. */
/* Record whether I2's body now appears within I3's body. */
i2_is_used = n_occurrences;
}
/* If we already got a failure, don't try to do more. Otherwise,
try to substitute in I1 if we have it. */
/* If we already got a failure, don't try to do more. Otherwise, try to
substitute I1 if we have it. */
if (i1 && GET_CODE (newpat) != CLOBBER)
{
@ -3099,10 +3100,10 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
&& i1_feeds_i2_n
&& dead_or_set_p (i2, i1dest)
&& !reg_overlap_mentioned_p (i1dest, newpat))
/* Before we can do this substitution, we must redo the test done
above (see detailed comments there) that ensures that I1DEST
isn't mentioned in any SETs in NEWPAT that are field assignments. */
|| !combinable_i3pat (NULL_RTX, &newpat, i1dest, NULL_RTX, NULL_RTX,
/* Before we can do this substitution, we must redo the test done
above (see detailed comments there) that ensures I1DEST isn't
mentioned in any SETs in NEWPAT that are field assignments. */
|| !combinable_i3pat (NULL_RTX, &newpat, i1dest, NULL_RTX, NULL_RTX,
0, 0, 0))
{
undo_all ();
@ -3111,33 +3112,42 @@ try_combine (rtx i3, rtx i2, rtx i1, rtx i0, int *new_direct_jump_p)
n_occurrences = 0;
subst_low_luid = DF_INSN_LUID (i1);
/* If I0 feeds into I1 and I0DEST is in I0SRC, we need to make a unique
copy of I1SRC each time we substitute it, in order to avoid creating
self-referential RTL when we will be substituting I0SRC for I0DEST
later. */
newpat = subst (newpat, i1dest, i1src, 0,
i0_feeds_i1_n && i0dest_in_i0src);
substed_i1 = 1;
/* Record whether I1's body now appears within I3's body. */
i1_is_used = n_occurrences;
}
/* Likewise for I0 if we have it. */
if (i0 && GET_CODE (newpat) != CLOBBER)
{
if ((FIND_REG_INC_NOTE (i0, NULL_RTX) != 0
&& ((i0_feeds_i2_n && dead_or_set_p (i2, i0dest))
|| (i0_feeds_i1_n && dead_or_set_p (i1, i0dest)))
&& !reg_overlap_mentioned_p (i0dest, newpat))
|| !combinable_i3pat (NULL_RTX, &newpat, i0dest, NULL_RTX, NULL_RTX,
|| !combinable_i3pat (NULL_RTX, &newpat, i0dest, NULL_RTX, NULL_RTX,
0, 0, 0))
{
undo_all ();
return 0;
}
/* Following subst may modify i1src, make a copy of it
before it is for added_sets_2 handling if needed. */
/* If the following substitution will modify I1SRC, make a copy of it
for the case where it is substituted for I1DEST in I2PAT later. */
if (i0_feeds_i1_n && added_sets_2 && i1_feeds_i2_n)
i1src_copy = copy_rtx (i1src);
n_occurrences = 0;
subst_low_luid = DF_INSN_LUID (i0);
newpat = subst (newpat, i0dest, i0src, 0,
i0_feeds_i1_n && i0dest_in_i0src);
newpat = subst (newpat, i0dest, i0src, 0, 0);
substed_i0 = 1;
}