<br><br><div class="gmail_quote">On Fri, Sep 30, 2011 at 7:37 PM, Mehrdad Reshadi <span dir="ltr">&lt;<a href="mailto:reshadi@gmail.com">reshadi@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Hi,<div>I have been searching on the internet but could not find a definitive answer to this. </div><div>Is there any limitation in the latest version of Mono (as of 2.10.5) in inlining a method in the following cases:</div>

<div>- a method that only uses &quot;ref&quot; struct parameters </div></blockquote><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div>- a method that uses struct parameters</div>
<div>- a method that has struct local variables</div><div>- a method that returns a struct</div><div><br>
</div><div>I appreciate if anyone can point me to the part of mini that deals with inlining heuristics? </div><div><br></div></blockquote><div><br></div><div>The checks are done here:</div><div><br></div><div>mono/mini/method-to-ir.c</div>
<div><br></div><div>The function mono_method_check_inlining does basic checks and the rest are done while converting method to IR.</div><div>Then look for uses of the INLINE_FAILURE macro to see what in the body of a method aborts inlining.</div>
<div><br></div><div>Take the below example, Foo will be inlined:</div><div><br></div><div><div>using System;</div><div><br></div><div>class Driver {</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>static DateTime Foo (DateTime a, DateTime b, DateTime c) {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>return a;</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div><br></div><div><span class="Apple-tab-span" style="white-space:pre">        </span>static void Main () {</div>
<div><span class="Apple-tab-span" style="white-space:pre">                </span>DateTime a = DateTime.Now;</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>DateTime b = a.AddDays (1);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>DateTime c = a.AddDays (2);</div>
<div><br></div><div><span class="Apple-tab-span" style="white-space:pre">                </span>DateTime d = Foo (a, b, c);</div><div><span class="Apple-tab-span" style="white-space:pre">                </span>Console.WriteLine (d);</div><div><span class="Apple-tab-span" style="white-space:pre">        </span>}</div>
<div>}</div></div><div><br></div><div> </div></div>