Commit 8bc52806 by Jeff Law Committed by Jeff Law

re PR rtl-optimization/3311 (GCC-SH: gcc loses result of AND operation due to force_to_mode bug)

	* combine.c (simplify_and_const_int): Make sure to apply mask
	when force_to_mode returns a constant integer.  PR3311.

From-SVN: r51532
parent 279dccc5
Thu Mar 28 16:35:31 2002 Jeffrey A Law (law@redhat.com)
* combine.c (simplify_and_const_int): Make sure to apply mask
when force_to_mode returns a constant integer. PR3311.
2002-03-28 John David Anglin <dave@hiauly1.hia.nrc.ca>
* pa-linux.h (LOCAL_LABEL_PREFIX): Define.
......
......@@ -7838,14 +7838,23 @@ simplify_and_const_int (x, mode, varop, constop)
int i;
/* Simplify VAROP knowing that we will be only looking at some of the
bits in it. */
bits in it.
Note by passing in CONSTOP, we guarantee that the bits not set in
CONSTOP are not significant and will never be examined. We must
ensure that is the case by explicitly masking out those bits
before returning. */
varop = force_to_mode (varop, mode, constop, NULL_RTX, 0);
/* If VAROP is a CLOBBER, we will fail so return it; if it is a
CONST_INT, we are done. */
if (GET_CODE (varop) == CLOBBER || GET_CODE (varop) == CONST_INT)
/* If VAROP is a CLOBBER, we will fail so return it. */
if (GET_CODE (varop) == CLOBBER)
return varop;
/* If VAROP is a CONST_INT, then we need to apply the mask in CONSTOP
to VAROP and return the new constant. */
if (GET_CODE (varop) == CONST_INT)
return GEN_INT (trunc_int_for_mode (INTVAL (varop) & constop, mode));
/* See what bits may be nonzero in VAROP. Unlike the general case of
a call to nonzero_bits, here we don't care about bits outside
MODE. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment