+Thu Jun 20 16:41:40 CEST 2002 Jan Hubicka <jh@suse.cz>
+
+ * combine.c (gen_lowpart_for_combine): Avoid calling of
+ simplify_gen_subreg on VOIDmode.
+
+ * combine.c (subst): Be prepared for simplify_subreg to return VOIDmode.
+
2002-06-20 Richard Henderson <rth@redhat.com>
* c-common.c (c_common_get_alias_set): Correctly handle characters.
if (GET_CODE (new) == CONST_INT && GET_CODE (x) == SUBREG)
{
- x = simplify_subreg (GET_MODE (x), new,
+ enum machine_mode mode = GET_MODE (x);
+ x = simplify_subreg (mode, new,
GET_MODE (SUBREG_REG (x)),
SUBREG_BYTE (x));
if (! x)
- abort ();
+ x = gen_rtx_CLOBBER (mode, const0_rtx);
}
else if (GET_CODE (new) == CONST_INT
&& GET_CODE (x) == ZERO_EXTEND)
int offset = 0;
rtx res;
+ /* We can't handle VOIDmodes. We can get here when generating vector
+ modes since these, unlike integral and floating point modes are not
+ handled earlier. */
+ if (GET_MODE (x) == VOIDmode)
+ return gen_rtx_CLOBBER (GET_MODE (x), const0_rtx);
+
offset = subreg_lowpart_offset (mode, GET_MODE (x));
res = simplify_gen_subreg (mode, x, GET_MODE (x), offset);
if (res)