From 6ee1791feeb4b8080daac0d21f9650e38e512b49 Mon Sep 17 00:00:00 2001 From: law <law@138bc75d-0d04-0410-961f-82ee72b054a4> Date: Thu, 28 Mar 2002 23:33:52 +0000 Subject: [PATCH] * combine.c (simplify_and_const_int): Make sure to apply mask when force_to_mode returns a constant integer. PR3311. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@51532 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 5 +++++ gcc/combine.c | 17 +++++++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 5a8d6fc9bcd2..a804219ef121 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/gcc/combine.c b/gcc/combine.c index 0a61187071e4..adb034d80cab 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -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. */ -- GitLab