ICE in propagate_one_insn. Bug in my port?

Greg McGary greg@mcgary.org
Fri Apr 27 15:03:00 GMT 2001


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



More information about the Gcc mailing list