From: Richard Henderson Date: Sun, 4 Oct 1998 23:59:58 +0000 (-0700) Subject: combine.c (expand_field_assignment): Don't do bitwise operations on MODE_FLOAT; pun... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=861556b4d97e7b323621cb19ada8bbfefff26977;p=gcc.git combine.c (expand_field_assignment): Don't do bitwise operations on MODE_FLOAT; pun to MODE_INT if possible. * combine.c (expand_field_assignment): Don't do bitwise operations on MODE_FLOAT; pun to MODE_INT if possible. From-SVN: r22826 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8b04e882d09..7184fe45bda 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +Sun Oct 4 23:58:30 1998 Richard Henderson + + * combine.c (expand_field_assignment): Don't do bitwise operations + on MODE_FLOAT; pun to MODE_INT if possible. + Sun Oct 4 18:33:24 1998 Jason Merrill scott snyder diff --git a/gcc/combine.c b/gcc/combine.c index e2a0095a1db..ce488e294c4 100644 --- a/gcc/combine.c +++ b/gcc/combine.c @@ -5384,6 +5384,24 @@ expand_field_assignment (x) compute_mode = GET_MODE (inner); + /* Don't attempt bitwise arithmetic on non-integral modes. */ + if (! INTEGRAL_MODE_P (compute_mode)) + { + enum machine_mode imode; + + /* Something is probably seriously wrong if this matches. */ + if (! FLOAT_MODE_P (compute_mode)) + break; + + /* Try to find an integral mode to pun with. */ + imode = mode_for_size (GET_MODE_BITSIZE (compute_mode), MODE_INT, 0); + if (imode == BLKmode) + break; + + compute_mode = imode; + inner = gen_lowpart_for_combine (imode, inner); + } + /* Compute a mask of LEN bits, if we can do this on the host machine. */ if (len < HOST_BITS_PER_WIDE_INT) mask = GEN_INT (((HOST_WIDE_INT) 1 << len) - 1);