<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><br><div><div>On Oct 18, 2011, at 5:22 PM, Chandler Carruth wrote:</div><div><br></div><blockquote type="cite"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; position: static; z-index: auto; "><div style="word-wrap:break-word"><div><div>Treat glued-together blocks as super-blocks, and everything should be as breezy as IR.</div></div></div></blockquote><div><br></div><div>But that's just the thing -- a primary goal of this pass would be to *change* the fall-through pattern.</div></div></blockquote><div><br></div><div>That's not a problem. I wasn't talking about normal fall-through blocks. You simply call MBB->updateTerminator() for those.</div><div><br></div><div><blockquote type="cite">Also, it's still not clear to me how to analyze switches in CodeGen, but that's likely my lack of having read the appropriate interfaces thoroughly.</blockquote><br></div><div>Switches aren't real, so they don't exist in CodeGen.</div><div><br></div><div>Parts of switches can be lowered to jump tables and indirect branches.</div><div><br></div><div>An indirect branch will cause AnalyzeBranch() to fail, but canFallThrough() will still return false, and it is safe to move the successors around. This also works for computed goto.</div><div><br></div><div>/jakob</div><div><br></div></div></body></html>