<div class="gmail_quote">On Fri, Nov 13, 2009 at 12:19 AM, Roman Leshchinskiy <span dir="ltr">&lt;<a href="mailto:rl@cse.unsw.edu.au">rl@cse.unsw.edu.au</a>&gt;</span> wrote:</div><div class="gmail_quote"><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

Let&#39;s see if I understand this correctly. In your code, decodeUtf8 calls streamUtf8. They both get inlined into main but then unsafeChr8 does not. Correct?<br></blockquote><div><br></div><div>Here&#39;s what I see in the simplifer output with 6.10.4: the <i>unoptimised</i> body of streamUtf8 is being inlined into main, with many out-of-line functions called in its inner loop, then length is out-of-line applied to that result.</div>
<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I somehow stumbled on the idea of removing the INLINE annotation from next, and performance suddenly improved by a significant integer multiple. This caused the body of streamUtf8 to be inlined into my test program, as I hoped.<br>

</blockquote>
<br></div>
Or are you saying that it&#39;s streamUtf8 that isn&#39;t getting inlined into main?</blockquote><div><br></div><div>When I trimmed that INLINE out, the body of streamUtf8 was being inlined, but differently: all of the functions it had been calling out-of-line were now inlined.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div>
Does changing the definition of length to<br>
<br>
length = id S.lengthI<br>
<br>
help? GHC used to have a bug in this area but I haven&#39;t been bitten by it for quite some time.<br></blockquote><div><br></div><div>That change makes no real difference. It changes the function called at that call site, but it&#39;s still out-of-line.</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Also, I wonder how Stream.stream is defined. Is it strict in Text? If it isn&#39;t, does making it strict help?</blockquote>
<div><br></div><div>It is strict in Text, yes.</div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">If you have a spare minute, perhaps you could try the HEAD with the new inliner and see if that helps? Although I somewhat doubt it, to be honest.</div>
</blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><font color="#888888">
</font></blockquote></div><br><div>I posted those numbers in a reply to Simon a little while ago. HEAD is generally much better than 6.10, which is great, but I&#39;m still stuck with this mystery on versions of the compiler that people may actually be able to use :-\</div>