forked from OSchip/llvm-project
Delete llvm.{sig,}{setjmp,longjmp} remnant after r136821
Intrinsic has incorrect argument type! i32 (i32*)* @llvm.setjmp *wipes tear*
This commit is contained in:
parent
ecbaf152f8
commit
7a7334663c
|
@ -1539,16 +1539,6 @@ public:
|
|||
/// have to be legal as the hook is used before type legalization.
|
||||
virtual bool isSafeMemOpType(MVT /*VT*/) const { return true; }
|
||||
|
||||
/// Determine if we should use _setjmp or setjmp to implement llvm.setjmp.
|
||||
bool usesUnderscoreSetJmp() const {
|
||||
return UseUnderscoreSetJmp;
|
||||
}
|
||||
|
||||
/// Determine if we should use _longjmp or longjmp to implement llvm.longjmp.
|
||||
bool usesUnderscoreLongJmp() const {
|
||||
return UseUnderscoreLongJmp;
|
||||
}
|
||||
|
||||
/// Return lower limit for number of blocks in a jump table.
|
||||
virtual unsigned getMinimumJumpTableEntries() const;
|
||||
|
||||
|
@ -1949,18 +1939,6 @@ protected:
|
|||
SchedPreferenceInfo = Pref;
|
||||
}
|
||||
|
||||
/// Indicate whether this target prefers to use _setjmp to implement
|
||||
/// llvm.setjmp or the version without _. Defaults to false.
|
||||
void setUseUnderscoreSetJmp(bool Val) {
|
||||
UseUnderscoreSetJmp = Val;
|
||||
}
|
||||
|
||||
/// Indicate whether this target prefers to use _longjmp to implement
|
||||
/// llvm.longjmp or the version without _. Defaults to false.
|
||||
void setUseUnderscoreLongJmp(bool Val) {
|
||||
UseUnderscoreLongJmp = Val;
|
||||
}
|
||||
|
||||
/// Indicate the minimum number of blocks to generate jump tables.
|
||||
void setMinimumJumpTableEntries(unsigned Val);
|
||||
|
||||
|
@ -2697,16 +2675,6 @@ private:
|
|||
/// predication.
|
||||
bool JumpIsExpensive;
|
||||
|
||||
/// This target prefers to use _setjmp to implement llvm.setjmp.
|
||||
///
|
||||
/// Defaults to false.
|
||||
bool UseUnderscoreSetJmp;
|
||||
|
||||
/// This target prefers to use _longjmp to implement llvm.longjmp.
|
||||
///
|
||||
/// Defaults to false.
|
||||
bool UseUnderscoreLongJmp;
|
||||
|
||||
/// Information about the contents of the high-bits in boolean values held in
|
||||
/// a type wider than i1. See getBooleanContents.
|
||||
BooleanContent BooleanContents;
|
||||
|
|
|
@ -254,34 +254,6 @@ void IntrinsicLowering::LowerIntrinsicCall(CallInst *CI) {
|
|||
break;
|
||||
}
|
||||
|
||||
// The setjmp/longjmp intrinsics should only exist in the code if it was
|
||||
// never optimized (ie, right out of the CFE), or if it has been hacked on
|
||||
// by the lowerinvoke pass. In both cases, the right thing to do is to
|
||||
// convert the call to an explicit setjmp or longjmp call.
|
||||
case Intrinsic::setjmp: {
|
||||
Value *V = ReplaceCallWith("setjmp", CI, CS.arg_begin(), CS.arg_end(),
|
||||
Type::getInt32Ty(Context));
|
||||
if (!CI->getType()->isVoidTy())
|
||||
CI->replaceAllUsesWith(V);
|
||||
break;
|
||||
}
|
||||
case Intrinsic::sigsetjmp:
|
||||
if (!CI->getType()->isVoidTy())
|
||||
CI->replaceAllUsesWith(Constant::getNullValue(CI->getType()));
|
||||
break;
|
||||
|
||||
case Intrinsic::longjmp: {
|
||||
ReplaceCallWith("longjmp", CI, CS.arg_begin(), CS.arg_end(),
|
||||
Type::getVoidTy(Context));
|
||||
break;
|
||||
}
|
||||
|
||||
case Intrinsic::siglongjmp: {
|
||||
// Insert the call to abort
|
||||
ReplaceCallWith("abort", CI, CS.arg_end(), CS.arg_end(),
|
||||
Type::getVoidTy(Context));
|
||||
break;
|
||||
}
|
||||
case Intrinsic::ctpop:
|
||||
CI->replaceAllUsesWith(LowerCTPOP(Context, CI->getArgOperand(0), CI));
|
||||
break;
|
||||
|
|
|
@ -5774,12 +5774,6 @@ void SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I,
|
|||
RegName, getValue(RegValue)));
|
||||
return;
|
||||
}
|
||||
case Intrinsic::setjmp:
|
||||
lowerCallToExternalSymbol(I, &"_setjmp"[!TLI.usesUnderscoreSetJmp()]);
|
||||
return;
|
||||
case Intrinsic::longjmp:
|
||||
lowerCallToExternalSymbol(I, &"_longjmp"[!TLI.usesUnderscoreLongJmp()]);
|
||||
return;
|
||||
case Intrinsic::memcpy: {
|
||||
const auto &MCI = cast<MemCpyInst>(I);
|
||||
SDValue Op1 = getValue(I.getArgOperand(0));
|
||||
|
|
|
@ -580,8 +580,6 @@ TargetLoweringBase::TargetLoweringBase(const TargetMachine &tm) : TM(tm) {
|
|||
MaxGluedStoresPerMemcpy = 0;
|
||||
MaxStoresPerMemsetOptSize = MaxStoresPerMemcpyOptSize =
|
||||
MaxStoresPerMemmoveOptSize = MaxLoadsPerMemcmpOptSize = 4;
|
||||
UseUnderscoreSetJmp = false;
|
||||
UseUnderscoreLongJmp = false;
|
||||
HasMultipleConditionRegisters = false;
|
||||
HasExtractBitsInsn = false;
|
||||
JumpIsExpensive = JumpIsExpensiveOverride;
|
||||
|
|
|
@ -137,10 +137,6 @@ extern cl::opt<bool> ANDIGlueBug;
|
|||
PPCTargetLowering::PPCTargetLowering(const PPCTargetMachine &TM,
|
||||
const PPCSubtarget &STI)
|
||||
: TargetLowering(TM), Subtarget(STI) {
|
||||
// Use _setjmp/_longjmp instead of setjmp/longjmp.
|
||||
setUseUnderscoreSetJmp(true);
|
||||
setUseUnderscoreLongJmp(true);
|
||||
|
||||
// On PPC32/64, arguments smaller than 4/8 bytes are extended, so all
|
||||
// arguments are at least 4/8 bytes aligned.
|
||||
bool isPPC64 = Subtarget.isPPC64();
|
||||
|
|
|
@ -283,24 +283,6 @@ bool PPCTTIImpl::mightUseCTR(BasicBlock *BB,
|
|||
case Intrinsic::loop_decrement:
|
||||
return true;
|
||||
|
||||
// VisualStudio defines setjmp as _setjmp
|
||||
#if defined(_MSC_VER) && defined(setjmp) && \
|
||||
!defined(setjmp_undefined_for_msvc)
|
||||
# pragma push_macro("setjmp")
|
||||
# undef setjmp
|
||||
# define setjmp_undefined_for_msvc
|
||||
#endif
|
||||
|
||||
case Intrinsic::setjmp:
|
||||
|
||||
#if defined(_MSC_VER) && defined(setjmp_undefined_for_msvc)
|
||||
// let's return it to _setjmp state
|
||||
# pragma pop_macro("setjmp")
|
||||
# undef setjmp_undefined_for_msvc
|
||||
#endif
|
||||
|
||||
case Intrinsic::longjmp:
|
||||
|
||||
// Exclude eh_sjlj_setjmp; we don't need to exclude eh_sjlj_longjmp
|
||||
// because, although it does clobber the counter register, the
|
||||
// control can't then return to inside the loop unless there is also
|
||||
|
|
|
@ -162,19 +162,6 @@ X86TargetLowering::X86TargetLowering(const X86TargetMachine &TM,
|
|||
setLibcallName(RTLIB::POWI_F64, nullptr);
|
||||
}
|
||||
|
||||
if (Subtarget.isTargetDarwin()) {
|
||||
// Darwin should use _setjmp/_longjmp instead of setjmp/longjmp.
|
||||
setUseUnderscoreSetJmp(false);
|
||||
setUseUnderscoreLongJmp(false);
|
||||
} else if (Subtarget.isTargetWindowsGNU()) {
|
||||
// MS runtime is weird: it exports _setjmp, but longjmp!
|
||||
setUseUnderscoreSetJmp(true);
|
||||
setUseUnderscoreLongJmp(false);
|
||||
} else {
|
||||
setUseUnderscoreSetJmp(true);
|
||||
setUseUnderscoreLongJmp(true);
|
||||
}
|
||||
|
||||
// If we don't have cmpxchg8b(meaing this is a 386/486), limit atomic size to
|
||||
// 32 bits so the AtomicExpandPass will expand it so we don't need cmpxchg8b.
|
||||
// FIXME: Should we be limitting the atomic size on other configs? Default is
|
||||
|
|
|
@ -3951,7 +3951,7 @@ Instruction *InstCombiner::visitCallInst(CallInst &CI) {
|
|||
return eraseInstFromFunction(CI);
|
||||
|
||||
// Bail if we cross over an intrinsic with side effects, such as
|
||||
// llvm.stacksave, llvm.read_register, or llvm.setjmp.
|
||||
// llvm.stacksave, or llvm.read_register.
|
||||
if (II2->mayHaveSideEffects()) {
|
||||
CannotRemove = true;
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue