[rtlanal] Fix WORD_REGISTER_OPERATIONS condition in nonzero_bits
authorKyrylo Tkachov <kyrylo.tkachov@arm.com>
Thu, 3 Nov 2016 12:08:26 +0000 (12:08 +0000)
committerKyrylo Tkachov <ktkachov@gcc.gnu.org>
Thu, 3 Nov 2016 12:08:26 +0000 (12:08 +0000)
* rtlanal.c (nonzero_bits1): Fix WORD_REGISTER_OPERATIONS condition.
Move comments into more natural position.

From-SVN: r241815

gcc/ChangeLog
gcc/rtlanal.c

index 8f0eb5f9e2910c71b14789adf940d80efcf7c90e..22b16c5afa4565eaab35a8638998d233c6aee164 100644 (file)
@@ -1,3 +1,8 @@
+2016-11-03  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
+
+       * rtlanal.c (nonzero_bits1): Fix WORD_REGISTER_OPERATIONS condition.
+       Move comments into more natural position.
+
 2016-11-03  Vineet Gupta  <vgupta@synopsys.com>
 
        * config/arc/arc.h (SIZE_TYPE): Define as unsigned int.
index 508c66384d6985e855143e590b1967d85c14bc23..4ebb314013b5a6901e4df050088b1ae93ba5194f 100644 (file)
@@ -4568,18 +4568,18 @@ nonzero_bits1 (const_rtx x, machine_mode mode, const_rtx known_x,
                                          known_x, known_mode, known_ret);
 
 #ifdef LOAD_EXTEND_OP
-         /* If this is a typical RISC machine, we only have to worry
-            about the way loads are extended.  */
-         if (WORD_REGISTER_OPERATIONS
-             && ((LOAD_EXTEND_OP (inner_mode) == SIGN_EXTEND
+          /* On many CISC machines, accessing an object in a wider mode
+            causes the high-order bits to become undefined.  So they are
+            not known to be zero.  */
+         if (!WORD_REGISTER_OPERATIONS
+             /* If this is a typical RISC machine, we only have to worry
+                about the way loads are extended.  */
+             || ((LOAD_EXTEND_OP (inner_mode) == SIGN_EXTEND
                     ? val_signbit_known_set_p (inner_mode, nonzero)
                     : LOAD_EXTEND_OP (inner_mode) != ZERO_EXTEND)
                   || !MEM_P (SUBREG_REG (x))))
 #endif
            {
-             /* On many CISC machines, accessing an object in a wider mode
-                causes the high-order bits to become undefined.  So they are
-                not known to be zero.  */
              if (GET_MODE_PRECISION (GET_MODE (x))
                  > GET_MODE_PRECISION (inner_mode))
                nonzero |= (GET_MODE_MASK (GET_MODE (x))