[LLVMdev] Explicitly Freeing Allocas

John Criswell criswell at cs.uiuc.edu
Thu Jun 18 07:15:25 PDT 2009


Nyx wrote:
> Hello,
>
> I would just like to ask if it's possible to explicitly free allocas. This
> is because I need to call functions that take structs of different sizes as
> input, (possibly inside of loops) and I would rather avoid a stack overflow.
>   
No, it's not legal to free memory returned by alloca.  Such memory is
allocated on the stack; the code generator usually converts this to an
adjustment of the stack pointer on function entry whenever possible.
> If this is not possible, an alternate solution would be for me to allocate
> an array of bytes larger than all the struct types I may be using, and cast
> that pointer to the right type each type. In that case, I would like to know
> how I can find out what the size of a struct is. I've heard of people
> talking about using "the right target data", but I have no idea how to
> actually do that, and I find the doxygen info doesn't make it any clearer.
>   
This sounds like your best option.  The TargetData pass is a pass that
informs other passes of  machine specific information and can, for
example, give you the number of bytes used to store a type.

Read the document on Writing an LLVM Pass
(http://llvm.org/docs/WritingAnLLVMPass.html) to learn how to have your
pass declare the TargetData pass as a prerequisite and to get a pointer
to it when your
runOnFunction/runOnModule/runOnBasicBlock/runOn<whatever> method is
called.  Then use the doxygen documentation to find the correct method
of the TargetData pass 
(http://llvm.org/doxygen/classllvm_1_1TargetData.html) to use to get the
size of the type that you allocated via alloca.

-- John T.
 
> Thank you for your help,
>
> - Max
>   




More information about the llvm-dev mailing list