[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Chicken-hackers] inliner bug
From: |
Felix |
Subject: |
Re: [Chicken-hackers] inliner bug |
Date: |
Sun, 10 Mar 2013 23:27:30 +0100 (CET) |
From: Andrei Barbu <address@hidden>
Subject: [Chicken-hackers] inliner bug
Date: Sun, 10 Mar 2013 15:09:34 -0400
> Hi,
Hello!
>
> The chicken inliner runs for a long time before failing with exit code
> 11 on the following code:
>
> (declare (inline test))
>
> (define (go a) (a 1))
> (define (test x) (go (lambda (x) (x) (test x))))
>
> Compile with:
>
> csc -inline a.scm -emit-inline-file a.inline
>
Normally procedures are inlined if their size is below a certain limit
(a count of "nodes" in the internal representation of the compiler),
which defaults to 20, I believe. By adding the "inline" declaration,
you are effectively disabling this size test, telling the compiler:
"Inline this! Always! Now go and do what I command!"
What we can do about this is one of the following:
- keep the current behaviour, since it is what the user wants (depending
on the point of view, of course)
- disable the declaration after the current optimization pass, once
a procedure has been inlined at all call-sites in the program (this
may miss some call-sites in nested calls, but is better than what
happens now, with the compiler running out of memory and all that...)
- define a "cut off" point, a maximal size that a procedure may have
after which inlining will be prohibited (this is difficult to determine
correctly and depends on too many factors, but is easy to implement)
cheers,
felix