[LLVMdev] RFC: Exception Handling Rewrite

Jakob Stoklund Olesen stoklund at 2pi.dk
Fri Jul 22 23:44:48 PDT 2011

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.

- 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.

Why won't SplitCriticalEdge work for landing pads? Does it require more than splitting the landing pad after the landingpad instruction, and duplicating the top half? Alternatively, could we get a SplitLandingPad function?

Will it be possible to split landing pads during codegen?


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

More information about the llvm-dev mailing list