This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: IA32 redundant stack adjusts
- To: Mike Stump <mrs at windriver dot com>
- Subject: Re: IA32 redundant stack adjusts
- From: Zack Weinberg <zack at wolery dot cumb dot org>
- Date: Fri, 14 Jan 2000 18:25:21 -0800
- Cc: gcc at gcc dot gnu dot org
- References: <200001150206.SAA02310@kankakee.wrs.com>
On Fri, Jan 14, 2000 at 06:06:24PM -0800, Mike Stump wrote:
> > Date: Fri, 14 Jan 2000 12:31:26 -0800
> > From: Zack Weinberg <zack@wolery.cumb.org>
>
> > What's wrong with this picture? The LOG_LINKS list of insn 11 is
> > nil. That is because flow.c has a general policy of not generating
> > data flow info for the stack pointer.
>
> Sounds like we should data flow the stack pointer.
I do agree, but I discovered that the scheduler cannot cope with
having data flow info for the stack pointer. Trivial code like
float xabs (float x) { return __builtin_fabs (x); }
hits an abort in haifa-sched.c where it is expecting that the number
of register deaths did not change before and after scheduling, but
flow says the stack pointer dies in the middle of the basic block
because it wasn't asked for flow info for the entire function. I
think. Anyway I don't understand flow.c or haifa-sched.c well enough
to fix it, and the problem can be completely papered over with a
peephole in i386.md (which you have to add anyway to deal with the
adjusts in the prologue keeping the stack aligned), and I'm supposed
to be working on the preprocessor anyway :)
zw