Commit 8433f113 by Richard Henderson Committed by Richard Henderson

re PR middle-end/10475 (ICE in subreg_highpart_offset for code with long long)

        PR middle-end/10475
        * expmed.c (emit_store_flag): Use simplify_gen_subreg directly
        for extracting sub-words.
	* gcc.c-torture/compile/20030612-1.c: New.

From-SVN: r67865
parent 974c7cc6
2003-06-12 Richard Henderson <rth@redhat.com>
PR middle-end/10475
* expmed.c (emit_store_flag): Use simplify_gen_subreg directly
for extracting sub-words.
2003-06-12 Richard Henderson <rth@redhat.com>
PR target/7594
* config/m68k/m68k.md (zero_extendhisi2): Use gen_lowpart_SUBREG.
(zero_extendqihi2, zero_extendqisi2): Likewise.
......
......@@ -4354,19 +4354,27 @@ emit_store_flag (target, code, op0, op1, mode, unsignedp, normalizep)
{
if (code == EQ || code == NE)
{
rtx op00, op01, op0both;
/* Do a logical OR of the two words and compare the result. */
rtx op0h = gen_highpart (word_mode, op0);
rtx op0l = gen_lowpart (word_mode, op0);
rtx op0both = expand_binop (word_mode, ior_optab, op0h, op0l,
NULL_RTX, unsignedp, OPTAB_DIRECT);
op00 = simplify_gen_subreg (word_mode, op0, mode, 0);
op01 = simplify_gen_subreg (word_mode, op0, mode, UNITS_PER_WORD);
op0both = expand_binop (word_mode, ior_optab, op00, op01,
NULL_RTX, unsignedp, OPTAB_DIRECT);
if (op0both != 0)
return emit_store_flag (target, code, op0both, op1, word_mode,
unsignedp, normalizep);
}
else if (code == LT || code == GE)
/* If testing the sign bit, can just test on high word. */
return emit_store_flag (target, code, gen_highpart (word_mode, op0),
op1, word_mode, unsignedp, normalizep);
{
rtx op0h;
/* If testing the sign bit, can just test on high word. */
op0h = simplify_gen_subreg (word_mode, op0, mode,
subreg_highpart_offset (word_mode, mode));
return emit_store_flag (target, code, op0h, op1, word_mode,
unsignedp, normalizep);
}
}
/* From now on, we won't change CODE, so set ICODE now. */
......
static inline void
foo (long long const v0, long long const v1)
{
bar (v0 == v1);
}
void
test (void)
{
foo (0, 1);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment