From 72af6b8e5d7548a4a6805b156169d240cef7d0db Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 18 Aug 2003 16:06:09 +0000 Subject: [PATCH] Add support for the sig(set|long)jmp intrinsics git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@7951 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/CBackend/CBackend.cpp | 5 ++++- lib/Target/CBackend/Writer.cpp | 5 ++++- lib/Target/SparcV9/SparcV9InstrSelection.cpp | 2 ++ lib/Target/X86/InstSelectSimple.cpp | 2 ++ lib/Target/X86/X86ISelSimple.cpp | 2 ++ 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index 0443c184757..4bc354bdee1 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -1139,6 +1139,7 @@ void CWriter::visitCallInst(CallInst &I) { return; case LLVMIntrinsic::setjmp: + case LLVMIntrinsic::sigsetjmp: // This instrinsic should never exist in the program, but until we get // setjmp/longjmp transformations going on, we should codegen it to // something reasonable. This will allow code that never calls longjmp @@ -1146,7 +1147,9 @@ void CWriter::visitCallInst(CallInst &I) { Out << "0"; return; case LLVMIntrinsic::longjmp: - // Treat longjmp the same as setjmp + case LLVMIntrinsic::siglongjmp: + // Longjmp is not implemented, and never will be. It would cause an + // exception throw. Out << "abort()"; return; } diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index 0443c184757..4bc354bdee1 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -1139,6 +1139,7 @@ void CWriter::visitCallInst(CallInst &I) { return; case LLVMIntrinsic::setjmp: + case LLVMIntrinsic::sigsetjmp: // This instrinsic should never exist in the program, but until we get // setjmp/longjmp transformations going on, we should codegen it to // something reasonable. This will allow code that never calls longjmp @@ -1146,7 +1147,9 @@ void CWriter::visitCallInst(CallInst &I) { Out << "0"; return; case LLVMIntrinsic::longjmp: - // Treat longjmp the same as setjmp + case LLVMIntrinsic::siglongjmp: + // Longjmp is not implemented, and never will be. It would cause an + // exception throw. Out << "abort()"; return; } diff --git a/lib/Target/SparcV9/SparcV9InstrSelection.cpp b/lib/Target/SparcV9/SparcV9InstrSelection.cpp index 970c5fdcf0a..ee243334951 100644 --- a/lib/Target/SparcV9/SparcV9InstrSelection.cpp +++ b/lib/Target/SparcV9/SparcV9InstrSelection.cpp @@ -1433,6 +1433,7 @@ bool CodeGenIntrinsic(LLVMIntrinsic::ID iid, CallInst &callInstr, addReg(callInstr.getOperand(1))); return true; + case LLVMIntrinsic::sigsetjmp: case LLVMIntrinsic::setjmp: { // act as if we return 0 unsigned g0 = target.getRegInfo().getZeroRegNum(); @@ -1441,6 +1442,7 @@ bool CodeGenIntrinsic(LLVMIntrinsic::ID iid, CallInst &callInstr, return true; } + case LLVMIntrinsic::siglongjmp: case LLVMIntrinsic::longjmp: { // call abort() Module* M = callInstr.getParent()->getParent()->getParent(); diff --git a/lib/Target/X86/InstSelectSimple.cpp b/lib/Target/X86/InstSelectSimple.cpp index 2cc4e8367df..26e908ff043 100644 --- a/lib/Target/X86/InstSelectSimple.cpp +++ b/lib/Target/X86/InstSelectSimple.cpp @@ -978,10 +978,12 @@ void ISel::visitIntrinsicCall(LLVMIntrinsic::ID ID, CallInst &CI) { return; case LLVMIntrinsic::longjmp: + case LLVMIntrinsic::siglongjmp: BuildMI(X86::CALLpcrel32, 1).addExternalSymbol("abort", true); return; case LLVMIntrinsic::setjmp: + case LLVMIntrinsic::sigsetjmp: // Setjmp always returns zero... BuildMI(BB, X86::MOVir32, 1, getReg(CI)).addZImm(0); return; diff --git a/lib/Target/X86/X86ISelSimple.cpp b/lib/Target/X86/X86ISelSimple.cpp index 2cc4e8367df..26e908ff043 100644 --- a/lib/Target/X86/X86ISelSimple.cpp +++ b/lib/Target/X86/X86ISelSimple.cpp @@ -978,10 +978,12 @@ void ISel::visitIntrinsicCall(LLVMIntrinsic::ID ID, CallInst &CI) { return; case LLVMIntrinsic::longjmp: + case LLVMIntrinsic::siglongjmp: BuildMI(X86::CALLpcrel32, 1).addExternalSymbol("abort", true); return; case LLVMIntrinsic::setjmp: + case LLVMIntrinsic::sigsetjmp: // Setjmp always returns zero... BuildMI(BB, X86::MOVir32, 1, getReg(CI)).addZImm(0); return;