diff options
author | Ian Lance Taylor <ian@wasabisystems.com> | 2003-09-11 04:44:23 +0000 |
---|---|---|
committer | Ian Lance Taylor <ian@gcc.gnu.org> | 2003-09-11 04:44:23 +0000 |
commit | 50b29dbb90217345d2253a9a5397a513cdf317a5 (patch) | |
tree | efe8e130ede7b975e690dbbcac8e7c7d5170cb05 /gcc/combine.c | |
parent | dbc66058f0bc72234e3926846dc19211ac93a952 (diff) | |
download | gcc-50b29dbb90217345d2253a9a5397a513cdf317a5.zip gcc-50b29dbb90217345d2253a9a5397a513cdf317a5.tar.gz gcc-50b29dbb90217345d2253a9a5397a513cdf317a5.tar.bz2 |
combine.c (force_to_mode): Set fuller_mask based only on mask, not op_mode.
* combine.c (force_to_mode): Set fuller_mask based only on mask,
not op_mode.
From-SVN: r71292
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 0853a2c..5f005e4 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -6833,15 +6833,13 @@ force_to_mode (rtx x, enum machine_mode mode, unsigned HOST_WIDE_INT mask, mask &= GET_MODE_MASK (op_mode); /* When we have an arithmetic operation, or a shift whose count we - do not know, we need to assume that all bit the up to the highest-order + do not know, we need to assume that all bits up to the highest-order bit in MASK will be needed. This is how we form such a mask. */ - if (op_mode) - fuller_mask = (GET_MODE_BITSIZE (op_mode) >= HOST_BITS_PER_WIDE_INT - ? GET_MODE_MASK (op_mode) - : (((unsigned HOST_WIDE_INT) 1 << (floor_log2 (mask) + 1)) - - 1)); + if (mask & ((unsigned HOST_WIDE_INT) 1 << (HOST_BITS_PER_WIDE_INT - 1))) + fuller_mask = ~(unsigned HOST_WIDE_INT) 0; else - fuller_mask = ~(HOST_WIDE_INT) 0; + fuller_mask = (((unsigned HOST_WIDE_INT) 1 << (floor_log2 (mask) + 1)) + - 1); /* Determine what bits of X are guaranteed to be (non)zero. */ nonzero = nonzero_bits (x, mode); |