[LLVMdev] [patch] CodeEmitter Memory Foot Reduction
Aaron Gray
aaronngray.lists at googlemail.com
Thu Jul 16 12:31:25 PDT 2009
2009/7/16 Aaron Gray <aaronngray.lists at googlemail.com>
> 2009/7/16 Chris Lattner <clattner at apple.com>
>
>>
>> On Jul 16, 2009, at 10:04 AM, Aaron Gray wrote:
>>
>>
>>> I understand that you say that, but I can't bring myself to care at this
>>> point. Have you thought about how many cycles are already used to produce
>>> the instructions that lead to the emission of those 10K bytes? The total
>>> percentage of time spent doing these virtual calls will be tiny compared to
>>> the total time to generate the code.
>>>
>>> If you switch to using virtual functions, get the code working, and we
>>> *measure* a performance problem, then we can fix it. There are much better
>>> ways to do this than templating the whole code emitter.
>>>
>>> That means JIT code also has the virtual function overhead too, this will
>>> slow down existing JIT code. Templates are already there and they work and
>>> they do not take up _too_ much memory.
>>>
>>
>> As I said before, if you are compelled to, feel free to continue with
>> your approach of premature optimization. I will fix it later.
>>
>
> If you are not too bothered with the memory overhead in the short term then
> it is probably best to leave the code as it is for meantime.
>
> I think the original MachineCodeEmitter with inline emit* functions and for
> virtual functions like extend() so we can control memory management in sub
> classes.
>
> class MachineCodeEmitter {
> public:
> ....
> inline void emitByte( uint8_t b) {
> if (freespace())
> BufferPtr++ = b;
> else {
> extend();
> BufferPtr++ = b;
> }
> }
>
> protected:
> void virtual extend() = 0
> };
>
> so extend is overriden in JITCodeEmitter and ObjectCodeEmitter and is
> called moving emitted code to a bigger buffer if we run out of memory, then
> emission continues.
>
> This gives the lowest overhead and flexability. If ObjectCodeEmitter and
> JITEmitter manage memory then the design is transparent to the higher levels
> of DOE and JIT.
>
> The old design was the best design it just needed an extend() method.
>
Oh, and JITEmitter::finishFunction will have to provide relocations for JIT
too.
Aaron
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20090716/6777a05a/attachment.html>
More information about the llvm-dev
mailing list