caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: John Max Skaller <skaller@ozemail.com.au>
To: caml-list@inria.fr
Subject: [Caml-list] Tail recursion detection
Date: Mon, 20 May 2002 11:18:55 +1000	[thread overview]
Message-ID: <3CE84EFF.3090903@ozemail.com.au> (raw)
In-Reply-To: <200205172118.XAA19584@pauillac.inria.fr>

I'm in the process of writing a tail recursion detector for 
Felix, and many of the routines are tail recursive (heh!).
However, in a few places, there are multi-way branches
each of which terminate in identical tail calls:

let rec f x y = match .. with
   | .. -> 
      if .. then 
      if .. then
      if .. then
	f x' y'
      else f x' y'
      else f x' y'
      else f x' y'
..

My question is: how smart is the Ocaml tail call detector?
Can I optimise the above code like:

let rec f x y = 
  let tail () = f x y in
   if .. then
   if .. then
   if then tail()
   else tail()
   else tail()
   else tail()


for example? [More likely, the 'tail' function will
fix arguments which are commonly invariant ..]

[If tail detection is done after inlining,
and the tail() calls are inlined, the tail calls
should be detected even if the tail call detector
is fairly dumb. In that case, how can I be sure
to inline tail() calls?]

-- 
John Max Skaller, mailto:skaller@ozemail.com.au
snail:10/1 Toxteth Rd, Glebe, NSW 2037, Australia.
voice:61-2-9660-0850




-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


  parent reply	other threads:[~2002-05-21  7:30 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2002-05-15  9:13 [Caml-list] Generating C stubs Jérôme Marant
2002-05-15  9:49 ` Jocelyn Sérot
2002-05-15 12:17   ` Jérôme Marant
2002-05-15 12:38     ` Remi VANICAT
2002-05-15 20:19       ` Jérôme Marant
2002-05-16  7:06     ` Florian Hars
2002-05-16  7:34       ` Markus Mottl
2002-05-16 19:13         ` [Caml-list] Camlp4/OCaml [was: Generating C stubs] Daniel de Rauglaudre
2002-05-16 19:27           ` Chris Hecker
2002-05-16 19:39           ` John Prevost
2002-05-16 19:44             ` Daniel de Rauglaudre
2002-05-16 20:28               ` Chris Hecker
2002-05-16 21:38               ` Markus Mottl
2002-05-17  0:31                 ` Alessandro Baretta
2002-05-17 14:32                   ` Pierre Weis
2002-05-17 15:31                     ` Markus Mottl
2002-05-17 21:18                       ` Pierre Weis
2002-05-17 21:37                         ` Dave Mason
2002-05-18  9:46                           ` Pierre Weis
2002-05-21 17:51                             ` Diego Olivier Fernandez Pons
2002-05-19 11:31                         ` Markus Mottl
2002-05-21 17:10                           ` james woodyatt
2002-05-20  1:18                         ` John Max Skaller [this message]
2002-05-21  7:46                           ` [Caml-list] Tail recursion detection Alain Frisch
2002-05-21 11:35                             ` Benedikt Grundmann
2002-05-21 15:12                             ` John Max Skaller
2002-05-22 12:44                               ` Noel Welsh
2002-05-22 16:47                                 ` John Max Skaller
2002-05-21  8:57                           ` Noel Welsh
2002-05-20 22:59                     ` [Caml-list] Camlp4/OCaml [was: Generating C stubs] Alessandro Baretta
2002-05-16 23:22               ` [Caml-list] Re: Camlp4/OCaml Christopher Quinn
2002-05-17  7:02                 ` Daniel de Rauglaudre
     [not found]               ` <Pine.BSF.4.40.0205170357340.11758-100000@bpr.best.vwh.net>
2002-05-17  7:09                 ` [Caml-list] Camlp4/OCaml [was: Generating C stubs] Daniel de Rauglaudre
2002-05-17  7:54               ` [Caml-list] Camlp4/OCaml Michel Mauny
2002-05-17  8:05                 ` Daniel de Rauglaudre
2002-05-16 14:09 ` [Caml-list] Generating C stubs Benedikt Grundmann
2002-05-16 16:37 ` Jeff Henrikson
2002-05-16 16:31   ` Benedikt Grundmann
2002-05-17  5:59     ` Jeff Henrikson

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=3CE84EFF.3090903@ozemail.com.au \
    --to=skaller@ozemail.com.au \
    --cc=caml-list@inria.fr \
    /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 NNTP newsgroup(s).