[LLVMdev] dominator, post-dominator and memory leak

Bin Tzeng bintzeng at gmail.com
Wed Nov 13 10:44:44 PST 2013


Thanks! I will try that and see whether it works.

On Wed, Nov 13, 2013 at 5:01 AM, Henrique Santos <
henrique.nazare.santos at gmail.com> wrote:

> It seems that placing the calls to free at the predecessors of dominance
>> frontier is inadequate. It is possible that there are exit blocks that are
>> dominated by BB12 (calls to malloc). I guess we can also insert calls to
>> free at these exit blocks too.
>
> That crossed my mind a few minutes later. : )
>
> If you're interested, PRE.cpp existed last at r25315. It calculates the
> "availability frontier" which is probably what you're looking for.
> I suggest, however, that you try coming up with another solution instead.
> You might consider using -mergereturn.
>

> H.
>
>
> On Wed, Nov 13, 2013 at 2:13 AM, Bin Tzeng <bintzeng at gmail.com> wrote:
>
>> Hi Henrique,
>> Thanks for the quick reply!
>>
>> On Tue, Nov 12, 2013 at 9:13 PM, Henrique Santos <
>> henrique.nazare.santos at gmail.com> wrote:
>>
>>> PRE normally uses a latest placement algorithm to do something of the
>>> sort.
>>> I don't know about GVN/PRE, but older version of PRE might have it.
>>> Just placing the calls to free at the predecessors (dominated by BB12)
>>> of the dominance frontier of BB12 seems to work, however. Is there anything
>>> wrong with this?
>>>
>> It seems that placing the calls to free at the predecessors of dominance
>> frontier is inadequate. It is possible that there are exit blocks that are
>> dominated by BB12 (calls to malloc). I guess we can also insert calls to
>> free at these exit blocks too.
>>
>>> H.
>>>
>>>
>>> On Tue, Nov 12, 2013 at 11:30 PM, Bin Tzeng <bintzeng at gmail.com> wrote:
>>>
>>>> Hi all,
>>>>
>>>> I have been writing a pass to heapify some alloca's (it is
>>>> pessimistization, not optimization). For example, in the following control
>>>> flow graph, there is a call to malloc inserted in block BB12. In order to
>>>> avoid memory leak, free's are needed. The free cannot be inserted in BB23
>>>> because BB23 is not dominated by BB12. There are two ways to go I can think
>>>> of here. One way is to insert a new basic block, say BB24, to connect both
>>>> BB21 and BB22 and a free can be inserted into the new block BB24. The new
>>>> block BB24 has to post-dominate BB12 and all the users of malloc have to
>>>> happen before BB24. Another way to go is to insert a free in both BB21 and
>>>> BB22. That is, a free is inserted in all the paths from BB12 to all exits
>>>> after all users of malloc to avoid memory leak. I wonder whether there is
>>>> any pass that does similar analysis in order to avoid duplication of
>>>> efforts.
>>>>
>>>>                BB10 (entry)
>>>>               /       \
>>>>         BB11       BB12 (malloc)
>>>>        /               /      \
>>>>   BB13           /     BB15
>>>>       \             /         /       \
>>>>        \           /     BB18  BB19
>>>>         \         /           \       /
>>>>       BB20  BB21      BB22
>>>>              \      |         /
>>>>               \     |       /
>>>>                \    |     /
>>>>                 \   |   /
>>>>                  BB23 (exit)
>>>>
>>>> Any advice is appreciated. Thanks in advance!
>>>> Bill
>>>>
>>>>
>>>> _______________________________________________
>>>> LLVM Developers mailing list
>>>> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>>>
>>>>
>>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131113/10d12203/attachment.html>


More information about the llvm-dev mailing list