[LLVMdev] RFC: Exception Handling Rewrite

Jakob Stoklund Olesen stoklund at 2pi.dk
Sat Jul 23 00:26:08 PDT 2011


On Jul 22, 2011, at 11:52 PM, Cameron Zwarich wrote:

> On Jul 22, 2011, at 11:44 PM, Jakob Stoklund Olesen wrote:
> 
>> On Jul 22, 2011, at 10:29 PM, Bill Wendling wrote:
>> 
>>> // Restrictions:
>>> 
>>> There are several new invariants which will be enforced by the verifier:
>>> 
>>> 1. A landing pad block is a basic block which is the unwind destination of an
>>>   invoke instruction.
>>> 2. A landing pad block must have a landingpad instruction as its first non-PHI
>>>   instruction.
>>> 3. The landingpad instruction must be the first non-PHI instruction in the
>>>   landing pad block.
>>> 4. Like indirect branches, splitting the critical edge to a landing pad block
>>>   requires considerable care, and SplitCriticalEdge will refuse to do it.
>>> 5. All landingpad instructions in a function must have the same personality
>>>   function.
>> 
>> Could we add:
>> 
>> - A landing pad block is not the destination of any other kind of terminator. Only unwind edges are allowed.
> 
> How do we lower SjLj exceptions as an IR -> IR pass then?

I don't know. What does the landingpad instruction return when you branch to a landing pad?

A landing pad must follow some ABI convention, it represents the other return value of an invoke instruction.

SjLj is weird. How do we pass values along unwind edges today? Don't they need to dominate the setjmp call?

>> - The landingpad instruction must only appear at the top of a landing pad. It cannot appear in any other block, or following non-phi instructions.
> 
> How does this differ from 2&3 above?

It probably doesn't, it wasn't completely clear to me.

/jakob

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110723/c982509e/attachment.html>


More information about the llvm-dev mailing list