efriedma added a comment.

All "tail" needs to mean is "this call does not reference the current 
function's stack."  That's all, no more or less.

The relevant documentation and APIs are a bit confusing.  A "tail" marking is a 
prerequisite for tailcall optimization, but it's not really related to any of 
the other prerequisites for tailcall optimization.  Dropping the "tail" marking 
just because the call isn't in a tail position would involve a bunch of work 
adding and removing "tail" markings, for no benefit.

It makes sense to teach tail recursion elimination not to depend so heavily on 
tail markings.  But I don't think that implies we want to mess with the 
markings themselves.

> I think the confusion happened exactly because "tail" marking was done for 
> all calls(not for the real tailcalls).

I don't think there's any confusion here.  It's just using the tail markings as 
a conservative estimate of capturing because it has to compute them anyway.  
And TRE in general is simplistic code that nobody has spent much time looking 
at in a long time.  There are very few TRE opportunities in C/C++ code anyway.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D82085/new/

https://reviews.llvm.org/D82085



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to