[LLVMdev] x86 unwind support[MESSAGE NOT SCANNED]

Kenneth Uildriks kennethuil at gmail.com
Mon Jul 20 08:42:23 PDT 2009

On Mon, Jul 20, 2009 at 10:33 AM, Mark Shannon<marks at dcs.gla.ac.uk> wrote:
> You are confusing stopping the unwinding at *some* levels or at *all*
> levels.
> Eg.
> invoke
>  call
>   call
>    invoke
>     call
>      call
>       unwind
> Requires a two unwinding steps for Java/Python and six steps for C++.
> Only languages with stack-allocated objects must stop unwinding for calls.

C++ doesn't need you to stop unwinding at every level.  Only at levels
where stack-allocated objects with non-trivial destructors exist.  At
those levels, the code generator can turn all calls into invokes.
Other levels can be skipped, since stack-allocated objects without
non-trivial destructors can simply be abandoned as the stack pointer
is bumped past them.

So a function with stack-allocated objects having non-trivial
destructors is pretty much the equivalent of a function with a
finalizer, and can be code-generated as such using invokes instead of
calls.  Calls can still be skipped.  The difference is that many C++
programs will tend to wind up with more invokes.

>>> I take it you have never used Python ;)
>>> (Python uses exceptions to terminate loops, so it helps if they aren't
>>> too slow)
>> I have used python, and it is slow (sorry).  In fact, python
> Python: write program 1 day, run program 10mins = 1day + 10mins
> C++: write program 1 month, run program 30 seconds = 1month + 30 secs
> It depends on how you look at it, but we are getting off topic here :)
>> Exceptions are implemented in python as a second return value, thus
> Only in one particular Python implementation, there are several.
> Its not in the language spec.
>> EVERY function, even those which don't throw exceptions, must pay the
>> price.  And just because the python community does it, doesn't mean
>> it's good programming practice.
> The same could be said of C++. Both languages have their place, and llvm
> should support compilers for both (and lots of other languages as well).
>>> Please try and get out of the C++ mindset, llvm may be implemented *in*
>>> C++, but its not implemented just *for* C++ (at least I hope it isn't).
>> That is exactly my argument.  Multi-level unwinds are required by MANY
>> languages.
> Not in the same way as C++, see above.
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev

More information about the llvm-dev mailing list