high-order bits are zero.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@149779
138bc75d-0d04-0410-961f-
82ee72b054a4
2009-07-18 Adam Nemet <anemet@caviumnetworks.com>
+ * combine.c (try_widen_shift_mode) <LSHIFTRT>: Allow widening if the
+ high-order bits are zero.
+
+2009-07-18 Adam Nemet <anemet@caviumnetworks.com>
+
* combine.c (simplify_shift_const_1): Split code to determine
shift_mode into ...
(try_widen_shift_mode): ... here. Allow widening for ASHIFTRT if the
> (unsigned) (GET_MODE_BITSIZE (mode)
- GET_MODE_BITSIZE (orig_mode)))
return mode;
- /* fall through */
+ return orig_mode;
+
case LSHIFTRT:
+ /* Similarly here but with zero bits. */
+ if (GET_MODE_BITSIZE (mode) <= HOST_BITS_PER_WIDE_INT
+ && (nonzero_bits (op, mode) & ~GET_MODE_MASK (orig_mode)) == 0)
+ return mode;
+ /* fall through */
+
case ROTATE:
return orig_mode;