public inbox for jit@gcc.gnu.org
 help / color / mirror / Atom feed
From: Basile Starynkevitch <basile@starynkevitch.net>
To: David Malcolm <dmalcolm@redhat.com>
Cc: jit@gcc.gnu.org
Subject: Re: GCCJIT and tail-recursive calls
Date: Thu, 01 Jan 2015 00:00:00 -0000	[thread overview]
Message-ID: <559F4F61.6040807@starynkevitch.net> (raw)
In-Reply-To: <1436491885.31573.17.camel@surprise>

On 07/10/2015 03:31 AM, David Malcolm wrote:
> On Fri, 2015-07-10 at 00:30 +0200, Basile Starynkevitch wrote:
>> Hello all,
>>
>> It is well known that GCC is sometimes able to optimize some calls to
>> tail-recursive calls (or tail calls
>> https://en.wikipedia.org/wiki/Tail_call ...) which do not consume any stack.
>>
>> can a GCCJIT application issues such tail calls? I'm not talking of
>> letting GCC decide entirely by itself (GCCJIT is probably doing that
>> already).
> gcc (and thus libgccjit) can already decide by itself if a call is a
> tail-call, and optimize accordingly.
>
> See:
> https://gcc.gnu.org/onlinedocs/jit/intro/tutorial04.html#behind-the-curtain-how-does-our-code-get-optimized
> and in particular:
> https://gcc.gnu.org/onlinedocs/jit/intro/tutorial04.html#elimination-of-tail-recursion
>
>
> This is done by:
>    gcc/tree-tailcall.c
> controlled by:
>    -foptimize-sibling-calls
>
> which is on by default at -02 and above.
>
>
> Normally you'd do something like:
>
>     gcc_jit_block_end_with_return (...
>       gcc_jit_context_new_call (...));
>
> or
>
>     gcc_jit_block_add_eval (...
>       gcc_jit_context_new_call (...));
>
>     gcc_jit_block_end_with_void return (...);
>
>
> The tailcall is obvious in both of these cases.
>
>> I was thinking of adding a construct where the GCCJIT client knows
>> for sure that the call should be tail-rec (and if GCCJIT was not able to
>> make a tailcall, that would be an error).
> It's not clear to me why that would be useful.  Am I missing something?


You are coding a JIT for your implementation of Scheme.
Scheme requires that tailcails are effectively ilmplemented as such.
So your Scheme implementation has to detect tailcalls and want to be 
sure that GCCJIT
is implementing them as needed.

How would you ensure that?

Regards.


-- 
Basile STARYNKEVITCH         http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net mobile: +33 6 8501 2359
8, rue de la Faiencerie, 92340 Bourg La Reine, France
*** opinions {are only mine, sont seulement les miennes} ***

  reply	other threads:[~2015-07-10  4:53 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-01-01  0:00 Basile Starynkevitch
2015-01-01  0:00 ` David Malcolm
2015-01-01  0:00   ` Basile Starynkevitch [this message]
2015-01-01  0:00     ` David Malcolm
2015-01-01  0:00       ` Basile Starynkevitch

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=559F4F61.6040807@starynkevitch.net \
    --to=basile@starynkevitch.net \
    --cc=dmalcolm@redhat.com \
    --cc=jit@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).