mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:49:45 +00:00
Revert "Turn some C-style vararg into variadic templates"
This reverts commit r299925 because it broke the buildbots. See e.g. http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15/builds/6008 llvm-svn: 299928
This commit is contained in:
parent
947a775c79
commit
14168afb62
@ -321,22 +321,12 @@ public:
|
||||
/// or a ConstantExpr BitCast of that type if the named function has a
|
||||
/// different type. This version of the method takes a null terminated list of
|
||||
/// function arguments, which makes it easier for clients to use.
|
||||
template<typename... ArgsTy>
|
||||
Constant *getOrInsertFunction(StringRef Name,
|
||||
AttributeList AttributeList,
|
||||
Type *RetTy, ArgsTy... Args)
|
||||
{
|
||||
SmallVector<Type*, sizeof...(ArgsTy)> ArgTys{Args...};
|
||||
return getOrInsertFunction(Name,
|
||||
FunctionType::get(RetTy, ArgTys, false),
|
||||
AttributeList);
|
||||
}
|
||||
Constant *getOrInsertFunction(StringRef Name, AttributeList AttributeList,
|
||||
Type *RetTy, ...) LLVM_END_WITH_NULL;
|
||||
|
||||
/// Same as above, but without the attributes.
|
||||
template<typename... ArgsTy>
|
||||
Constant *getOrInsertFunction(StringRef Name, Type *RetTy, ArgsTy... Args) {
|
||||
return getOrInsertFunction(Name, AttributeList{}, RetTy, Args...);
|
||||
}
|
||||
Constant *getOrInsertFunction(StringRef Name, Type *RetTy, ...)
|
||||
LLVM_END_WITH_NULL;
|
||||
|
||||
/// Look up the specified function in the module symbol table. If it does not
|
||||
/// exist, return null.
|
||||
|
@ -41,7 +41,7 @@ namespace {
|
||||
Type *VoidTy = Type::getVoidTy(F.getContext());
|
||||
Constant *CountingFn =
|
||||
F.getParent()->getOrInsertFunction(CountingFunctionName,
|
||||
VoidTy);
|
||||
VoidTy, nullptr);
|
||||
CallInst::Create(CountingFn, "", &*F.begin()->getFirstInsertionPt());
|
||||
return true;
|
||||
}
|
||||
|
@ -115,21 +115,21 @@ void IntrinsicLowering::AddPrototypes(Module &M) {
|
||||
Type::getInt8PtrTy(Context),
|
||||
Type::getInt8PtrTy(Context),
|
||||
Type::getInt8PtrTy(Context),
|
||||
DL.getIntPtrType(Context));
|
||||
DL.getIntPtrType(Context), nullptr);
|
||||
break;
|
||||
case Intrinsic::memmove:
|
||||
M.getOrInsertFunction("memmove",
|
||||
Type::getInt8PtrTy(Context),
|
||||
Type::getInt8PtrTy(Context),
|
||||
Type::getInt8PtrTy(Context),
|
||||
DL.getIntPtrType(Context));
|
||||
DL.getIntPtrType(Context), nullptr);
|
||||
break;
|
||||
case Intrinsic::memset:
|
||||
M.getOrInsertFunction("memset",
|
||||
Type::getInt8PtrTy(Context),
|
||||
Type::getInt8PtrTy(Context),
|
||||
Type::getInt32Ty(M.getContext()),
|
||||
DL.getIntPtrType(Context));
|
||||
DL.getIntPtrType(Context), nullptr);
|
||||
break;
|
||||
case Intrinsic::sqrt:
|
||||
EnsureFPIntrinsicsExist(M, F, "sqrtf", "sqrt", "sqrtl");
|
||||
|
@ -1098,7 +1098,7 @@ MachineOutliner::createOutlinedFunction(Module &M, const OutlinedFunction &OF,
|
||||
// Create the function using an IR-level function.
|
||||
LLVMContext &C = M.getContext();
|
||||
Function *F = dyn_cast<Function>(
|
||||
M.getOrInsertFunction(NameStream.str(), Type::getVoidTy(C)));
|
||||
M.getOrInsertFunction(NameStream.str(), Type::getVoidTy(C), nullptr));
|
||||
assert(F && "Function was null!");
|
||||
|
||||
// NOTE: If this is linkonceodr, then we can take advantage of linker deduping
|
||||
|
@ -451,7 +451,7 @@ void SafeStack::checkStackGuard(IRBuilder<> &IRB, Function &F, ReturnInst &RI,
|
||||
IRBuilder<> IRBFail(CheckTerm);
|
||||
// FIXME: respect -fsanitize-trap / -ftrap-function here?
|
||||
Constant *StackChkFail = F.getParent()->getOrInsertFunction(
|
||||
"__stack_chk_fail", IRB.getVoidTy());
|
||||
"__stack_chk_fail", IRB.getVoidTy(), nullptr);
|
||||
IRBFail.CreateCall(StackChkFail, {});
|
||||
}
|
||||
|
||||
|
@ -482,10 +482,10 @@ bool SjLjEHPrepare::runOnFunction(Function &F) {
|
||||
Module &M = *F.getParent();
|
||||
RegisterFn = M.getOrInsertFunction(
|
||||
"_Unwind_SjLj_Register", Type::getVoidTy(M.getContext()),
|
||||
PointerType::getUnqual(FunctionContextTy));
|
||||
PointerType::getUnqual(FunctionContextTy), nullptr);
|
||||
UnregisterFn = M.getOrInsertFunction(
|
||||
"_Unwind_SjLj_Unregister", Type::getVoidTy(M.getContext()),
|
||||
PointerType::getUnqual(FunctionContextTy));
|
||||
PointerType::getUnqual(FunctionContextTy), nullptr);
|
||||
FrameAddrFn = Intrinsic::getDeclaration(&M, Intrinsic::frameaddress);
|
||||
StackAddrFn = Intrinsic::getDeclaration(&M, Intrinsic::stacksave);
|
||||
StackRestoreFn = Intrinsic::getDeclaration(&M, Intrinsic::stackrestore);
|
||||
|
@ -484,13 +484,13 @@ BasicBlock *StackProtector::CreateFailBB() {
|
||||
Constant *StackChkFail =
|
||||
M->getOrInsertFunction("__stack_smash_handler",
|
||||
Type::getVoidTy(Context),
|
||||
Type::getInt8PtrTy(Context));
|
||||
Type::getInt8PtrTy(Context), nullptr);
|
||||
|
||||
B.CreateCall(StackChkFail, B.CreateGlobalStringPtr(F->getName(), "SSH"));
|
||||
} else {
|
||||
Constant *StackChkFail =
|
||||
M->getOrInsertFunction("__stack_chk_fail", Type::getVoidTy(Context));
|
||||
|
||||
M->getOrInsertFunction("__stack_chk_fail", Type::getVoidTy(Context),
|
||||
nullptr);
|
||||
B.CreateCall(StackChkFail, {});
|
||||
}
|
||||
B.CreateUnreachable();
|
||||
|
@ -1818,7 +1818,7 @@ Value *TargetLoweringBase::getSafeStackPointerLocation(IRBuilder<> &IRB) const {
|
||||
Module *M = IRB.GetInsertBlock()->getParent()->getParent();
|
||||
Type *StackPtrTy = Type::getInt8PtrTy(M->getContext());
|
||||
Value *Fn = M->getOrInsertFunction("__safestack_pointer_address",
|
||||
StackPtrTy->getPointerTo(0));
|
||||
StackPtrTy->getPointerTo(0), nullptr);
|
||||
return IRB.CreateCall(Fn);
|
||||
}
|
||||
|
||||
|
@ -466,7 +466,7 @@ static Instruction *createMalloc(Instruction *InsertBefore,
|
||||
Value *MallocFunc = MallocF;
|
||||
if (!MallocFunc)
|
||||
// prototype malloc as "void *malloc(size_t)"
|
||||
MallocFunc = M->getOrInsertFunction("malloc", BPTy, IntPtrTy);
|
||||
MallocFunc = M->getOrInsertFunction("malloc", BPTy, IntPtrTy, nullptr);
|
||||
PointerType *AllocPtrType = PointerType::getUnqual(AllocTy);
|
||||
CallInst *MCall = nullptr;
|
||||
Instruction *Result = nullptr;
|
||||
@ -560,7 +560,7 @@ static Instruction *createFree(Value *Source,
|
||||
Type *VoidTy = Type::getVoidTy(M->getContext());
|
||||
Type *IntPtrTy = Type::getInt8PtrTy(M->getContext());
|
||||
// prototype free as "void free(void*)"
|
||||
Value *FreeFunc = M->getOrInsertFunction("free", VoidTy, IntPtrTy);
|
||||
Value *FreeFunc = M->getOrInsertFunction("free", VoidTy, IntPtrTy, nullptr);
|
||||
CallInst *Result = nullptr;
|
||||
Value *PtrCast = Source;
|
||||
if (InsertBefore) {
|
||||
|
@ -147,6 +147,47 @@ Constant *Module::getOrInsertFunction(StringRef Name,
|
||||
return getOrInsertFunction(Name, Ty, AttributeList());
|
||||
}
|
||||
|
||||
// getOrInsertFunction - Look up the specified function in the module symbol
|
||||
// table. If it does not exist, add a prototype for the function and return it.
|
||||
// This version of the method takes a null terminated list of function
|
||||
// arguments, which makes it easier for clients to use.
|
||||
//
|
||||
Constant *Module::getOrInsertFunction(StringRef Name,
|
||||
AttributeList AttributeList, Type *RetTy,
|
||||
...) {
|
||||
va_list Args;
|
||||
va_start(Args, RetTy);
|
||||
|
||||
// Build the list of argument types...
|
||||
std::vector<Type*> ArgTys;
|
||||
while (Type *ArgTy = va_arg(Args, Type*))
|
||||
ArgTys.push_back(ArgTy);
|
||||
|
||||
va_end(Args);
|
||||
|
||||
// Build the function type and chain to the other getOrInsertFunction...
|
||||
return getOrInsertFunction(Name,
|
||||
FunctionType::get(RetTy, ArgTys, false),
|
||||
AttributeList);
|
||||
}
|
||||
|
||||
Constant *Module::getOrInsertFunction(StringRef Name,
|
||||
Type *RetTy, ...) {
|
||||
va_list Args;
|
||||
va_start(Args, RetTy);
|
||||
|
||||
// Build the list of argument types...
|
||||
std::vector<Type*> ArgTys;
|
||||
while (Type *ArgTy = va_arg(Args, Type*))
|
||||
ArgTys.push_back(ArgTy);
|
||||
|
||||
va_end(Args);
|
||||
|
||||
// Build the function type and chain to the other getOrInsertFunction...
|
||||
return getOrInsertFunction(Name, FunctionType::get(RetTy, ArgTys, false),
|
||||
AttributeList());
|
||||
}
|
||||
|
||||
// getFunction - Look up the specified function in the module symbol table.
|
||||
// If it does not exist, return null.
|
||||
//
|
||||
|
@ -2146,7 +2146,8 @@ CleanupAndExit:
|
||||
Type *VoidTy = Type::getVoidTy(Ctx);
|
||||
Module *M = Func->getParent();
|
||||
Constant *CF = M->getOrInsertFunction(HexagonVolatileMemcpyName, VoidTy,
|
||||
Int32PtrTy, Int32PtrTy, Int32Ty);
|
||||
Int32PtrTy, Int32PtrTy, Int32Ty,
|
||||
nullptr);
|
||||
Function *Fn = cast<Function>(CF);
|
||||
Fn->setLinkage(Function::ExternalLinkage);
|
||||
|
||||
|
@ -420,7 +420,7 @@ static bool fixupFPReturnAndCall(Function &F, Module *M,
|
||||
Attribute::ReadNone);
|
||||
A = A.addAttribute(C, AttributeList::FunctionIndex,
|
||||
Attribute::NoInline);
|
||||
Value *F = (M->getOrInsertFunction(Name, A, MyVoid, T));
|
||||
Value *F = (M->getOrInsertFunction(Name, A, MyVoid, T, nullptr));
|
||||
CallInst::Create(F, Params, "", &I);
|
||||
} else if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
|
||||
FunctionType *FT = CI->getFunctionType();
|
||||
|
@ -2101,7 +2101,7 @@ void X86TargetLowering::insertSSPDeclarations(Module &M) const {
|
||||
auto *SecurityCheckCookie = cast<Function>(
|
||||
M.getOrInsertFunction("__security_check_cookie",
|
||||
Type::getVoidTy(M.getContext()),
|
||||
Type::getInt8PtrTy(M.getContext())));
|
||||
Type::getInt8PtrTy(M.getContext()), nullptr));
|
||||
SecurityCheckCookie->setCallingConv(CallingConv::X86_FastCall);
|
||||
SecurityCheckCookie->addAttribute(1, Attribute::AttrKind::InReg);
|
||||
return;
|
||||
|
@ -98,7 +98,7 @@ void CrossDSOCFI::buildCFICheck(Module &M) {
|
||||
LLVMContext &Ctx = M.getContext();
|
||||
Constant *C = M.getOrInsertFunction(
|
||||
"__cfi_check", Type::getVoidTy(Ctx), Type::getInt64Ty(Ctx),
|
||||
Type::getInt8PtrTy(Ctx), Type::getInt8PtrTy(Ctx));
|
||||
Type::getInt8PtrTy(Ctx), Type::getInt8PtrTy(Ctx), nullptr);
|
||||
Function *F = dyn_cast<Function>(C);
|
||||
// Take over the existing function. The frontend emits a weak stub so that the
|
||||
// linker knows about the symbol; this pass replaces the function body.
|
||||
@ -120,7 +120,7 @@ void CrossDSOCFI::buildCFICheck(Module &M) {
|
||||
IRBuilder<> IRBFail(TrapBB);
|
||||
Constant *CFICheckFailFn = M.getOrInsertFunction(
|
||||
"__cfi_check_fail", Type::getVoidTy(Ctx), Type::getInt8PtrTy(Ctx),
|
||||
Type::getInt8PtrTy(Ctx));
|
||||
Type::getInt8PtrTy(Ctx), nullptr);
|
||||
IRBFail.CreateCall(CFICheckFailFn, {&CFICheckFailData, &Addr});
|
||||
IRBFail.CreateBr(ExitBB);
|
||||
|
||||
|
@ -1221,7 +1221,7 @@ void DevirtModule::importResolution(VTableSlot Slot, VTableSlotInfo &SlotInfo) {
|
||||
// The type of the function in the declaration is irrelevant because every
|
||||
// call site will cast it to the correct type.
|
||||
auto *SingleImpl = M.getOrInsertFunction(
|
||||
Res.SingleImplName, Type::getVoidTy(M.getContext()));
|
||||
Res.SingleImplName, Type::getVoidTy(M.getContext()), nullptr);
|
||||
|
||||
// This is the import phase so we should not be exporting anything.
|
||||
bool IsExported = false;
|
||||
|
@ -1568,31 +1568,31 @@ void AddressSanitizerModule::initializeCallbacks(Module &M) {
|
||||
|
||||
// Declare our poisoning and unpoisoning functions.
|
||||
AsanPoisonGlobals = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanPoisonGlobalsName, IRB.getVoidTy(), IntptrTy));
|
||||
kAsanPoisonGlobalsName, IRB.getVoidTy(), IntptrTy, nullptr));
|
||||
AsanPoisonGlobals->setLinkage(Function::ExternalLinkage);
|
||||
AsanUnpoisonGlobals = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanUnpoisonGlobalsName, IRB.getVoidTy()));
|
||||
kAsanUnpoisonGlobalsName, IRB.getVoidTy(), nullptr));
|
||||
AsanUnpoisonGlobals->setLinkage(Function::ExternalLinkage);
|
||||
|
||||
// Declare functions that register/unregister globals.
|
||||
AsanRegisterGlobals = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanRegisterGlobalsName, IRB.getVoidTy(), IntptrTy, IntptrTy));
|
||||
kAsanRegisterGlobalsName, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
|
||||
AsanRegisterGlobals->setLinkage(Function::ExternalLinkage);
|
||||
AsanUnregisterGlobals = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(kAsanUnregisterGlobalsName, IRB.getVoidTy(),
|
||||
IntptrTy, IntptrTy));
|
||||
IntptrTy, IntptrTy, nullptr));
|
||||
AsanUnregisterGlobals->setLinkage(Function::ExternalLinkage);
|
||||
|
||||
// Declare the functions that find globals in a shared object and then invoke
|
||||
// the (un)register function on them.
|
||||
AsanRegisterImageGlobals =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanRegisterImageGlobalsName, IRB.getVoidTy(), IntptrTy));
|
||||
kAsanRegisterImageGlobalsName, IRB.getVoidTy(), IntptrTy, nullptr));
|
||||
AsanRegisterImageGlobals->setLinkage(Function::ExternalLinkage);
|
||||
|
||||
AsanUnregisterImageGlobals =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanUnregisterImageGlobalsName, IRB.getVoidTy(), IntptrTy));
|
||||
kAsanUnregisterImageGlobalsName, IRB.getVoidTy(), IntptrTy, nullptr));
|
||||
AsanUnregisterImageGlobals->setLinkage(Function::ExternalLinkage);
|
||||
}
|
||||
|
||||
@ -1967,22 +1967,22 @@ void AddressSanitizer::initializeCallbacks(Module &M) {
|
||||
AsanErrorCallbackSized[AccessIsWrite][Exp] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanReportErrorTemplate + ExpStr + TypeStr + SuffixStr + EndingStr,
|
||||
IRB.getVoidTy(), IntptrTy, IntptrTy, ExpType));
|
||||
IRB.getVoidTy(), IntptrTy, IntptrTy, ExpType, nullptr));
|
||||
AsanMemoryAccessCallbackSized[AccessIsWrite][Exp] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
ClMemoryAccessCallbackPrefix + ExpStr + TypeStr + "N" + EndingStr,
|
||||
IRB.getVoidTy(), IntptrTy, IntptrTy, ExpType));
|
||||
IRB.getVoidTy(), IntptrTy, IntptrTy, ExpType, nullptr));
|
||||
for (size_t AccessSizeIndex = 0; AccessSizeIndex < kNumberOfAccessSizes;
|
||||
AccessSizeIndex++) {
|
||||
const std::string Suffix = TypeStr + itostr(1ULL << AccessSizeIndex);
|
||||
AsanErrorCallback[AccessIsWrite][Exp][AccessSizeIndex] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanReportErrorTemplate + ExpStr + Suffix + EndingStr,
|
||||
IRB.getVoidTy(), IntptrTy, ExpType));
|
||||
IRB.getVoidTy(), IntptrTy, ExpType, nullptr));
|
||||
AsanMemoryAccessCallback[AccessIsWrite][Exp][AccessSizeIndex] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
ClMemoryAccessCallbackPrefix + ExpStr + Suffix + EndingStr,
|
||||
IRB.getVoidTy(), IntptrTy, ExpType));
|
||||
IRB.getVoidTy(), IntptrTy, ExpType, nullptr));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1991,21 +1991,21 @@ void AddressSanitizer::initializeCallbacks(Module &M) {
|
||||
CompileKernel ? std::string("") : ClMemoryAccessCallbackPrefix;
|
||||
AsanMemmove = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
MemIntrinCallbackPrefix + "memmove", IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
AsanMemcpy = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
MemIntrinCallbackPrefix + "memcpy", IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
AsanMemset = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
MemIntrinCallbackPrefix + "memset", IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IRB.getInt32Ty(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IRB.getInt32Ty(), IntptrTy, nullptr));
|
||||
|
||||
AsanHandleNoReturnFunc = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(kAsanHandleNoReturnName, IRB.getVoidTy()));
|
||||
M.getOrInsertFunction(kAsanHandleNoReturnName, IRB.getVoidTy(), nullptr));
|
||||
|
||||
AsanPtrCmpFunction = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanPtrCmp, IRB.getVoidTy(), IntptrTy, IntptrTy));
|
||||
kAsanPtrCmp, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
|
||||
AsanPtrSubFunction = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanPtrSub, IRB.getVoidTy(), IntptrTy, IntptrTy));
|
||||
kAsanPtrSub, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
|
||||
// We insert an empty inline asm after __asan_report* to avoid callback merge.
|
||||
EmptyAsm = InlineAsm::get(FunctionType::get(IRB.getVoidTy(), false),
|
||||
StringRef(""), StringRef(""),
|
||||
@ -2242,18 +2242,18 @@ void FunctionStackPoisoner::initializeCallbacks(Module &M) {
|
||||
std::string Suffix = itostr(i);
|
||||
AsanStackMallocFunc[i] = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(kAsanStackMallocNameTemplate + Suffix, IntptrTy,
|
||||
IntptrTy));
|
||||
IntptrTy, nullptr));
|
||||
AsanStackFreeFunc[i] = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(kAsanStackFreeNameTemplate + Suffix,
|
||||
IRB.getVoidTy(), IntptrTy, IntptrTy));
|
||||
IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
|
||||
}
|
||||
if (ASan.UseAfterScope) {
|
||||
AsanPoisonStackMemoryFunc = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(kAsanPoisonStackMemoryName, IRB.getVoidTy(),
|
||||
IntptrTy, IntptrTy));
|
||||
IntptrTy, IntptrTy, nullptr));
|
||||
AsanUnpoisonStackMemoryFunc = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(kAsanUnpoisonStackMemoryName, IRB.getVoidTy(),
|
||||
IntptrTy, IntptrTy));
|
||||
IntptrTy, IntptrTy, nullptr));
|
||||
}
|
||||
|
||||
for (size_t Val : {0x00, 0xf1, 0xf2, 0xf3, 0xf5, 0xf8}) {
|
||||
@ -2262,14 +2262,14 @@ void FunctionStackPoisoner::initializeCallbacks(Module &M) {
|
||||
Name << std::setw(2) << std::setfill('0') << std::hex << Val;
|
||||
AsanSetShadowFunc[Val] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
Name.str(), IRB.getVoidTy(), IntptrTy, IntptrTy));
|
||||
Name.str(), IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
|
||||
}
|
||||
|
||||
AsanAllocaPoisonFunc = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanAllocaPoison, IRB.getVoidTy(), IntptrTy, IntptrTy));
|
||||
kAsanAllocaPoison, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
|
||||
AsanAllocasUnpoisonFunc =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
kAsanAllocasUnpoison, IRB.getVoidTy(), IntptrTy, IntptrTy));
|
||||
kAsanAllocasUnpoison, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
|
||||
}
|
||||
|
||||
void FunctionStackPoisoner::copyToShadowInline(ArrayRef<uint8_t> ShadowMask,
|
||||
|
@ -267,35 +267,35 @@ void EfficiencySanitizer::initializeCallbacks(Module &M) {
|
||||
SmallString<32> AlignedLoadName("__esan_aligned_load" + ByteSizeStr);
|
||||
EsanAlignedLoad[Idx] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
AlignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
AlignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
SmallString<32> AlignedStoreName("__esan_aligned_store" + ByteSizeStr);
|
||||
EsanAlignedStore[Idx] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
AlignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
AlignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
SmallString<32> UnalignedLoadName("__esan_unaligned_load" + ByteSizeStr);
|
||||
EsanUnalignedLoad[Idx] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
UnalignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
UnalignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
SmallString<32> UnalignedStoreName("__esan_unaligned_store" + ByteSizeStr);
|
||||
EsanUnalignedStore[Idx] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
UnalignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
UnalignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
}
|
||||
EsanUnalignedLoadN = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("__esan_unaligned_loadN", IRB.getVoidTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
EsanUnalignedStoreN = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("__esan_unaligned_storeN", IRB.getVoidTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
MemmoveFn = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("memmove", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
MemcpyFn = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("memcpy", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
MemsetFn = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("memset", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IRB.getInt32Ty(), IntptrTy));
|
||||
IRB.getInt32Ty(), IntptrTy, nullptr));
|
||||
}
|
||||
|
||||
bool EfficiencySanitizer::shouldIgnoreStructType(StructType *StructTy) {
|
||||
@ -533,7 +533,7 @@ void EfficiencySanitizer::createDestructor(Module &M, Constant *ToolInfoArg) {
|
||||
IRBuilder<> IRB_Dtor(EsanDtorFunction->getEntryBlock().getTerminator());
|
||||
Function *EsanExit = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(EsanExitName, IRB_Dtor.getVoidTy(),
|
||||
Int8PtrTy));
|
||||
Int8PtrTy, nullptr));
|
||||
EsanExit->setLinkage(Function::ExternalLinkage);
|
||||
IRB_Dtor.CreateCall(EsanExit, {ToolInfoArg});
|
||||
appendToGlobalDtors(M, EsanDtorFunction, EsanCtorAndDtorPriority);
|
||||
|
@ -425,7 +425,7 @@ void MemorySanitizer::initializeCallbacks(Module &M) {
|
||||
// which is not yet implemented.
|
||||
StringRef WarningFnName = Recover ? "__msan_warning"
|
||||
: "__msan_warning_noreturn";
|
||||
WarningFn = M.getOrInsertFunction(WarningFnName, IRB.getVoidTy());
|
||||
WarningFn = M.getOrInsertFunction(WarningFnName, IRB.getVoidTy(), nullptr);
|
||||
|
||||
for (size_t AccessSizeIndex = 0; AccessSizeIndex < kNumberOfAccessSizes;
|
||||
AccessSizeIndex++) {
|
||||
@ -433,31 +433,31 @@ void MemorySanitizer::initializeCallbacks(Module &M) {
|
||||
std::string FunctionName = "__msan_maybe_warning_" + itostr(AccessSize);
|
||||
MaybeWarningFn[AccessSizeIndex] = M.getOrInsertFunction(
|
||||
FunctionName, IRB.getVoidTy(), IRB.getIntNTy(AccessSize * 8),
|
||||
IRB.getInt32Ty());
|
||||
IRB.getInt32Ty(), nullptr);
|
||||
|
||||
FunctionName = "__msan_maybe_store_origin_" + itostr(AccessSize);
|
||||
MaybeStoreOriginFn[AccessSizeIndex] = M.getOrInsertFunction(
|
||||
FunctionName, IRB.getVoidTy(), IRB.getIntNTy(AccessSize * 8),
|
||||
IRB.getInt8PtrTy(), IRB.getInt32Ty());
|
||||
IRB.getInt8PtrTy(), IRB.getInt32Ty(), nullptr);
|
||||
}
|
||||
|
||||
MsanSetAllocaOrigin4Fn = M.getOrInsertFunction(
|
||||
"__msan_set_alloca_origin4", IRB.getVoidTy(), IRB.getInt8PtrTy(), IntptrTy,
|
||||
IRB.getInt8PtrTy(), IntptrTy);
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr);
|
||||
MsanPoisonStackFn =
|
||||
M.getOrInsertFunction("__msan_poison_stack", IRB.getVoidTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy);
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr);
|
||||
MsanChainOriginFn = M.getOrInsertFunction(
|
||||
"__msan_chain_origin", IRB.getInt32Ty(), IRB.getInt32Ty());
|
||||
"__msan_chain_origin", IRB.getInt32Ty(), IRB.getInt32Ty(), nullptr);
|
||||
MemmoveFn = M.getOrInsertFunction(
|
||||
"__msan_memmove", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy);
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr);
|
||||
MemcpyFn = M.getOrInsertFunction(
|
||||
"__msan_memcpy", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IntptrTy);
|
||||
IntptrTy, nullptr);
|
||||
MemsetFn = M.getOrInsertFunction(
|
||||
"__msan_memset", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IRB.getInt32Ty(),
|
||||
IntptrTy);
|
||||
IntptrTy, nullptr);
|
||||
|
||||
// Create globals.
|
||||
RetvalTLS = new GlobalVariable(
|
||||
|
@ -262,39 +262,39 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
|
||||
Int32Ty = IRB.getInt32Ty();
|
||||
|
||||
SanCovFunction = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovName, VoidTy, Int32PtrTy));
|
||||
M.getOrInsertFunction(SanCovName, VoidTy, Int32PtrTy, nullptr));
|
||||
SanCovWithCheckFunction = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovWithCheckName, VoidTy, Int32PtrTy));
|
||||
M.getOrInsertFunction(SanCovWithCheckName, VoidTy, Int32PtrTy, nullptr));
|
||||
SanCovTracePCIndir = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovTracePCIndirName, VoidTy, IntptrTy));
|
||||
M.getOrInsertFunction(SanCovTracePCIndirName, VoidTy, IntptrTy, nullptr));
|
||||
SanCovIndirCallFunction =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovIndirCallName, VoidTy, IntptrTy, IntptrTy));
|
||||
SanCovIndirCallName, VoidTy, IntptrTy, IntptrTy, nullptr));
|
||||
SanCovTraceCmpFunction[0] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovTraceCmp1, VoidTy, IRB.getInt8Ty(), IRB.getInt8Ty()));
|
||||
SanCovTraceCmp1, VoidTy, IRB.getInt8Ty(), IRB.getInt8Ty(), nullptr));
|
||||
SanCovTraceCmpFunction[1] = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovTraceCmp2, VoidTy, IRB.getInt16Ty(),
|
||||
IRB.getInt16Ty()));
|
||||
IRB.getInt16Ty(), nullptr));
|
||||
SanCovTraceCmpFunction[2] = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovTraceCmp4, VoidTy, IRB.getInt32Ty(),
|
||||
IRB.getInt32Ty()));
|
||||
IRB.getInt32Ty(), nullptr));
|
||||
SanCovTraceCmpFunction[3] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovTraceCmp8, VoidTy, Int64Ty, Int64Ty));
|
||||
SanCovTraceCmp8, VoidTy, Int64Ty, Int64Ty, nullptr));
|
||||
|
||||
SanCovTraceDivFunction[0] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovTraceDiv4, VoidTy, IRB.getInt32Ty()));
|
||||
SanCovTraceDiv4, VoidTy, IRB.getInt32Ty(), nullptr));
|
||||
SanCovTraceDivFunction[1] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovTraceDiv8, VoidTy, Int64Ty));
|
||||
SanCovTraceDiv8, VoidTy, Int64Ty, nullptr));
|
||||
SanCovTraceGepFunction =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovTraceGep, VoidTy, IntptrTy));
|
||||
SanCovTraceGep, VoidTy, IntptrTy, nullptr));
|
||||
SanCovTraceSwitchFunction =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovTraceSwitchName, VoidTy, Int64Ty, Int64PtrTy));
|
||||
SanCovTraceSwitchName, VoidTy, Int64Ty, Int64PtrTy, nullptr));
|
||||
|
||||
// We insert an empty inline asm after cov callbacks to avoid callback merge.
|
||||
EmptyAsm = InlineAsm::get(FunctionType::get(IRB.getVoidTy(), false),
|
||||
@ -302,13 +302,13 @@ bool SanitizerCoverageModule::runOnModule(Module &M) {
|
||||
/*hasSideEffects=*/true);
|
||||
|
||||
SanCovTracePC = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovTracePCName, VoidTy));
|
||||
M.getOrInsertFunction(SanCovTracePCName, VoidTy, nullptr));
|
||||
SanCovTracePCGuard = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
SanCovTracePCGuardName, VoidTy, Int32PtrTy));
|
||||
SanCovTracePCGuardName, VoidTy, Int32PtrTy, nullptr));
|
||||
SanCovTraceEnter = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovTraceEnterName, VoidTy, Int32PtrTy));
|
||||
M.getOrInsertFunction(SanCovTraceEnterName, VoidTy, Int32PtrTy, nullptr));
|
||||
SanCovTraceBB = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(SanCovTraceBBName, VoidTy, Int32PtrTy));
|
||||
M.getOrInsertFunction(SanCovTraceBBName, VoidTy, Int32PtrTy, nullptr));
|
||||
|
||||
// At this point we create a dummy array of guards because we don't
|
||||
// know how many elements we will need.
|
||||
|
@ -160,13 +160,13 @@ void ThreadSanitizer::initializeCallbacks(Module &M) {
|
||||
Attribute::NoUnwind);
|
||||
// Initialize the callbacks.
|
||||
TsanFuncEntry = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
"__tsan_func_entry", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
"__tsan_func_entry", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
TsanFuncExit = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("__tsan_func_exit", Attr, IRB.getVoidTy()));
|
||||
M.getOrInsertFunction("__tsan_func_exit", Attr, IRB.getVoidTy(), nullptr));
|
||||
TsanIgnoreBegin = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
"__tsan_ignore_thread_begin", Attr, IRB.getVoidTy()));
|
||||
"__tsan_ignore_thread_begin", Attr, IRB.getVoidTy(), nullptr));
|
||||
TsanIgnoreEnd = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
"__tsan_ignore_thread_end", Attr, IRB.getVoidTy()));
|
||||
"__tsan_ignore_thread_end", Attr, IRB.getVoidTy(), nullptr));
|
||||
OrdTy = IRB.getInt32Ty();
|
||||
for (size_t i = 0; i < kNumberOfAccessSizes; ++i) {
|
||||
const unsigned ByteSize = 1U << i;
|
||||
@ -175,31 +175,31 @@ void ThreadSanitizer::initializeCallbacks(Module &M) {
|
||||
std::string BitSizeStr = utostr(BitSize);
|
||||
SmallString<32> ReadName("__tsan_read" + ByteSizeStr);
|
||||
TsanRead[i] = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
ReadName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
ReadName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
|
||||
SmallString<32> WriteName("__tsan_write" + ByteSizeStr);
|
||||
TsanWrite[i] = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
WriteName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
WriteName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
|
||||
SmallString<64> UnalignedReadName("__tsan_unaligned_read" + ByteSizeStr);
|
||||
TsanUnalignedRead[i] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
UnalignedReadName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
UnalignedReadName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
|
||||
SmallString<64> UnalignedWriteName("__tsan_unaligned_write" + ByteSizeStr);
|
||||
TsanUnalignedWrite[i] =
|
||||
checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
UnalignedWriteName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
UnalignedWriteName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
|
||||
Type *Ty = Type::getIntNTy(M.getContext(), BitSize);
|
||||
Type *PtrTy = Ty->getPointerTo();
|
||||
SmallString<32> AtomicLoadName("__tsan_atomic" + BitSizeStr + "_load");
|
||||
TsanAtomicLoad[i] = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(AtomicLoadName, Attr, Ty, PtrTy, OrdTy));
|
||||
M.getOrInsertFunction(AtomicLoadName, Attr, Ty, PtrTy, OrdTy, nullptr));
|
||||
|
||||
SmallString<32> AtomicStoreName("__tsan_atomic" + BitSizeStr + "_store");
|
||||
TsanAtomicStore[i] = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
AtomicStoreName, Attr, IRB.getVoidTy(), PtrTy, Ty, OrdTy));
|
||||
AtomicStoreName, Attr, IRB.getVoidTy(), PtrTy, Ty, OrdTy, nullptr));
|
||||
|
||||
for (int op = AtomicRMWInst::FIRST_BINOP;
|
||||
op <= AtomicRMWInst::LAST_BINOP; ++op) {
|
||||
@ -223,33 +223,33 @@ void ThreadSanitizer::initializeCallbacks(Module &M) {
|
||||
continue;
|
||||
SmallString<32> RMWName("__tsan_atomic" + itostr(BitSize) + NamePart);
|
||||
TsanAtomicRMW[op][i] = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction(RMWName, Attr, Ty, PtrTy, Ty, OrdTy));
|
||||
M.getOrInsertFunction(RMWName, Attr, Ty, PtrTy, Ty, OrdTy, nullptr));
|
||||
}
|
||||
|
||||
SmallString<32> AtomicCASName("__tsan_atomic" + BitSizeStr +
|
||||
"_compare_exchange_val");
|
||||
TsanAtomicCAS[i] = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
AtomicCASName, Attr, Ty, PtrTy, Ty, Ty, OrdTy, OrdTy));
|
||||
AtomicCASName, Attr, Ty, PtrTy, Ty, Ty, OrdTy, OrdTy, nullptr));
|
||||
}
|
||||
TsanVptrUpdate = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("__tsan_vptr_update", Attr, IRB.getVoidTy(),
|
||||
IRB.getInt8PtrTy(), IRB.getInt8PtrTy()));
|
||||
IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
TsanVptrLoad = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
"__tsan_vptr_read", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
|
||||
"__tsan_vptr_read", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
|
||||
TsanAtomicThreadFence = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
"__tsan_atomic_thread_fence", Attr, IRB.getVoidTy(), OrdTy));
|
||||
"__tsan_atomic_thread_fence", Attr, IRB.getVoidTy(), OrdTy, nullptr));
|
||||
TsanAtomicSignalFence = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
|
||||
"__tsan_atomic_signal_fence", Attr, IRB.getVoidTy(), OrdTy));
|
||||
"__tsan_atomic_signal_fence", Attr, IRB.getVoidTy(), OrdTy, nullptr));
|
||||
|
||||
MemmoveFn = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("memmove", Attr, IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
MemcpyFn = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("memcpy", Attr, IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IRB.getInt8PtrTy(), IntptrTy));
|
||||
IRB.getInt8PtrTy(), IntptrTy, nullptr));
|
||||
MemsetFn = checkSanitizerInterfaceFunction(
|
||||
M.getOrInsertFunction("memset", Attr, IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
|
||||
IRB.getInt32Ty(), IntptrTy));
|
||||
IRB.getInt32Ty(), IntptrTy, nullptr));
|
||||
}
|
||||
|
||||
bool ThreadSanitizer::doInitialization(Module &M) {
|
||||
|
@ -823,7 +823,7 @@ bool LoopIdiomRecognize::processLoopStridedStore(
|
||||
Module *M = TheStore->getModule();
|
||||
Value *MSP =
|
||||
M->getOrInsertFunction("memset_pattern16", Builder.getVoidTy(),
|
||||
Int8PtrTy, Int8PtrTy, IntPtr);
|
||||
Int8PtrTy, Int8PtrTy, IntPtr, (void *)nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("memset_pattern16"), *TLI);
|
||||
|
||||
// Otherwise we should form a memset_pattern16. PatternValue is known to be
|
||||
|
@ -723,7 +723,7 @@ Value *llvm::emitStrLen(Value *Ptr, IRBuilder<> &B, const DataLayout &DL,
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
LLVMContext &Context = B.GetInsertBlock()->getContext();
|
||||
Constant *StrLen = M->getOrInsertFunction("strlen", DL.getIntPtrType(Context),
|
||||
B.getInt8PtrTy());
|
||||
B.getInt8PtrTy(), nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("strlen"), *TLI);
|
||||
CallInst *CI = B.CreateCall(StrLen, castToCStr(Ptr, B), "strlen");
|
||||
if (const Function *F = dyn_cast<Function>(StrLen->stripPointerCasts()))
|
||||
@ -741,7 +741,7 @@ Value *llvm::emitStrChr(Value *Ptr, char C, IRBuilder<> &B,
|
||||
Type *I8Ptr = B.getInt8PtrTy();
|
||||
Type *I32Ty = B.getInt32Ty();
|
||||
Constant *StrChr =
|
||||
M->getOrInsertFunction("strchr", I8Ptr, I8Ptr, I32Ty);
|
||||
M->getOrInsertFunction("strchr", I8Ptr, I8Ptr, I32Ty, nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("strchr"), *TLI);
|
||||
CallInst *CI = B.CreateCall(
|
||||
StrChr, {castToCStr(Ptr, B), ConstantInt::get(I32Ty, C)}, "strchr");
|
||||
@ -759,7 +759,7 @@ Value *llvm::emitStrNCmp(Value *Ptr1, Value *Ptr2, Value *Len, IRBuilder<> &B,
|
||||
LLVMContext &Context = B.GetInsertBlock()->getContext();
|
||||
Value *StrNCmp = M->getOrInsertFunction("strncmp", B.getInt32Ty(),
|
||||
B.getInt8PtrTy(), B.getInt8PtrTy(),
|
||||
DL.getIntPtrType(Context));
|
||||
DL.getIntPtrType(Context), nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("strncmp"), *TLI);
|
||||
CallInst *CI = B.CreateCall(
|
||||
StrNCmp, {castToCStr(Ptr1, B), castToCStr(Ptr2, B), Len}, "strncmp");
|
||||
@ -777,7 +777,7 @@ Value *llvm::emitStrCpy(Value *Dst, Value *Src, IRBuilder<> &B,
|
||||
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
Type *I8Ptr = B.getInt8PtrTy();
|
||||
Value *StrCpy = M->getOrInsertFunction(Name, I8Ptr, I8Ptr, I8Ptr);
|
||||
Value *StrCpy = M->getOrInsertFunction(Name, I8Ptr, I8Ptr, I8Ptr, nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction(Name), *TLI);
|
||||
CallInst *CI =
|
||||
B.CreateCall(StrCpy, {castToCStr(Dst, B), castToCStr(Src, B)}, Name);
|
||||
@ -794,7 +794,7 @@ Value *llvm::emitStrNCpy(Value *Dst, Value *Src, Value *Len, IRBuilder<> &B,
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
Type *I8Ptr = B.getInt8PtrTy();
|
||||
Value *StrNCpy = M->getOrInsertFunction(Name, I8Ptr, I8Ptr, I8Ptr,
|
||||
Len->getType());
|
||||
Len->getType(), nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction(Name), *TLI);
|
||||
CallInst *CI = B.CreateCall(
|
||||
StrNCpy, {castToCStr(Dst, B), castToCStr(Src, B), Len}, "strncpy");
|
||||
@ -817,7 +817,7 @@ Value *llvm::emitMemCpyChk(Value *Dst, Value *Src, Value *Len, Value *ObjSize,
|
||||
Value *MemCpy = M->getOrInsertFunction(
|
||||
"__memcpy_chk", AttributeList::get(M->getContext(), AS), B.getInt8PtrTy(),
|
||||
B.getInt8PtrTy(), B.getInt8PtrTy(), DL.getIntPtrType(Context),
|
||||
DL.getIntPtrType(Context));
|
||||
DL.getIntPtrType(Context), nullptr);
|
||||
Dst = castToCStr(Dst, B);
|
||||
Src = castToCStr(Src, B);
|
||||
CallInst *CI = B.CreateCall(MemCpy, {Dst, Src, Len, ObjSize});
|
||||
@ -835,7 +835,7 @@ Value *llvm::emitMemChr(Value *Ptr, Value *Val, Value *Len, IRBuilder<> &B,
|
||||
LLVMContext &Context = B.GetInsertBlock()->getContext();
|
||||
Value *MemChr = M->getOrInsertFunction("memchr", B.getInt8PtrTy(),
|
||||
B.getInt8PtrTy(), B.getInt32Ty(),
|
||||
DL.getIntPtrType(Context));
|
||||
DL.getIntPtrType(Context), nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("memchr"), *TLI);
|
||||
CallInst *CI = B.CreateCall(MemChr, {castToCStr(Ptr, B), Val, Len}, "memchr");
|
||||
|
||||
@ -854,7 +854,7 @@ Value *llvm::emitMemCmp(Value *Ptr1, Value *Ptr2, Value *Len, IRBuilder<> &B,
|
||||
LLVMContext &Context = B.GetInsertBlock()->getContext();
|
||||
Value *MemCmp = M->getOrInsertFunction("memcmp", B.getInt32Ty(),
|
||||
B.getInt8PtrTy(), B.getInt8PtrTy(),
|
||||
DL.getIntPtrType(Context));
|
||||
DL.getIntPtrType(Context), nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("memcmp"), *TLI);
|
||||
CallInst *CI = B.CreateCall(
|
||||
MemCmp, {castToCStr(Ptr1, B), castToCStr(Ptr2, B), Len}, "memcmp");
|
||||
@ -887,7 +887,7 @@ Value *llvm::emitUnaryFloatFnCall(Value *Op, StringRef Name, IRBuilder<> &B,
|
||||
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
Value *Callee = M->getOrInsertFunction(Name, Op->getType(),
|
||||
Op->getType());
|
||||
Op->getType(), nullptr);
|
||||
CallInst *CI = B.CreateCall(Callee, Op, Name);
|
||||
CI->setAttributes(Attrs);
|
||||
if (const Function *F = dyn_cast<Function>(Callee->stripPointerCasts()))
|
||||
@ -903,7 +903,7 @@ Value *llvm::emitBinaryFloatFnCall(Value *Op1, Value *Op2, StringRef Name,
|
||||
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
Value *Callee = M->getOrInsertFunction(Name, Op1->getType(), Op1->getType(),
|
||||
Op2->getType());
|
||||
Op2->getType(), nullptr);
|
||||
CallInst *CI = B.CreateCall(Callee, {Op1, Op2}, Name);
|
||||
CI->setAttributes(Attrs);
|
||||
if (const Function *F = dyn_cast<Function>(Callee->stripPointerCasts()))
|
||||
@ -918,7 +918,8 @@ Value *llvm::emitPutChar(Value *Char, IRBuilder<> &B,
|
||||
return nullptr;
|
||||
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
Value *PutChar = M->getOrInsertFunction("putchar", B.getInt32Ty(), B.getInt32Ty());
|
||||
Value *PutChar = M->getOrInsertFunction("putchar", B.getInt32Ty(),
|
||||
B.getInt32Ty(), nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("putchar"), *TLI);
|
||||
CallInst *CI = B.CreateCall(PutChar,
|
||||
B.CreateIntCast(Char,
|
||||
@ -939,7 +940,7 @@ Value *llvm::emitPutS(Value *Str, IRBuilder<> &B,
|
||||
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
Value *PutS =
|
||||
M->getOrInsertFunction("puts", B.getInt32Ty(), B.getInt8PtrTy());
|
||||
M->getOrInsertFunction("puts", B.getInt32Ty(), B.getInt8PtrTy(), nullptr);
|
||||
inferLibFuncAttributes(*M->getFunction("puts"), *TLI);
|
||||
CallInst *CI = B.CreateCall(PutS, castToCStr(Str, B), "puts");
|
||||
if (const Function *F = dyn_cast<Function>(PutS->stripPointerCasts()))
|
||||
@ -954,7 +955,7 @@ Value *llvm::emitFPutC(Value *Char, Value *File, IRBuilder<> &B,
|
||||
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
Constant *F = M->getOrInsertFunction("fputc", B.getInt32Ty(), B.getInt32Ty(),
|
||||
File->getType());
|
||||
File->getType(), nullptr);
|
||||
if (File->getType()->isPointerTy())
|
||||
inferLibFuncAttributes(*M->getFunction("fputc"), *TLI);
|
||||
Char = B.CreateIntCast(Char, B.getInt32Ty(), /*isSigned*/true,
|
||||
@ -974,7 +975,7 @@ Value *llvm::emitFPutS(Value *Str, Value *File, IRBuilder<> &B,
|
||||
Module *M = B.GetInsertBlock()->getModule();
|
||||
StringRef FPutsName = TLI->getName(LibFunc_fputs);
|
||||
Constant *F = M->getOrInsertFunction(
|
||||
FPutsName, B.getInt32Ty(), B.getInt8PtrTy(), File->getType());
|
||||
FPutsName, B.getInt32Ty(), B.getInt8PtrTy(), File->getType(), nullptr);
|
||||
if (File->getType()->isPointerTy())
|
||||
inferLibFuncAttributes(*M->getFunction(FPutsName), *TLI);
|
||||
CallInst *CI = B.CreateCall(F, {castToCStr(Str, B), File}, "fputs");
|
||||
@ -994,8 +995,8 @@ Value *llvm::emitFWrite(Value *Ptr, Value *Size, Value *File, IRBuilder<> &B,
|
||||
StringRef FWriteName = TLI->getName(LibFunc_fwrite);
|
||||
Constant *F = M->getOrInsertFunction(
|
||||
FWriteName, DL.getIntPtrType(Context), B.getInt8PtrTy(),
|
||||
DL.getIntPtrType(Context), DL.getIntPtrType(Context), File->getType());
|
||||
|
||||
DL.getIntPtrType(Context), DL.getIntPtrType(Context), File->getType(),
|
||||
nullptr);
|
||||
if (File->getType()->isPointerTy())
|
||||
inferLibFuncAttributes(*M->getFunction(FWriteName), *TLI);
|
||||
CallInst *CI =
|
||||
|
@ -819,7 +819,7 @@ static Value *emitCalloc(Value *Num, Value *Size, const AttributeList &Attrs,
|
||||
const DataLayout &DL = M->getDataLayout();
|
||||
IntegerType *PtrType = DL.getIntPtrType((B.GetInsertBlock()->getContext()));
|
||||
Value *Calloc = M->getOrInsertFunction("calloc", Attrs, B.getInt8PtrTy(),
|
||||
PtrType, PtrType);
|
||||
PtrType, PtrType, nullptr);
|
||||
CallInst *CI = B.CreateCall(Calloc, { Num, Size }, "calloc");
|
||||
|
||||
if (const auto *F = dyn_cast<Function>(Calloc->stripPointerCasts()))
|
||||
@ -1219,7 +1219,7 @@ Value *LibCallSimplifier::optimizeExp2(CallInst *CI, IRBuilder<> &B) {
|
||||
Module *M = CI->getModule();
|
||||
Value *NewCallee =
|
||||
M->getOrInsertFunction(TLI->getName(LdExp), Op->getType(),
|
||||
Op->getType(), B.getInt32Ty());
|
||||
Op->getType(), B.getInt32Ty(), nullptr);
|
||||
CallInst *CI = B.CreateCall(NewCallee, {One, LdExpArg});
|
||||
if (const Function *F = dyn_cast<Function>(Callee->stripPointerCasts()))
|
||||
CI->setCallingConv(F->getCallingConv());
|
||||
@ -1443,7 +1443,7 @@ static void insertSinCosCall(IRBuilder<> &B, Function *OrigCallee, Value *Arg,
|
||||
|
||||
Module *M = OrigCallee->getParent();
|
||||
Value *Callee = M->getOrInsertFunction(Name, OrigCallee->getAttributes(),
|
||||
ResTy, ArgTy);
|
||||
ResTy, ArgTy, nullptr);
|
||||
|
||||
if (Instruction *ArgInst = dyn_cast<Instruction>(Arg)) {
|
||||
// If the argument is an instruction, it must dominate all uses so put our
|
||||
|
@ -606,7 +606,8 @@ int main(int argc, char **argv, char * const *envp) {
|
||||
// If the program doesn't explicitly call exit, we will need the Exit
|
||||
// function later on to make an explicit call, so get the function now.
|
||||
Constant *Exit = Mod->getOrInsertFunction("exit", Type::getVoidTy(Context),
|
||||
Type::getInt32Ty(Context));
|
||||
Type::getInt32Ty(Context),
|
||||
nullptr);
|
||||
|
||||
// Run static constructors.
|
||||
if (!ForceInterpreter) {
|
||||
|
Loading…
Reference in New Issue
Block a user