This adds delegate instruction and use it to fix unwind destination
mismatches created by marker placement in CFGStackify.
There are two kinds of unwind destination mismatches:
- Mismatches caused by throwing instructions (here we call it "call unwind mismatches", even though throw and rethrow can also cause mismatches)
- Mismatches caused by catches, in case a foreign exception is not caught by the nearest catch and the next outer catch is not the catch it should unwind to. This kind of mismatches didn't exist in the previous version of the spec, because in the previous spec catch was effectively catch_all, catching all exceptions.
This implements routines to fix the first kind of unwind mismatches,
which we call "call unwind mismatches". The second mismatch (catch
unwind mismatches) will be fixed in a later CL.
This also reenables all previously disabled tests in cfg-stackify-eh.ll
and updates FileCheck lines to match the new spec. Two tests were
deleted because they specifically tested the way we fixed unwind
mismatches before using exnrefs and branches, which we don't do
anymore.
Is this to ensure that the arguments to the call are inside the try so that the try itself does not need to take any stack arguments?