Fix 92085-2.c ICE due to having (const_int 0) as the destination of a set.
gcc/ * lower-subreg.c (resolve_simple_move): If simplify_gen_subreg_concatn returns (const_int 0) for the destination, then emit nothing.
This commit is contained in:
parent
172f2c42a1
commit
c7969df1c5
1 changed files with 15 additions and 6 deletions
|
@ -1087,12 +1087,21 @@ resolve_simple_move (rtx set, rtx_insn *insn)
|
|||
emit_clobber (dest);
|
||||
|
||||
for (i = 0; i < words; ++i)
|
||||
emit_move_insn (simplify_gen_subreg_concatn (word_mode, dest,
|
||||
dest_mode,
|
||||
i * UNITS_PER_WORD),
|
||||
simplify_gen_subreg_concatn (word_mode, src,
|
||||
orig_mode,
|
||||
i * UNITS_PER_WORD));
|
||||
{
|
||||
rtx t = simplify_gen_subreg_concatn (word_mode, dest,
|
||||
dest_mode,
|
||||
i * UNITS_PER_WORD);
|
||||
/* simplify_gen_subreg_concatn can return (const_int 0) for
|
||||
some sub-objects of paradoxical subregs. As a source operand,
|
||||
that's fine. As a destination it must be avoided. Those are
|
||||
supposed to be don't care bits, so we can just drop that store
|
||||
on the floor. */
|
||||
if (t != CONST0_RTX (word_mode))
|
||||
emit_move_insn (t,
|
||||
simplify_gen_subreg_concatn (word_mode, src,
|
||||
orig_mode,
|
||||
i * UNITS_PER_WORD));
|
||||
}
|
||||
}
|
||||
|
||||
if (real_dest != NULL_RTX)
|
||||
|
|
Loading…
Add table
Reference in a new issue