This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Problem with reg-stack.c on x86-64
- From: kenner at vlsi1 dot ultra dot nyu dot edu (Richard Kenner)
- To: gcc at gcc dot gnu dot org
- Date: Sat, 3 Jan 04 11:10:12 EST
- Subject: Problem with reg-stack.c on x86-64
Try compiling the Ada RTS file a-nllcef.ads with -gnatpgn -O2.
You get an abort in compensate_edge at line 2595.
The reason is that there's an EH_ABNORMAL_CALL edge where at the source
st(1) is the only stack register live and there are none live at the
destination. The code assumes that either st(0) or st(0) and st(1) are
live. But in this case, we have a call that sets (reg:XC st) but has
a REG_UNUSED note for (reg:XF st), so only st(1) is live.
I don't understand the reg-stack code well enough to see how to fix this,
nor do I know if the above register life information is valid for that edge.
Can somebody help with this?