mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 20:23:11 +01:00
32b4746b64
Summary: Fix the CLR state numbering to generate correct tables, and update the lit test to verify them. The CLR numbering assigns one state number to each catchpad and cleanuppad. It also computes two tree-like relations over states: 1) Each state has a "HandlerParentState", which is the state of the next outer handler enclosing this state's handler (same as nearest ancestor per the ParentPad linkage on EH pads, but skipping over catchswitches). 2) Each state has a "TryParentState", which: a) for a catchpad that's not the last handler on its catchswitch, is the state of the next catchpad on that catchswitch. b) for all other pads, is the state of the pad whose try region is the next outer try region enclosing this state's try region. The "try regions are not present as such in the IR, but will be inferred based on the placement of invokes and pads which reach each other by exceptional exits. Catchswitches do not get their own states, but each gets mapped to the state of its first catchpad. Table generation requires each state's "unwind dest" state to have a lower state number than the given state. Since HandlerParentState can be computed as a function of a pad's ParentPad, and TryParentState can be computed as a function of its unwind dest and the TryParentStates of its children, the CLR state numbering algorithm first computes HandlerParentState in a top-down pass, then computes TryParentState in a bottom-up pass. Also reword some comments/names in the CLR EH table generation to make the distinction between the different kinds of "parent" clear. Reviewers: rnk, andrew.w.kaylor, majnemer Subscribers: AndyAyers, llvm-commits Differential Revision: http://reviews.llvm.org/D15325 llvm-svn: 256760 |
||
---|---|---|
.. | ||
AddressPool.cpp | ||
AddressPool.h | ||
ARMException.cpp | ||
AsmPrinter.cpp | ||
AsmPrinterDwarf.cpp | ||
AsmPrinterHandler.h | ||
AsmPrinterInlineAsm.cpp | ||
ByteStreamer.h | ||
CMakeLists.txt | ||
DbgValueHistoryCalculator.cpp | ||
DbgValueHistoryCalculator.h | ||
DebugLocEntry.h | ||
DebugLocStream.cpp | ||
DebugLocStream.h | ||
DIE.cpp | ||
DIEHash.cpp | ||
DIEHash.h | ||
DwarfAccelTable.cpp | ||
DwarfAccelTable.h | ||
DwarfCFIException.cpp | ||
DwarfCompileUnit.cpp | ||
DwarfCompileUnit.h | ||
DwarfDebug.cpp | ||
DwarfDebug.h | ||
DwarfException.h | ||
DwarfExpression.cpp | ||
DwarfExpression.h | ||
DwarfFile.cpp | ||
DwarfFile.h | ||
DwarfStringPool.cpp | ||
DwarfStringPool.h | ||
DwarfUnit.cpp | ||
DwarfUnit.h | ||
EHStreamer.cpp | ||
EHStreamer.h | ||
ErlangGCPrinter.cpp | ||
LLVMBuild.txt | ||
Makefile | ||
OcamlGCPrinter.cpp | ||
WinCodeViewLineTables.cpp | ||
WinCodeViewLineTables.h | ||
WinException.cpp | ||
WinException.h |