In the TargetData class (available from you ExecutionEngine), you have some informations available (such as StructLayout...).<br><br><br><div class="gmail_quote">On Thu, Jun 18, 2009 at 5:08 PM, Nyx <span dir="ltr"><<a href="mailto:mcheva@cs.mcgill.ca">mcheva@cs.mcgill.ca</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><br>
That sounds rather cumbersome, is there no simpler way to get the actual size<br>
of a struct?<br>
<div><div></div><div class="h5"><br>
<br>
John Criswell wrote:<br>
><br>
> Nyx wrote:<br>
>> Hello,<br>
>><br>
>> I would just like to ask if it's possible to explicitly free allocas.<br>
>> This<br>
>> is because I need to call functions that take structs of different sizes<br>
>> as<br>
>> input, (possibly inside of loops) and I would rather avoid a stack<br>
>> overflow.<br>
>><br>
> No, it's not legal to free memory returned by alloca.  Such memory is<br>
> allocated on the stack; the code generator usually converts this to an<br>
> adjustment of the stack pointer on function entry whenever possible.<br>
>> If this is not possible, an alternate solution would be for me to<br>
>> allocate<br>
>> an array of bytes larger than all the struct types I may be using, and<br>
>> cast<br>
>> that pointer to the right type each type. In that case, I would like to<br>
>> know<br>
>> how I can find out what the size of a struct is. I've heard of people<br>
>> talking about using "the right target data", but I have no idea how to<br>
>> actually do that, and I find the doxygen info doesn't make it any<br>
>> clearer.<br>
>><br>
> This sounds like your best option.  The TargetData pass is a pass that<br>
> informs other passes of  machine specific information and can, for<br>
> example, give you the number of bytes used to store a type.<br>
><br>
> Read the document on Writing an LLVM Pass<br>
> (<a href="http://llvm.org/docs/WritingAnLLVMPass.html" target="_blank">http://llvm.org/docs/WritingAnLLVMPass.html</a>) to learn how to have your<br>
> pass declare the TargetData pass as a prerequisite and to get a pointer<br>
> to it when your<br>
> runOnFunction/runOnModule/runOnBasicBlock/runOn<whatever> method is<br>
> called.  Then use the doxygen documentation to find the correct method<br>
> of the TargetData pass<br>
> (<a href="http://llvm.org/doxygen/classllvm_1_1TargetData.html" target="_blank">http://llvm.org/doxygen/classllvm_1_1TargetData.html</a>) to use to get the<br>
> size of the type that you allocated via alloca.<br>
><br>
> -- John T.<br>
><br>
>> Thank you for your help,<br>
>><br>
>> - Max<br>
>><br>
><br>
> _______________________________________________<br>
> LLVM Developers mailing list<br>
> <a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
><br>
><br>
<br>
</div></div><font color="#888888">--<br>
View this message in context: <a href="http://www.nabble.com/Explicitly-Freeing-Allocas-tp24093351p24094996.html" target="_blank">http://www.nabble.com/Explicitly-Freeing-Allocas-tp24093351p24094996.html</a><br>
</font><div class="im">Sent from the LLVM - Dev mailing list archive at Nabble.com.<br>
<br>
_______________________________________________<br>
</div><div><div></div><div class="h5">LLVM Developers mailing list<br>
<a href="mailto:LLVMdev@cs.uiuc.edu">LLVMdev@cs.uiuc.edu</a>         <a href="http://llvm.cs.uiuc.edu" target="_blank">http://llvm.cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev</a><br>
</div></div></blockquote></div><br>