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:
parent
9659893870
commit
0374328683
2 changed files with 18 additions and 0 deletions
|
@ -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
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue