re PR rtl-optimization/42522 ((zero_extract:SI (mem:QI) ...) misoptimized)

PR rtl-optimization/42522
        * cse.c (fold_rtx): Try to simplify a ZERO_EXTRACT or
        SIGN_EXTRACT as a whole object rather than simplifying
        its operand.

From-SVN: r222125
This commit is contained in:
Jeff Law 2015-04-15 06:24:28 -06:00 committed by Jeff Law
parent 366ee94b44
commit 5141ed4263
2 changed files with 16 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2015-04-15 Jeff Law <law@redhat.com>
PR rtl-optimization/42522
* cse.c (fold_rtx): Try to simplify a ZERO_EXTRACT or
SIGN_EXTRACT as a whole object rather than simplifying
its operand.
2015-04-15 Jakub Jelinek <jakub@redhat.com> 2015-04-15 Jakub Jelinek <jakub@redhat.com>
PR ipa/65765 PR ipa/65765

View File

@ -3150,6 +3150,15 @@ fold_rtx (rtx x, rtx_insn *insn)
{ {
case MEM: case MEM:
case SUBREG: case SUBREG:
/* The first operand of a SIGN/ZERO_EXTRACT has a different meaning
than it would in other contexts. Basically its mode does not
signify the size of the object read. That information is carried
by size operand. If we happen to have a MEM of the appropriate
mode in our tables with a constant value we could simplify the
extraction incorrectly if we allowed substitution of that value
for the MEM. */
case ZERO_EXTRACT:
case SIGN_EXTRACT:
if ((new_rtx = equiv_constant (x)) != NULL_RTX) if ((new_rtx = equiv_constant (x)) != NULL_RTX)
return new_rtx; return new_rtx;
return x; return x;