summaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorUros Bizjak <ubizjak@gmail.com>2007-02-04 00:39:31 +0100
committerUros Bizjak <uros@gcc.gnu.org>2007-02-04 00:39:31 +0100
commit28b02c60641c0bf1837079be29b712e3bce40178 (patch)
treeb33caba003687bed5a02b864dbe384a31e271908 /gcc/combine.c
parent3855c807ceb26c6adc9774cd9b9f7793939978bf (diff)
downloadgcc-28b02c60641c0bf1837079be29b712e3bce40178.tar.gz
re PR middle-end/30667 (ICE in immed_double_const, at emit-rtl.c:468)
PR middle-end/30667 * combine.c (try_combine): Do not substitute source operand with constants wider than 2 * HOST_BITS_PER_WIDE_INT. testsuite/ChangeLog: PR middle-end/30667 * gfortran.dg/pr30667.f: New test. From-SVN: r121555
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index aa1e2ce2034..6605b7a3558 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -2003,7 +2003,9 @@ try_combine (rtx i3, rtx i2, rtx i1, int *new_direct_jump_p)
offset = -1;
}
- if (offset >= 0)
+ if (offset >= 0
+ && (GET_MODE_BITSIZE (GET_MODE (SET_DEST (temp)))
+ <= HOST_BITS_PER_WIDE_INT * 2))
{
HOST_WIDE_INT mhi, ohi, ihi;
HOST_WIDE_INT mlo, olo, ilo;