aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorGraham Stott <grahams@gcc.gnu.org>2004-06-05 07:59:39 +0000
committerGraham Stott <grahams@gcc.gnu.org>2004-06-05 07:59:39 +0000
commit446f52f40bb4083e0e4e92de0442141a1d3d633d (patch)
tree90e178a8dd180582334958da2b47f629ea619198 /gcc/combine.c
parent90aa6719a03ca37a01bf94240dbf02fb4b1eb3e0 (diff)
downloadgcc-446f52f40bb4083e0e4e92de0442141a1d3d633d.zip
gcc-446f52f40bb4083e0e4e92de0442141a1d3d633d.tar.gz
gcc-446f52f40bb4083e0e4e92de0442141a1d3d633d.tar.bz2
combine.c (simplify_shift_const): Check shift amount is a CONST_INT.
* combine.c(simplify_shift_const): Check shift amount is a CONST_INT. From-SVN: r82644
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index 64af27c..44ca720 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -8763,9 +8763,10 @@ simplify_shift_const (rtx x, enum rtx_code code,
logical expression, make a new logical expression, and apply
the inverse distributive law. This also can't be done
for some (ashiftrt (xor)). */
- if (code != ASHIFTRT || GET_CODE (varop)!= XOR
- || 0 <= trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
- shift_mode))
+ if (GET_CODE (XEXP (varop, 1)) == CONST_INT
+ && !(code == ASHIFTRT && GET_CODE (varop) == XOR
+ && 0 > trunc_int_for_mode (INTVAL (XEXP (varop, 1)),
+ shift_mode)))
{
rtx lhs = simplify_shift_const (NULL_RTX, code, shift_mode,
XEXP (varop, 0), count);
@@ -8776,6 +8777,7 @@ simplify_shift_const (rtx x, enum rtx_code code,
varop = apply_distributive_law (varop);
count = 0;
+ continue;
}
break;