<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hey all,<div><br></div><div>Attached you will find an experimental patch which allows me to play with a derived JIT class. With this patch</div><div>I've alleviated my concerns with forcing cross module behavior for all users of JIT. However this introduces some </div><div>new semantics, and kind of circumvents the EngineBuilder API. More important though, I have not addressed</div><div>any concern about using stub functions in eager compilation mode. I don't yet understand this concern since</div><div>these stubs are compile time only, and it seems that the pending function system inherently uses stubs. Anyway</div><div>I'm sure my understanding will get fixed soon enough. :-) The new code is NOT commented.</div><div><br></div><div>This patch was NOT attached to <span class="Apple-style-span" style="font-family: sans-serif; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><a href="http://llvm.org/bugs/show_bug.cgi?id=2606" style="color: rgb(102, 51, 102); ">2606</a>. Rather I feel this patch is experimental in nature. As before I tried to use "GMV Mod" </span></div><div><span class="Apple-style-span" style="font-family: sans-serif; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">as comments to mark my modifications as long as they did not involve introducing new files. If one is interested and wants </span></div><div><span class="Apple-style-span" style="font-family: sans-serif; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; ">to use this patch, one should use the test cases found in  <a href="http://llvm.org/bugs/show_bug.cgi?id=2606" style="color: rgb(102, 51, 102); ">2606</a> and modify them in the following ways.</span></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><br></span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">1) Add: #include "llvm/ExecutionEngine/CrossModuleJIT.h"</span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">2) Add the call: LLVMSetupForCrossModuleJITUse();</span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><span class="Apple-tab-span" style="white-space:pre"> </span>before using the EngineBuilder API</span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><br></span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">For example take:</span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><br></span></font></div><div><span class="Apple-style-span" style="font-family: sans-serif; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span class="Apple-tab-span" style="white-space:pre">  </span>ExecutionEngine* EE = EngineBuilder(M).create();</span></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><br></span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;">and turn it into:</span></font></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><br></span></font></div><div><span class="Apple-style-span" style="font-family: sans-serif; -webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px; "><span class="Apple-tab-span" style="white-space:pre"> </span>LLVMSetupForCrossModuleJITUse();</span></div><div><font class="Apple-style-span" face="sans-serif"><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 1px; -webkit-border-vertical-spacing: 1px;"><div><span class="Apple-tab-span" style="white-space:pre">   </span>ExecutionEngine* EE = EngineBuilder(M).create();</div><div><br></div><div>I wrote this somewhat fast so caveat emptor.</div><div><br></div><div>Garrison</div><div><br></div><div></div></span></font></div></body></html>