aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorSegher Boessenkool <segher@kernel.crashing.org>2016-11-30 09:24:59 +0100
committerSegher Boessenkool <segher@gcc.gnu.org>2016-11-30 09:24:59 +0100
commit4a954e068579e326c53bd845a13fbd58ae5a1f80 (patch)
treef67d78544fb3965b14900a2498c6c72d2a3180b7 /gcc/combine.c
parent053d5e0cdd2f9d08b1a7a4275b40d2930936d9f6 (diff)
downloadgcc-4a954e068579e326c53bd845a13fbd58ae5a1f80.zip
gcc-4a954e068579e326c53bd845a13fbd58ae5a1f80.tar.gz
gcc-4a954e068579e326c53bd845a13fbd58ae5a1f80.tar.bz2
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
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c1
1 files changed, 1 insertions, 0 deletions
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)))
{