diff options
author | David Majnemer <david.majnemer@gmail.com> | 2015-07-31 17:58:14 +0000 |
---|---|---|
committer | David Majnemer <david.majnemer@gmail.com> | 2015-07-31 17:58:14 +0000 |
commit | 654e130b6ec76c1a2910b2594cb403ecd2773af8 (patch) | |
tree | 79a53c08a138345e3cdd13b36940d3d1cf6f5917 /llvm/lib/CodeGen | |
parent | e430654fd85a04f04c93eab40ba7fe87d8657130 (diff) | |
download | bcm5719-llvm-654e130b6ec76c1a2910b2594cb403ecd2773af8.tar.gz bcm5719-llvm-654e130b6ec76c1a2910b2594cb403ecd2773af8.zip |
New EH representation for MSVC compatibility
This introduces new instructions neccessary to implement MSVC-compatible
exception handling support. Most of the middle-end and none of the
back-end haven't been audited or updated to take them into account.
Differential Revision: http://reviews.llvm.org/D11097
llvm-svn: 243766
Diffstat (limited to 'llvm/lib/CodeGen')
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp | 24 | ||||
-rw-r--r-- | llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h | 6 | ||||
-rw-r--r-- | llvm/lib/CodeGen/TargetLoweringBase.cpp | 6 |
3 files changed, 36 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp index 22e1be94ef0..f15c95f4d5e 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp @@ -1158,6 +1158,30 @@ SDValue SelectionDAGBuilder::getValueImpl(const Value *V) { llvm_unreachable("Can't get register for value!"); } +void SelectionDAGBuilder::visitCleanupRet(const CleanupReturnInst &I) { + report_fatal_error("visitCleanupRet not yet implemented!"); +} + +void SelectionDAGBuilder::visitCatchEndPad(const CatchEndPadInst &I) { + report_fatal_error("visitCatchEndPad not yet implemented!"); +} + +void SelectionDAGBuilder::visitCatchRet(const CatchReturnInst &I) { + report_fatal_error("visitCatchRet not yet implemented!"); +} + +void SelectionDAGBuilder::visitCatchPad(const CatchPadInst &I) { + report_fatal_error("visitCatchPad not yet implemented!"); +} + +void SelectionDAGBuilder::visitTerminatePad(const TerminatePadInst &TPI) { + report_fatal_error("visitTerminatePad not yet implemented!"); +} + +void SelectionDAGBuilder::visitCleanupPad(const CleanupPadInst &CPI) { + report_fatal_error("visitCleanupPad not yet implemented!"); +} + void SelectionDAGBuilder::visitRet(const ReturnInst &I) { const TargetLowering &TLI = DAG.getTargetLoweringInfo(); auto &DL = DAG.getDataLayout(); diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h index 1b8cd5bb585..f71190d6375 100644 --- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h +++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.h @@ -735,6 +735,12 @@ private: void visitSwitch(const SwitchInst &I); void visitIndirectBr(const IndirectBrInst &I); void visitUnreachable(const UnreachableInst &I); + void visitCleanupRet(const CleanupReturnInst &I); + void visitCatchEndPad(const CatchEndPadInst &I); + void visitCatchRet(const CatchReturnInst &I); + void visitCatchPad(const CatchPadInst &I); + void visitTerminatePad(const TerminatePadInst &TPI); + void visitCleanupPad(const CleanupPadInst &CPI); uint32_t getEdgeWeight(const MachineBasicBlock *Src, const MachineBasicBlock *Dst) const; diff --git a/llvm/lib/CodeGen/TargetLoweringBase.cpp b/llvm/lib/CodeGen/TargetLoweringBase.cpp index ee50ddd9fa0..0e10b2f2e11 100644 --- a/llvm/lib/CodeGen/TargetLoweringBase.cpp +++ b/llvm/lib/CodeGen/TargetLoweringBase.cpp @@ -1571,6 +1571,12 @@ int TargetLoweringBase::InstructionOpcodeToISD(unsigned Opcode) const { case Invoke: return 0; case Resume: return 0; case Unreachable: return 0; + case CleanupRet: return 0; + case CatchEndPad: return 0; + case CatchRet: return 0; + case CatchPad: return 0; + case TerminatePad: return 0; + case CleanupPad: return 0; case Add: return ISD::ADD; case FAdd: return ISD::FADD; case Sub: return ISD::SUB; |