Hi, I am currently looking at unwinding support for inline assembly, which might be useful for a coroutine library I am working on. The idea is that inline assembly may emit a call to a function which might throw/unwind. The current approach for that would be to emit an `invoke` instruction: ``` invoke void asm "call thrower", "~{dirflag},~{fpsr},~{flags}"() to label %exit unwind label %uexit ``` However, Codegen doesn't currently emit proper EH Begin/End labels for this to work (because unwinding requires exception tables). I have experimented with adding the required EH labels to SelectionDAGBuilder, which now emits working code which allows unwinding from inline assembly code. I was wondering whether there would be support for a patchset (which implements this). I am not quite sure, whether there are sideeffects/invariants I am missing (except for a few places where its assumed that inline asm doesn't throw; like in the Inliner and InstCombineCall pass) or if there is a reason why this isn't possible right now. Furthermore, there might be a need to signify that an inline assembly "invoke" might throw. Right now I've implemented this as a change to the invoke syntax (the unwind keyword after asm): ``` invoke void asm sideeffect unwind "call thrower", "~{dirflag},~{fpsr},~{flags}"() to label %exit unwind label %uexit ``` Some feedback on this topic and general direction to this approach would be appreciated! Regards, Paul -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210127/4a53a114/attachment-0001.html>