Fix up mode confusion in combine_simplify_rtx.
authorBernd Schmidt <bernds@codesourcery.com>
Tue, 4 Nov 2014 15:25:45 +0000 (15:25 +0000)
committerBernd Schmidt <bernds@gcc.gnu.org>
Tue, 4 Nov 2014 15:25:45 +0000 (15:25 +0000)
The surrounding code was already fixed back when BImode was added.

* combine.c (combine_simplify_rtx): In STORE_FLAG_VALUE == -1 case,
also verify that mode is equal to the mode of op0.

From-SVN: r217089

gcc/ChangeLog
gcc/combine.c

index e5f0c4621aa4b01a317392c5a2d7f500e6ee1e8c..c6d729f0a9d598731a6bc52cc88a1a6a64fc98dd 100644 (file)
@@ -1,5 +1,8 @@
 2014-11-04  Bernd Schmidt  <bernds@codesourcery.com>
 
+       * combine.c (combine_simplify_rtx): In STORE_FLAG_VALUE == -1 case,
+       also verify that mode is equal to the mode of op0.
+
        * bb-reorder.c (get_uncond_jump_length): Avoid using delete_insn,
        emit into a sequence instead.
 
index 40f2875d5182ccc41c5d07751a4e893dbc462bae..e240cfb9449c4219b56cd4520a179571c822f940 100644 (file)
@@ -5811,10 +5811,11 @@ combine_simplify_rtx (rtx x, machine_mode op0_mode, int in_dest,
            ;
 
          else if (STORE_FLAG_VALUE == -1
-             && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
-             && op1 == const0_rtx
-             && (num_sign_bit_copies (op0, mode)
-                 == GET_MODE_PRECISION (mode)))
+                  && new_code == NE && GET_MODE_CLASS (mode) == MODE_INT
+                  && op1 == const0_rtx
+                  && mode == GET_MODE (op0)
+                  && (num_sign_bit_copies (op0, mode)
+                      == GET_MODE_PRECISION (mode)))
            return gen_lowpart (mode,
                                expand_compound_operation (op0));