This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug middle-end/82365] stack locations are consolidated if noreturn function is on the path


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82365

--- Comment #7 from Michael Matz <matz at gcc dot gnu.org> ---
(In reply to Jakub Jelinek from comment #4)
> Richard/Micha, thoughts on that?

None better than what you came up with.  It'd solve this specific instance
of the problem (and not the one with swapped call statements).  I don't think
we should complicate and slow down the clobber algorithm for this partial
solution, though.

One problem with "not address taken up to here" is this situation:

  char a[100];
  char *p = &somethingelse;
  for () {
     *p = ...;
     p = a;
  }

So, you'd need to iterate address-takeness until fixpoint like normal liveness
as well.  As the current algorithm does this already for a crude approximation
of liveness you might be able to implement the idea without seriously
complicating it or slowing it down.  If so it'd make sense.  Otherwise I
wouldn't worry.

IMHO the real problem is rather the phase ordering between joining the
four no-return calls into one (and thereby merging scopes) and scope-based
analyses.  Possibly that joining should happen later (but it'd mean at RTL
level only, which is also meh), or the stack sharing should happen earlier
(which would possibly mean introducing type aliasing problems at GIMPLE level,
which is also meh).

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]