From: Segher Boessenkool Date: Wed, 30 Nov 2016 08:24:59 +0000 (+0100) Subject: combine: Don't mess with subregs of floating point (PR78590) X-Git-Tag: upstream/12.2.0~42873 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4a954e068579e326c53bd845a13fbd58ae5a1f80;p=platform%2Fupstream%2Fgcc.git combine: Don't mess with subregs of floating point (PR78590) PR78590 shows a problem in change_zero_ext, where we change a zero_extend of a subreg to a logical and. We should only do this if the thing we are taking the subreg of is a scalar integer, otherwise we will take a subreg of (e.g.) a float in a different size, which is nonsensical and hits an assert. PR rtl-optimization/78590 * combine.c (change_zero_ext): Transform zero_extend of subregs only if the subreg_reg is a scalar integer mode. From-SVN: r242999 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1b8e061..1febcad 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2016-11-30 Segher Boessenkool + + PR rtl-optimization/78590 + * combine.c (change_zero_ext): Transform zero_extend of subregs only + if the subreg_reg is a scalar integer mode. + 2016-11-30 Jakub Jelinek PR tree-optimization/78586 diff --git a/gcc/combine.c b/gcc/combine.c index a32a0ec..a8dae89 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -11251,6 +11251,7 @@ change_zero_ext (rtx pat) else if (GET_CODE (x) == ZERO_EXTEND && SCALAR_INT_MODE_P (mode) && GET_CODE (XEXP (x, 0)) == SUBREG + && SCALAR_INT_MODE_P (GET_MODE (SUBREG_REG (XEXP (x, 0)))) && !paradoxical_subreg_p (XEXP (x, 0)) && subreg_lowpart_p (XEXP (x, 0))) {