re PR rtl-optimization/31455 (lower subreg causes a performance regression in the inner loop sometimes)

PR rtl-optimization/31455
	* lower-subreg.c (find_decomposable_subregs): Don't decompose
	subregs which have a cast between modes which are not tieable.

From-SVN: r125265
This commit is contained in:
Ian Lance Taylor 2007-06-01 15:06:19 +00:00 committed by Ian Lance Taylor
parent 9659893870
commit 0374328683
2 changed files with 18 additions and 0 deletions

View File

@ -1,3 +1,9 @@
2007-06-01 Ian Lance Taylor <iant@google.com>
PR rtl-optimization/31455
* lower-subreg.c (find_decomposable_subregs): Don't decompose
subregs which have a cast between modes which are not tieable.
2007-06-01 Uros Bizjak <ubizjak@gmail.com>
* expr.c (force_operand) [DIV, MOD, UDIV, UMOD, ASHIFTRT]: Remove

View File

@ -281,6 +281,18 @@ find_decomposable_subregs (rtx *px, void *data)
bitmap_set_bit (decomposable_context, regno);
return -1;
}
/* If this is a cast from one mode to another, where the modes
have the same size, and they are not tieable, then mark this
register as non-decomposable. If we decompose it we are
likely to mess up whatever the backend is trying to do. */
if (outer_words > 1
&& outer_size == inner_size
&& !MODES_TIEABLE_P (GET_MODE (x), GET_MODE (inner)))
{
bitmap_set_bit (non_decomposable_context, regno);
return -1;
}
}
else if (REG_P (x))
{