I've been looking into using SSA with basic block arguments for an IR. However, I have not found a good explanation of how exceptions should be modeled. This is complicated further because for runtimes like .NET or Java, at least in theory, almost any instruction could throw an exception. Additionally, is it possible to lower finally blocks to SSA without duplicating the finally block for success and failure cases?
Is this the right use case for this representation? Or would it be better to only use SSA when targeting native code.