diff options
author | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1993-10-10 23:18:18 +0000 |
---|---|---|
committer | kenner <kenner@138bc75d-0d04-0410-961f-82ee72b054a4> | 1993-10-10 23:18:18 +0000 |
commit | a90bc44a1fccf6c822923df37ce5f493b88ccca4 (patch) | |
tree | b396626094d3bf712bae96c05286768a92cf6446 /gcc/combine.c | |
parent | d80d83f1d6de4e9dd894d97a0a1c3fc0ee165ccf (diff) | |
download | gcc-a90bc44a1fccf6c822923df37ce5f493b88ccca4.tar.gz |
(force_to_mode, case ASHIFTRT): Verify that result of making a
LSHIFTRT remains a shift.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@5715 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/combine.c')
-rw-r--r-- | gcc/combine.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/combine.c b/gcc/combine.c index 4d05b01ad88..fa34ce00f51 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -5892,9 +5892,11 @@ force_to_mode (x, mode, mask, reg) x = gen_binary (LSHIFTRT, GET_MODE (x), XEXP (x, 0), XEXP (x, 1)); /* If this is a sign-extension operation that just affects bits - we don't care about, remove it. */ + we don't care about, remove it. Be sure the call above returned + something that is still a shift. */ - if (GET_CODE (XEXP (x, 1)) == CONST_INT + if ((GET_CODE (x) == LSHIFTRT || GET_CODE (x) == ASHIFTRT) + && GET_CODE (XEXP (x, 1)) == CONST_INT && INTVAL (XEXP (x, 1)) >= 0 && (INTVAL (XEXP (x, 1)) <= GET_MODE_BITSIZE (GET_MODE (x)) - (floor_log2 (mask) + 1)) |