From: Richard Sandiford Date: Wed, 29 Jan 2020 18:56:35 +0000 (+0000) Subject: Revert g-465c7c89e92a6d6d582173e505cb16dcb9873034 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2812a28418b72b24979805cfca1f140dda4963b7;p=gcc.git Revert g-465c7c89e92a6d6d582173e505cb16dcb9873034 The patch caused regressions in gcc.target/sh/pr64345-1.c on sh3-linux-gnu and gcc.target/m68k/pr39726.c on m68k-linux-gnu. It didn't look like they would be fixable in an acceptably non-invasive and unhacky way, so punting till future releases. 2020-01-29 Richard Sandiford gcc/ Revert: 2020-01-28 Richard Sandiford PR rtl-optimization/87763 * simplify-rtx.c (simplify_truncation): Extend sign/zero_extract simplification to handle subregs as well as bare regs. * config/i386/i386.md (*testqi_ext_3): Match QI extracts too. --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 67d24c74c3d..e2838c053a3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2020-01-29 Richard Sandiford + + Revert: + + 2020-01-28 Richard Sandiford + + PR rtl-optimization/87763 + * simplify-rtx.c (simplify_truncation): Extend sign/zero_extract + simplification to handle subregs as well as bare regs. + * config/i386/i386.md (*testqi_ext_3): Match QI extracts too. + 2020-01-29 Joel Hutton PR target/93221 diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 9f0077d59a9..f83b3702c8e 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -8925,7 +8925,7 @@ (define_insn_and_split "*testqi_ext_3" [(set (match_operand 0 "flags_reg_operand") (match_operator 1 "compare_operator" - [(zero_extract:SWI + [(zero_extract:SWI248 (match_operand 2 "nonimmediate_operand" "rm") (match_operand 3 "const_int_operand" "n") (match_operand 4 "const_int_operand" "n")) diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index db4f9339c15..eff1d07a253 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -736,9 +736,7 @@ simplify_truncation (machine_mode mode, rtx op, (*_extract:M1 (truncate:M1 (reg:M2)) (len) (pos')) if possible without changing len. */ if ((GET_CODE (op) == ZERO_EXTRACT || GET_CODE (op) == SIGN_EXTRACT) - && (REG_P (XEXP (op, 0)) - || (SUBREG_P (XEXP (op, 0)) - && REG_P (SUBREG_REG (XEXP (op, 0))))) + && REG_P (XEXP (op, 0)) && GET_MODE (XEXP (op, 0)) == GET_MODE (op) && CONST_INT_P (XEXP (op, 1)) && CONST_INT_P (XEXP (op, 2)))