mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-02 19:24:25 +00:00
New EH representation for MSVC compatibility
Summary: 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. Reviewers: rnk, JosephTremoulet, reames, nlewycky, rjmccall Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D11041 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@241888 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -196,6 +196,11 @@ const char *Instruction::getOpcodeName(unsigned OpCode) {
|
||||
case Invoke: return "invoke";
|
||||
case Resume: return "resume";
|
||||
case Unreachable: return "unreachable";
|
||||
case CleanupRet: return "cleanupret";
|
||||
case CatchEndBlock: return "catchendblock";
|
||||
case CatchRet: return "catchret";
|
||||
case CatchBlock: return "catchblock";
|
||||
case TerminateBlock: return "terminateblock";
|
||||
|
||||
// Standard binary operators...
|
||||
case Add: return "add";
|
||||
@ -256,6 +261,7 @@ const char *Instruction::getOpcodeName(unsigned OpCode) {
|
||||
case ExtractValue: return "extractvalue";
|
||||
case InsertValue: return "insertvalue";
|
||||
case LandingPad: return "landingpad";
|
||||
case CleanupBlock: return "cleanupblock";
|
||||
|
||||
default: return "<Invalid operator> ";
|
||||
}
|
||||
@ -407,6 +413,8 @@ bool Instruction::mayReadFromMemory() const {
|
||||
case Instruction::Fence: // FIXME: refine definition of mayReadFromMemory
|
||||
case Instruction::AtomicCmpXchg:
|
||||
case Instruction::AtomicRMW:
|
||||
case Instruction::CatchRet:
|
||||
case Instruction::TerminateBlock:
|
||||
return true;
|
||||
case Instruction::Call:
|
||||
return !cast<CallInst>(this)->doesNotAccessMemory();
|
||||
@ -427,6 +435,8 @@ bool Instruction::mayWriteToMemory() const {
|
||||
case Instruction::VAArg:
|
||||
case Instruction::AtomicCmpXchg:
|
||||
case Instruction::AtomicRMW:
|
||||
case Instruction::CatchRet:
|
||||
case Instruction::TerminateBlock:
|
||||
return true;
|
||||
case Instruction::Call:
|
||||
return !cast<CallInst>(this)->onlyReadsMemory();
|
||||
@ -455,6 +465,10 @@ bool Instruction::isAtomic() const {
|
||||
bool Instruction::mayThrow() const {
|
||||
if (const CallInst *CI = dyn_cast<CallInst>(this))
|
||||
return !CI->doesNotThrow();
|
||||
if (const auto *CRI = dyn_cast<CleanupReturnInst>(this))
|
||||
return CRI->unwindsToCaller();
|
||||
if (const auto *CEBI = dyn_cast<CatchEndBlockInst>(this))
|
||||
return CEBI->unwindsToCaller();
|
||||
return isa<ResumeInst>(this);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user