mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
Adding implementation to outline C++ catch handlers for native Windows 64 exception handling.
Differential Revision: http://reviews.llvm.org/D7363 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229715 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -135,6 +135,41 @@ void CloneFunctionInto(Function *NewFunc, const Function *OldFunc,
|
||||
ValueMapTypeRemapper *TypeMapper = nullptr,
|
||||
ValueMaterializer *Materializer = nullptr);
|
||||
|
||||
/// A helper class used with CloneAndPruneIntoFromInst to change the default
|
||||
/// behavior while instructions are being cloned.
|
||||
class CloningDirector {
|
||||
public:
|
||||
/// This enumeration describes the way CloneAndPruneIntoFromInst should
|
||||
/// proceed after the CloningDirector has examined an instruction.
|
||||
enum CloningAction {
|
||||
///< Continue cloning the instruction (default behavior).
|
||||
CloneInstruction,
|
||||
///< Skip this instruction but continue cloning the current basic block.
|
||||
SkipInstruction,
|
||||
///< Skip this instruction and stop cloning the current basic block.
|
||||
StopCloningBB
|
||||
};
|
||||
|
||||
CloningDirector() {}
|
||||
virtual ~CloningDirector() {}
|
||||
|
||||
/// Subclasses must override this function to customize cloning behavior.
|
||||
virtual CloningAction handleInstruction(ValueToValueMapTy &VMap,
|
||||
const Instruction *Inst,
|
||||
BasicBlock *NewBB) = 0;
|
||||
};
|
||||
|
||||
void CloneAndPruneIntoFromInst(Function *NewFunc, const Function *OldFunc,
|
||||
const Instruction *StartingInst,
|
||||
ValueToValueMapTy &VMap,
|
||||
bool ModuleLevelChanges,
|
||||
SmallVectorImpl<ReturnInst*> &Returns,
|
||||
const char *NameSuffix = "",
|
||||
ClonedCodeInfo *CodeInfo = nullptr,
|
||||
const DataLayout *DL = nullptr,
|
||||
CloningDirector *Director = nullptr);
|
||||
|
||||
|
||||
/// CloneAndPruneFunctionInto - This works exactly like CloneFunctionInto,
|
||||
/// except that it does some simple constant prop and DCE on the fly. The
|
||||
/// effect of this is to copy significantly less code in cases where (for
|
||||
|
Reference in New Issue
Block a user