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
This commit is contained in:
Chris Lattner 2003-08-18 16:06:09 +00:00
parent 95881ec1bb
commit 72af6b8e5d
5 changed files with 14 additions and 2 deletions

View File

@ -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;
}

View File

@ -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;
}

View File

@ -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();

View File

@ -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;

View File

@ -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;