[LLVMdev] interesting possible compiler bug
Eli Friedman
eli.friedman at gmail.com
Mon Oct 15 15:59:07 PDT 2012
On Mon, Oct 15, 2012 at 3:12 PM, Krzysztof Parzyszek
<kparzysz at codeaurora.org> wrote:
> On 10/15/2012 4:49 PM, David Blaikie wrote:
>>
>> On Mon, Oct 15, 2012 at 2:43 PM, Krzysztof Parzyszek
>>>
>>>
>>> Do we do that in LLVM? That would be surprising... Optimizing calls to
>>> malloc (like memory pooling for example) is not a trivial thing to do,
>>> and
>>> it requires a fairly strong interprocedural analysis.
>>
>>
>> Why would it require that? If you can see that the malloc doesn't
>> escape you can, in such simple cases, simply move the data from malloc
>> memory into an alloca instead.
>
>
> You're right about moving data from heap to stack, but I think it would be
> somewhat limited in its scope. The compiler should be careful doing such
> things anyways, since the user can set stack and heap memory limits
> independently, and have expectations as to where the memory will be
> allocated at run time.
>
> Another thing is that if malloc is called twice, and neither call returns
> null, then the two pointers returned are guaranteed to be different. If you
> replace the call to malloc with alloca, the alloca (i.e. stack allocation)
> still needs to run in a loop. Of course, this doesn't have to happen in
> this particular example, but an optimization targeting this case is quite
> pointless.
The optimization which triggers here is essentially dead malloc
elimination; we can end up with IR which looks a lot like the original
example in non-trivial cases because sometimes we can eliminate all
accesses to a block of malloc'ed memory (via inlining/GVN/etc.).
-Eli
More information about the llvm-dev
mailing list