This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
ICE in propagate_one_insn. Bug in my port?
- To: gcc at gcc dot gnu dot org
- Subject: ICE in propagate_one_insn. Bug in my port?
- From: Greg McGary <greg at mcgary dot org>
- Date: Fri, 27 Apr 2001 15:03:17 -0700
I get an ICE at propagate_one_insn for the following reason:
My port is 32-bit.
GCC creates a DI pseudo.
All moves to/from DI are broken into SI moves in the define_expand for "movdi".
Accesses to the pieces of the DI pseudo occur through SI subregs.
As optimization progresses, subreg 0 (most-significant) is discarded
as it is unused, leaving subreg 1 (least significant), which is used.
global_alloc>reload>mark_home_live marks the DI pseudo as live, and
thus both hard subregs allocated to the DI are marked as live.
My port's expand_prologue sees non-zero `regs_ever_live [x]' for both
SI hard subregs allocated to the DI.
life_analysis notes that the first SI hard reg is unused, so tries
to delete the prologue insn that saves it on the stack, but aborts
on the assertion in propagate_one_insn because there's no
REG_MAYBE_DEAD note on the unused SI subreg 0.
A brute force fix would be to mark all prologue register saves with
REG_MAYBE_DEAD. What might be a fix with finesse?
Greg