mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-12-19 11:23:32 +00:00
Re-land r235154-r235156 under the existing -sehprepare flag
Keep the old SEH fan-in lowering on by default for now, since projects rely on it. This will make it easy to test this change with a simple flag flip. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235399 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -221,6 +221,8 @@ public:
|
||||
int getArgumentFrameIndex(const Argument *A);
|
||||
|
||||
private:
|
||||
void addSEHHandlersForLPads();
|
||||
|
||||
/// LiveOutRegInfo - Information about live out vregs.
|
||||
IndexedMap<LiveOutInfo, VirtReg2IndexFunctor> LiveOutRegInfo;
|
||||
};
|
||||
|
||||
@@ -51,6 +51,7 @@ namespace llvm {
|
||||
// Forward declarations.
|
||||
class Constant;
|
||||
class GlobalVariable;
|
||||
class BlockAddress;
|
||||
class MDNode;
|
||||
class MMIAddrLabelMap;
|
||||
class MachineBasicBlock;
|
||||
@@ -60,6 +61,14 @@ class PointerType;
|
||||
class StructType;
|
||||
struct WinEHFuncInfo;
|
||||
|
||||
struct SEHHandler {
|
||||
// Filter or finally function. Null indicates a catch-all.
|
||||
const Function *FilterOrFinally;
|
||||
|
||||
// Address of block to recover at. Null for a finally handler.
|
||||
const BlockAddress *RecoverBA;
|
||||
};
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
/// LandingPadInfo - This structure is used to retain landing pad info for
|
||||
/// the current function.
|
||||
@@ -69,6 +78,7 @@ struct LandingPadInfo {
|
||||
SmallVector<MCSymbol *, 1> BeginLabels; // Labels prior to invoke.
|
||||
SmallVector<MCSymbol *, 1> EndLabels; // Labels after invoke.
|
||||
SmallVector<MCSymbol *, 1> ClauseLabels; // Labels for each clause.
|
||||
SmallVector<SEHHandler, 1> SEHHandlers; // SEH handlers active at this lpad.
|
||||
MCSymbol *LandingPadLabel; // Label at beginning of landing pad.
|
||||
const Function *Personality; // Personality function.
|
||||
std::vector<int> TypeIds; // List of type ids (filters negative).
|
||||
@@ -356,6 +366,12 @@ public:
|
||||
/// each clause gets its own basic block.
|
||||
MCSymbol *addClauseForLandingPad(MachineBasicBlock *LandingPad);
|
||||
|
||||
void addSEHCatchHandler(MachineBasicBlock *LandingPad, const Function *Filter,
|
||||
const BlockAddress *RecoverLabel);
|
||||
|
||||
void addSEHCleanupHandler(MachineBasicBlock *LandingPad,
|
||||
const Function *Cleanup);
|
||||
|
||||
/// getTypeIDFor - Return the type id for the specified typeinfo. This is
|
||||
/// function wide.
|
||||
unsigned getTypeIDFor(const GlobalValue *TI);
|
||||
|
||||
@@ -260,7 +260,10 @@ private:
|
||||
SDNode *MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTs,
|
||||
ArrayRef<SDValue> Ops, unsigned EmitNodeInfo);
|
||||
|
||||
void PrepareEHLandingPad();
|
||||
/// Prepares the landing pad to take incoming values or do other EH
|
||||
/// personality specific tasks. Returns true if the block should be
|
||||
/// instruction selected, false if no code should be emitted for it.
|
||||
bool PrepareEHLandingPad();
|
||||
|
||||
/// \brief Perform instruction selection on all basic blocks in the function.
|
||||
void SelectAllBasicBlocks(const Function &Fn);
|
||||
|
||||
Reference in New Issue
Block a user