The comment for the added case to simplify_truncation reads

  /* Turn (truncate:M1 (*_extract:M2 (reg:M2) (len) (pos))) into
     (*_extract:M1 (truncate:M1 (reg:M2)) (len) (pos')) if possible without
     changing len.  */

but I forget to check the two modes M2 are actually the same.  Tested on
powerpc64-linux, committing to trunk as obvious.


Segher


2016-11-30  Segher Boessenkool  <seg...@kernel.crashing.org>

        PR rtl-optimization/78583
        * simplify-rtx.c (simplify_truncation): Add check missing from the
        previous commit.

---
 gcc/simplify-rtx.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c
index f922aaf..ead2f5a 100644
--- a/gcc/simplify-rtx.c
+++ b/gcc/simplify-rtx.c
@@ -752,6 +752,7 @@ simplify_truncation (machine_mode mode, rtx op,
      changing len.  */
   if ((GET_CODE (op) == ZERO_EXTRACT || GET_CODE (op) == SIGN_EXTRACT)
       && REG_P (XEXP (op, 0))
+      && GET_MODE (XEXP (op, 0)) == mode
       && CONST_INT_P (XEXP (op, 1))
       && CONST_INT_P (XEXP (op, 2)))
     {
-- 
1.9.3

Reply via email to