Solution for memory leak in tblgen

David Blaikie dblaikie at gmail.com
Tue Sep 2 21:20:59 PDT 2014


On Tue, Sep 2, 2014 at 7:22 PM, wuhui1973 <wuhui1973 at 163.com> wrote:

>
> Hello Andrew, Hal:
>
> I have updated my solution. In these days, I have tried BumpPtrAlloc, but
> the biggest problem of it is BumpPtrAlloc won't invoke dtor before
> releasing the memory.
>

That's intentional - do the dtors do any useful work? (is there any reason
the dtors of these things aren't trivial?)


> And I also consider std::shared_ptr, but not use it for following findings:
>
> 1> Nodes of TreePatternNode & TreePattern form cycles in reference, I have
> designed a simple method to recycle them, which can't be used with
> shared_ptr.
>

Could you explain the method you used to resolve cycles and why it isn't
possible with shared_ptr?

(you know, if it's just a matter of needing intrusive reference counting
(which I'd rather avoid if possible, but sometimes can't be helped) then
that is possible with shared_ptr, usind std::enable_shared_from_this)


> 2> After adding the grammar sugar operator-> & operator T(), now most
> source files using TreePatternHolder & TreePatternNodeHolder now needn't be
> changed. We can do that because we check reference count on every reference
> counted objects in every related methods. So any abuse can be found earily
> as possible.
>
> In attachment, there are two kinds of suffix:
>
> *.review is for review
> *.fix is for submit
>
> The reason why need these files is because I had run clang-format on the
> related source files which results in too many unrelated differences
>
>
>
> At 2014-08-07 11:59:44, "Andrew Trick" <atrick at apple.com> wrote:
>
>
> On Aug 7, 2014, at 2:29 AM, wuhui1973 <wuhui1973 at 163.com> wrote:
>
> >> [hui] I am new to tablgen, I hope I can explain it clearly. At some
> stage in building llvm, tablgen will compile .td file into .inc file (C++
> source), it will compile .td file one after one till the stage is done. As
> now the tree nodes are just allocated but not freed, they get lost between
> handling .td files. So the patch aims to reclaim the memory when
> finishing one .td file. I think pool allocator can be an option, but as I
> know, pool allocator is just another sub-project under llvm, has it been
> built into llvm? And it needs be done by the DSA (data structure analysis)
> alogrithm?! Is there any example in llvm?
>
>
> Sorry, I wasn’t clear what I was talking about. In LLVM, we have a class
> called BumpPtrAllocator. You can use that to allocate a set of nodes, then
> free them all between passes. If that accomplishes our goals for TableGen,
> then I think it’s the ideal solution.
>
> -Andy
>
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140902/bd697332/attachment.html>


More information about the llvm-commits mailing list