<div class="gmail_quote">
<div>I have done a possible cleanup patch for the MachineCodeEmitter, ELFWriter, and MachOWriter classes. It removes the two startGVStub(), and finishGVStub() JIT specific methods.</div>
<div> </div>
<div>You may remember the following comments :-</div>
<div> </div>
<div>    /// JIT SPECIFIC FUNCTIONS - DO NOT IMPLEMENT THESE HERE!</div>
<div> </div>
<div>To get rid of these easily turned out to be a semicomplex modification because of the JITInfo classes dependance on MachineCodeEmitter and the GVStub methods. Also the fact that JITEmitter is hidden and quite a large class in a .cpp file.</div>

<div> </div>
<div>At first I did this by introducing a JITCodeEmitter class between MachineCodeEmitter and the (un)hidden JITEmitter. But this lead to more dependancies and they lead on to more.</div>
<div> </div>
<div>I have now made class header for JITEmitter putting it in the llvm namespace. There were several other header dependancies as a result and lib/ExecutionEngine/JIT/JIT.h and lib/ExecutionEngine/JIT/JITDwarfEmitter.h required moving to the include/llvm/ExecutionEngine/JIT directory as a result to make them visible to JIT.h and dependants.</div>

<div> </div>
<div>    * create JITEmitter.h and made class JITEmitter visible in llvm namespace</div>
<div>    * moved lib/ExecutionEngine/JIT/JIT.h to include/llvm/ExecutionEngine/JIT</div>
<div>    * moved lib/ExecutionEngine/JIT/JITDwarfEmitter.h to include/llvm/ExecutionEngine/JIT</div>
<div>    * removed JIT specific startGVStub()'s functions and finishGVStub() from MachineCodeEmitter, ELFWriter, and  MachOWriter classes.</div>
<div>
<div>    * modified include/llvm/Target/TargetJITInfo.h to use JITEmitter rather than MachineCodeEmitter.</div>    * modified :-</div>
<div>        - lib/Target/PowerPC/PPCJITInfo.h<br>        - lib/Target/PowerPC/PPCJITInfo.cpp<br>        - lib/Target/ARM/ARMJITInfo.cpp<br>        - lib/Target/ARM/ARMJITInfo.h<br>        - lib/Target/Alpha/AlphaJITInfo.cpp<br>
        - lib/Target/Alpha/AlphaJITInfo.h<br>        - lib/Target/X86/X86JITInfo.h<br>        - lib/Target/X86/X86JITInfo.cpp </div>
<div>        to use JITEmitter rather than MachineCodeEmitter.</div>
<div>    * renamed multiple MCE's to JE's</div>
<div>    * removed unneed getCodeEmitter()'s in JITEmitter.cpp class JIT.</div>
<div>    * modified lib/ExecutionEngine/JIT/TargetSelect.cpp to use include/llvm/ExecutionEngine/JIT/JIT.h include file </div>
<div>
<div>    * modified lib/ExecutionEngine/JIT/Intercept.cpp to use include/llvm/ExecutionEngine/JIT/JIT.h include file </div></div>
<div> </div>
<div>I was wondering whether it would be better to call the JITEmitter class JITCodeEmitter and have JCE's instead of JE's.</div>
<div> </div>
<div>I dont think there are any other issues I missed or need tidying up either. I removed some getCodeEmitter and accompanying redundant assertions from JITEmitter.cpp JIT class methods, AFAICT this is only cruft.</div>

<div> </div>
<div>Anyway here's the patch :-</div>
<div> </div>
<div>    <a href="http://www.aarongray.org/LLVM/patches/llvm-JITEmitter.patch" target="_blank">http://www.aarongray.org/LLVM/patches/llvm-JITEmitter.patch</a></div>
<div> </div>
<div>There was another way I considered that was having a second MCE for writting global data and stubs to. I believe this would not require making JITEmitter and friend visible, but may introduce more runtime overhead.</div>

<div> </div>
<div>If you could have a look at this patch and see what you think.</div>
<div> </div>
<div>If things go well I will be working on patches for the ELFWriter and an accompanying COFFWriter. I know I promised this before but unfortunate circumstances stopped me working on it back then.</div>
<div> </div>
<div>Hopefully I can do some ground work and incremental patches to get some code generated then look at the ABI issues on Windows.</div>
<div> </div>
<div>Cheers,</div>
<div> </div><font color="#888888">
<div>Aaron</div>
<div> </div></font></div><br>