<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Aug 5, 2011, at 10:57 AM, Peter Lawrence wrote:</div><blockquote type="cite"><span class="Apple-style-span" style="border-collapse: separate; font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><div>However it seems that if a landingpad-block has multiple predecessors (often the case,</div><div>multiple InvokeInst in the main body of a try-statement all go to the same landingpad-</div><div>block), then you cannot move the LandingpadInst in order to break a critical edge unless</div><div>you do it for _all_  landingpad-block predecessor edges simultaneously, but that seems</div><div>to be a messy conclusion (being forced to split other edges that don't need to be split).</div><div><br></div><div><br></div><div>my first guess is that all the nuances of whether it ever makes sense and/or is even</div><div>logically possible to split a critical landingpad-edge won't be discovered except by</div><div>painful trial-and-error, and that it might be best  to at first disallow it until proven doable</div><div>by someone working in an isolated branch  -- although proving it works may be difficult,</div><div>since so little code actually uses exceptions (only TableGen in llvm ?).</div></span></blockquote></div><br><div>Peter,</div><div><br></div><div>I think this will be done lazily to avoid excessive splitting as in:</div><div><br></div><div>Call1 -> LP</div><div>Call2 -> LP</div><div>Call3 -> LP</div><div><br></div><div>=> split Call1</div><div><br></div><div>Call1 -> LP-split -> LP-remainder</div><div>Call2 -> LP-split-merge -> LP-remainder</div><div>Call3 -> LP-split-merge -> LP-remainder</div><div><br></div><div>But John will know best.</div><div><br></div><div>-Andy</div></body></html>