Explicit TCE
Tyler Jameson Little
beatgammit at gmail.com
Fri Oct 12 19:17:59 PDT 2012
On Friday, 12 October 2012 at 20:23:00 UTC, David Nadlinger wrote:
> On Friday, 12 October 2012 at 17:39:53 UTC, Alex Rønne
> Petersen wrote:
>> However, the primary problem with this approach is a really
>> mundane one: The major compiler back ends (GCC and LLVM) don't
>> have any means of guaranteeing TCE...
>
> LLVM shouldn't be as big a problem – there is some support
> for guaranteed TCO in order to make implementations of some of
> the functional languages possible.
>
> I know that you can force LLVM to tail-call everything it
> possibly can (which in consequence horribly breaks the ABI),
> but I am not sure right now how fine-grained you can control
> that mechanism.
>
> Also don't forget that some calling conventions don't lend
> themselves particularly well for doing efficient tail calls.
>
> David
I found this:
http://llvm.org/docs/CodeGenerator.html#tail-call-optimization
http://llvm.org/docs/CodeGenerator.html#target-feature-matrix
It seems that llvm won't be a problem. I've never worked with
LLVM (or any compiler for that matter) at this low of a level,
but I assume that the front-end produces code that looks like the
provided code snippet in the first link. If that's the case, then
we can basically guarantee that LLVM will do what we expect, as
long as we can guarantee that all callers and callees use
"fastcc". I'm not 100% on the implications of this, but it should
work.
As for GCC, the situation seems less hopeful. I found this thread
about GUILE, but it did mention GCC's lack of support for tail
calls. This was april of last year, so maybe things have
improved. The thread does mention that the GCC devs would be open
to suggestions, but it seems like this might be a harder fought
battle than for LLVM.
http://lists.gnu.org/archive/html/guile-devel/2011-04/msg00055.html
LLVM should be sufficient though, right? GDC can just outright
reject explicit TCO for now until it supports proper TCO. Maybe
the GUILE mailing list would be a good place to start, since
there may be efforts already there.
What steps would need to happen for this to become a reality?
Here's my list:
1. Get Walter Bright/Andrei Alexandrescu on board
2. Verify that it will work with LLVM
3. Get it working in DMD
4. Get it working in LDC
5. Work with GCC devs
Is there enough interest in this to implement it? I really don't
know DMD or LLVM at all, so I don't know how big of a project
this is.
More information about the Digitalmars-d
mailing list