[llvm] r299949 - Module::getOrInsertFunction is using C-style vararg instead of variadic templates.

Dmitry Babokin via llvm-commits llvm-commits at lists.llvm.org
Mon Apr 24 15:14:48 PDT 2017


Serge,

You've forgot to update documentation for getOrInsertFunction() in
llvm/trunk/include/llvm/IR/Module.h to reflect that it doesn't require
null-trerminated list anymore. Currently it specifically states that it
requires null terminated list.

Dmitry.

On Mon, Apr 17, 2017 at 12:55 PM, David Blaikie via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

>
> On Tue, Apr 11, 2017 at 8:13 AM Serge Guelton via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: serge_sans_paille
>> Date: Tue Apr 11 10:01:18 2017
>> New Revision: 299949
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=299949&view=rev
>> Log:
>> Module::getOrInsertFunction is using C-style vararg instead of variadic
>> templates.
>>
>> From a user prospective, it forces the use of an annoying nullptr to mark
>> the end of the vararg, and there's not type checking on the arguments.
>> The variadic template is an obvious solution to both issues.
>>
>> Differential Revision: https://reviews.llvm.org/D31070
>>
>>
>> Modified:
>>     llvm/trunk/examples/BrainF/BrainF.cpp
>>     llvm/trunk/examples/BrainF/BrainFDriver.cpp
>>     llvm/trunk/examples/Fibonacci/fibonacci.cpp
>>     llvm/trunk/examples/HowToUseJIT/HowToUseJIT.cpp
>>     llvm/trunk/examples/ParallelJIT/ParallelJIT.cpp
>>     llvm/trunk/include/llvm/IR/Module.h
>>     llvm/trunk/lib/CodeGen/CountingFunctionInserter.cpp
>>     llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp
>>     llvm/trunk/lib/CodeGen/MachineOutliner.cpp
>>     llvm/trunk/lib/CodeGen/SafeStack.cpp
>>     llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp
>>     llvm/trunk/lib/CodeGen/StackProtector.cpp
>>     llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp
>>     llvm/trunk/lib/IR/Instructions.cpp
>>     llvm/trunk/lib/IR/Module.cpp
>>     llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
>>     llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp
>>     llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>>     llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp
>>     llvm/trunk/lib/Transforms/IPO/WholeProgramDevirt.cpp
>>     llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>>     llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp
>>     llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp
>>     llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
>>     llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>>     llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
>>     llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp
>>     llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp
>>     llvm/trunk/tools/bugpoint/Miscompilation.cpp
>>     llvm/trunk/tools/lli/lli.cpp
>>
>> Modified: llvm/trunk/examples/BrainF/BrainF.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/
>> BrainF/BrainF.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/examples/BrainF/BrainF.cpp (original)
>> +++ llvm/trunk/examples/BrainF/BrainF.cpp Tue Apr 11 10:01:18 2017
>> @@ -74,18 +74,18 @@ void BrainF::header(LLVMContext& C) {
>>
>>    //declare i32 @getchar()
>>    getchar_func = cast<Function>(module->
>> -    getOrInsertFunction("getchar", IntegerType::getInt32Ty(C), NULL));
>> +    getOrInsertFunction("getchar", IntegerType::getInt32Ty(C)));
>>
>>    //declare i32 @putchar(i32)
>>    putchar_func = cast<Function>(module->
>>      getOrInsertFunction("putchar", IntegerType::getInt32Ty(C),
>> -                        IntegerType::getInt32Ty(C), NULL));
>> +                        IntegerType::getInt32Ty(C)));
>>
>>    //Function header
>>
>>    //define void @brainf()
>>    brainf_func = cast<Function>(module->
>> -    getOrInsertFunction("brainf", Type::getVoidTy(C), NULL));
>> +    getOrInsertFunction("brainf", Type::getVoidTy(C)));
>>
>>    builder = new IRBuilder<>(BasicBlock::Create(C, label, brainf_func));
>>
>> @@ -156,7 +156,7 @@ void BrainF::header(LLVMContext& C) {
>>      //declare i32 @puts(i8 *)
>>      Function *puts_func = cast<Function>(module->
>>        getOrInsertFunction("puts", IntegerType::getInt32Ty(C),
>> -                      PointerType::getUnqual(IntegerType::getInt8Ty(C)),
>> NULL));
>> +                      PointerType::getUnqual(
>> IntegerType::getInt8Ty(C))));
>>
>>      //brainf.aberror:
>>      aberrorbb = BasicBlock::Create(C, label, brainf_func);
>>
>> Modified: llvm/trunk/examples/BrainF/BrainFDriver.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/
>> BrainF/BrainFDriver.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/examples/BrainF/BrainFDriver.cpp (original)
>> +++ llvm/trunk/examples/BrainF/BrainFDriver.cpp Tue Apr 11 10:01:18 2017
>> @@ -77,7 +77,7 @@ void addMainFunction(Module *mod) {
>>      getOrInsertFunction("main", IntegerType::getInt32Ty(mod->
>> getContext()),
>>                          IntegerType::getInt32Ty(mod->getContext()),
>>                          PointerType::getUnqual(PointerType::getUnqual(
>> -                          IntegerType::getInt8Ty(mod->getContext()))),
>> NULL));
>> +                          IntegerType::getInt8Ty(mod->getContext())))));
>>    {
>>      Function::arg_iterator args = main_func->arg_begin();
>>      Value *arg_0 = &*args++;
>>
>> Modified: llvm/trunk/examples/Fibonacci/fibonacci.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/
>> Fibonacci/fibonacci.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/examples/Fibonacci/fibonacci.cpp (original)
>> +++ llvm/trunk/examples/Fibonacci/fibonacci.cpp Tue Apr 11 10:01:18 2017
>> @@ -54,8 +54,7 @@ static Function *CreateFibFunction(Modul
>>    // to return an int and take an int parameter.
>>    Function *FibF =
>>      cast<Function>(M->getOrInsertFunction("fib",
>> Type::getInt32Ty(Context),
>> -                                          Type::getInt32Ty(Context),
>> -                                          nullptr));
>> +                                          Type::getInt32Ty(Context)));
>>
>>    // Add a basic block to the function.
>>    BasicBlock *BB = BasicBlock::Create(Context, "EntryBlock", FibF);
>>
>> Modified: llvm/trunk/examples/HowToUseJIT/HowToUseJIT.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/
>> HowToUseJIT/HowToUseJIT.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/examples/HowToUseJIT/HowToUseJIT.cpp (original)
>> +++ llvm/trunk/examples/HowToUseJIT/HowToUseJIT.cpp Tue Apr 11 10:01:18
>> 2017
>> @@ -69,11 +69,9 @@ int main() {
>>
>>    // Create the add1 function entry and insert this entry into module
>> M.  The
>>    // function will have a return type of "int" and take an argument of
>> "int".
>> -  // The '0' terminates the list of argument types.
>>    Function *Add1F =
>>      cast<Function>(M->getOrInsertFunction("add1",
>> Type::getInt32Ty(Context),
>> -                                          Type::getInt32Ty(Context),
>> -                                          nullptr));
>> +                                          Type::getInt32Ty(Context)));
>>
>>    // Add a basic block to the function. As before, it automatically
>> inserts
>>    // because of the last argument.
>> @@ -102,8 +100,7 @@ int main() {
>>    // Now we're going to create function `foo', which returns an int and
>> takes no
>>    // arguments.
>>    Function *FooF =
>> -    cast<Function>(M->getOrInsertFunction("foo",
>> Type::getInt32Ty(Context),
>> -                                          nullptr));
>> +    cast<Function>(M->getOrInsertFunction("foo",
>> Type::getInt32Ty(Context)));
>>
>>    // Add a basic block to the FooF function.
>>    BB = BasicBlock::Create(Context, "EntryBlock", FooF);
>>
>> Modified: llvm/trunk/examples/ParallelJIT/ParallelJIT.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/examples/
>> ParallelJIT/ParallelJIT.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/examples/ParallelJIT/ParallelJIT.cpp (original)
>> +++ llvm/trunk/examples/ParallelJIT/ParallelJIT.cpp Tue Apr 11 10:01:18
>> 2017
>> @@ -54,8 +54,7 @@ static Function* createAdd1(Module *M) {
>>    Function *Add1F =
>>      cast<Function>(M->getOrInsertFunction("add1",
>>                                            Type::getInt32Ty(M->
>> getContext()),
>> -                                          Type::getInt32Ty(M->
>> getContext()),
>> -                                          nullptr));
>> +                                          Type::getInt32Ty(M->
>> getContext())));
>>
>>    // Add a basic block to the function. As before, it automatically
>> inserts
>>    // because of the last argument.
>> @@ -85,8 +84,7 @@ static Function *CreateFibFunction(Modul
>>    Function *FibF =
>>      cast<Function>(M->getOrInsertFunction("fib",
>>                                            Type::getInt32Ty(M->
>> getContext()),
>> -                                          Type::getInt32Ty(M->
>> getContext()),
>> -                                          nullptr));
>> +                                          Type::getInt32Ty(M->
>> getContext())));
>>
>>    // Add a basic block to the function.
>>    BasicBlock *BB = BasicBlock::Create(M->getContext(), "EntryBlock",
>> FibF);
>>
>> Modified: llvm/trunk/include/llvm/IR/Module.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/
>> llvm/IR/Module.h?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/include/llvm/IR/Module.h (original)
>> +++ llvm/trunk/include/llvm/IR/Module.h Tue Apr 11 10:01:18 2017
>> @@ -321,12 +321,22 @@ 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.
>> -  Constant *getOrInsertFunction(StringRef Name, AttributeList
>> AttributeList,
>> -                                Type *RetTy, ...) LLVM_END_WITH_NULL;
>> +  template<typename... ArgsTy>
>> +  Constant *getOrInsertFunction(StringRef Name,
>> +                                AttributeList AttributeList,
>> +                                Type *RetTy, ArgsTy... Args)
>> +  {
>> +    SmallVector<Type*, sizeof...(ArgsTy)> ArgTys{Args...};
>>
>
> Is this ^ calling a ctor or list initialization? If it's a ctor, please
> write it with () rathert han {}, if it's list init, please write it with "T
> x = {}" syntax, I think? (goes similarly for other changes like this in
> this patch and another committed recently)
>
>
>> +    return getOrInsertFunction(Name,
>> +                               FunctionType::get(RetTy, ArgTys, false),
>> +                               AttributeList);
>> +  }
>>
>>    /// Same as above, but without the attributes.
>> -  Constant *getOrInsertFunction(StringRef Name, Type *RetTy, ...)
>> -    LLVM_END_WITH_NULL;
>> +  template<typename... ArgsTy>
>> +  Constant *getOrInsertFunction(StringRef Name, Type *RetTy, ArgsTy...
>> Args) {
>> +    return getOrInsertFunction(Name, AttributeList{}, RetTy, Args...);
>> +  }
>>
>>    /// Look up the specified function in the module symbol table. If it
>> does not
>>    /// exist, return null.
>>
>> Modified: llvm/trunk/lib/CodeGen/CountingFunctionInserter.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/
>> CountingFunctionInserter.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/CountingFunctionInserter.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/CountingFunctionInserter.cpp Tue Apr 11
>> 10:01:18 2017
>> @@ -41,7 +41,7 @@ namespace {
>>        Type *VoidTy = Type::getVoidTy(F.getContext());
>>        Constant *CountingFn =
>>          F.getParent()->getOrInsertFunction(CountingFunctionName,
>> -                                           VoidTy, nullptr);
>> +                                           VoidTy);
>>        CallInst::Create(CountingFn, "", &*F.begin()->
>> getFirstInsertionPt());
>>        return true;
>>      }
>>
>> Modified: llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> CodeGen/IntrinsicLowering.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/IntrinsicLowering.cpp Tue Apr 11 10:01:18 2017
>> @@ -115,21 +115,21 @@ void IntrinsicLowering::AddPrototypes(Mo
>>            Type::getInt8PtrTy(Context),
>>                                Type::getInt8PtrTy(Context),
>>                                Type::getInt8PtrTy(Context),
>> -                              DL.getIntPtrType(Context), nullptr);
>> +                              DL.getIntPtrType(Context));
>>          break;
>>        case Intrinsic::memmove:
>>          M.getOrInsertFunction("memmove",
>>            Type::getInt8PtrTy(Context),
>>                                Type::getInt8PtrTy(Context),
>>                                Type::getInt8PtrTy(Context),
>> -                              DL.getIntPtrType(Context), nullptr);
>> +                              DL.getIntPtrType(Context));
>>          break;
>>        case Intrinsic::memset:
>>          M.getOrInsertFunction("memset",
>>            Type::getInt8PtrTy(Context),
>>                                Type::getInt8PtrTy(Context),
>>                                Type::getInt32Ty(M.getContext()),
>> -                              DL.getIntPtrType(Context), nullptr);
>> +                              DL.getIntPtrType(Context));
>>          break;
>>        case Intrinsic::sqrt:
>>          EnsureFPIntrinsicsExist(M, F, "sqrtf", "sqrt", "sqrtl");
>>
>> Modified: llvm/trunk/lib/CodeGen/MachineOutliner.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> CodeGen/MachineOutliner.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/MachineOutliner.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/MachineOutliner.cpp Tue Apr 11 10:01:18 2017
>> @@ -1098,7 +1098,7 @@ MachineOutliner::createOutlinedFunction(
>>    // Create the function using an IR-level function.
>>    LLVMContext &C = M.getContext();
>>    Function *F = dyn_cast<Function>(
>> -      M.getOrInsertFunction(NameStream.str(), Type::getVoidTy(C),
>> nullptr));
>> +      M.getOrInsertFunction(NameStream.str(), Type::getVoidTy(C)));
>>    assert(F && "Function was null!");
>>
>>    // NOTE: If this is linkonceodr, then we can take advantage of linker
>> deduping
>>
>> Modified: llvm/trunk/lib/CodeGen/SafeStack.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> CodeGen/SafeStack.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/SafeStack.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/SafeStack.cpp Tue Apr 11 10:01:18 2017
>> @@ -451,7 +451,7 @@ void SafeStack::checkStackGuard(IRBuilde
>>    IRBuilder<> IRBFail(CheckTerm);
>>    // FIXME: respect -fsanitize-trap / -ftrap-function here?
>>    Constant *StackChkFail = F.getParent()->getOrInsertFunction(
>> -      "__stack_chk_fail", IRB.getVoidTy(), nullptr);
>> +      "__stack_chk_fail", IRB.getVoidTy());
>>    IRBFail.CreateCall(StackChkFail, {});
>>  }
>>
>>
>> Modified: llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> CodeGen/SjLjEHPrepare.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/SjLjEHPrepare.cpp Tue Apr 11 10:01:18 2017
>> @@ -482,10 +482,10 @@ bool SjLjEHPrepare::runOnFunction(Functi
>>    Module &M = *F.getParent();
>>    RegisterFn = M.getOrInsertFunction(
>>        "_Unwind_SjLj_Register", Type::getVoidTy(M.getContext()),
>> -      PointerType::getUnqual(FunctionContextTy), nullptr);
>> +      PointerType::getUnqual(FunctionContextTy));
>>    UnregisterFn = M.getOrInsertFunction(
>>        "_Unwind_SjLj_Unregister", Type::getVoidTy(M.getContext()),
>> -      PointerType::getUnqual(FunctionContextTy), nullptr);
>> +      PointerType::getUnqual(FunctionContextTy));
>>    FrameAddrFn = Intrinsic::getDeclaration(&M, Intrinsic::frameaddress);
>>    StackAddrFn = Intrinsic::getDeclaration(&M, Intrinsic::stacksave);
>>    StackRestoreFn = Intrinsic::getDeclaration(&M,
>> Intrinsic::stackrestore);
>>
>> Modified: llvm/trunk/lib/CodeGen/StackProtector.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> CodeGen/StackProtector.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/StackProtector.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/StackProtector.cpp Tue Apr 11 10:01:18 2017
>> @@ -484,13 +484,13 @@ BasicBlock *StackProtector::CreateFailBB
>>      Constant *StackChkFail =
>>          M->getOrInsertFunction("__stack_smash_handler",
>>                                 Type::getVoidTy(Context),
>> -                               Type::getInt8PtrTy(Context), nullptr);
>> +                               Type::getInt8PtrTy(Context));
>>
>>      B.CreateCall(StackChkFail, B.CreateGlobalStringPtr(F->getName(),
>> "SSH"));
>>    } else {
>>      Constant *StackChkFail =
>> -        M->getOrInsertFunction("__stack_chk_fail",
>> Type::getVoidTy(Context),
>> -                               nullptr);
>> +        M->getOrInsertFunction("__stack_chk_fail",
>> Type::getVoidTy(Context));
>> +
>>      B.CreateCall(StackChkFail, {});
>>    }
>>    B.CreateUnreachable();
>>
>> Modified: llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> CodeGen/TargetLoweringBase.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp (original)
>> +++ llvm/trunk/lib/CodeGen/TargetLoweringBase.cpp Tue Apr 11 10:01:18
>> 2017
>> @@ -1818,7 +1818,7 @@ Value *TargetLoweringBase::getSafeStackP
>>    Module *M = IRB.GetInsertBlock()->getParent()->getParent();
>>    Type *StackPtrTy = Type::getInt8PtrTy(M->getContext());
>>    Value *Fn = M->getOrInsertFunction("__safestack_pointer_address",
>> -                                     StackPtrTy->getPointerTo(0),
>> nullptr);
>> +                                     StackPtrTy->getPointerTo(0));
>>    return IRB.CreateCall(Fn);
>>  }
>>
>>
>> Modified: llvm/trunk/lib/IR/Instructions.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/
>> Instructions.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/Instructions.cpp (original)
>> +++ llvm/trunk/lib/IR/Instructions.cpp Tue Apr 11 10:01:18 2017
>> @@ -466,7 +466,7 @@ static Instruction *createMalloc(Instruc
>>    Value *MallocFunc = MallocF;
>>    if (!MallocFunc)
>>      // prototype malloc as "void *malloc(size_t)"
>> -    MallocFunc = M->getOrInsertFunction("malloc", BPTy, IntPtrTy,
>> nullptr);
>> +    MallocFunc = M->getOrInsertFunction("malloc", BPTy, IntPtrTy);
>>    PointerType *AllocPtrType = PointerType::getUnqual(AllocTy);
>>    CallInst *MCall = nullptr;
>>    Instruction *Result = nullptr;
>> @@ -560,7 +560,7 @@ static Instruction *createFree(Value *So
>>    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,
>> nullptr);
>> +  Value *FreeFunc = M->getOrInsertFunction("free", VoidTy, IntPtrTy);
>>    CallInst *Result = nullptr;
>>    Value *PtrCast = Source;
>>    if (InsertBefore) {
>>
>> Modified: llvm/trunk/lib/IR/Module.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/
>> Module.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/IR/Module.cpp (original)
>> +++ llvm/trunk/lib/IR/Module.cpp Tue Apr 11 10:01:18 2017
>> @@ -147,47 +147,6 @@ Constant *Module::getOrInsertFunction(St
>>    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.
>>  //
>>
>> Modified: llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/
>> HexagonLoopIdiomRecognition.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp
>> (original)
>> +++ llvm/trunk/lib/Target/Hexagon/HexagonLoopIdiomRecognition.cpp Tue
>> Apr 11 10:01:18 2017
>> @@ -2146,8 +2146,7 @@ CleanupAndExit:
>>        Type *VoidTy = Type::getVoidTy(Ctx);
>>        Module *M = Func->getParent();
>>        Constant *CF = M->getOrInsertFunction(HexagonVolatileMemcpyName,
>> VoidTy,
>> -                                            Int32PtrTy, Int32PtrTy,
>> Int32Ty,
>> -                                            nullptr);
>> +                                            Int32PtrTy, Int32PtrTy,
>> Int32Ty);
>>        Function *Fn = cast<Function>(CF);
>>        Fn->setLinkage(Function::ExternalLinkage);
>>
>>
>> Modified: llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/
>> Mips/Mips16HardFloat.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp (original)
>> +++ llvm/trunk/lib/Target/Mips/Mips16HardFloat.cpp Tue Apr 11 10:01:18
>> 2017
>> @@ -420,7 +420,7 @@ static bool fixupFPReturnAndCall(Functio
>>                             Attribute::ReadNone);
>>          A = A.addAttribute(C, AttributeList::FunctionIndex,
>>                             Attribute::NoInline);
>> -        Value *F = (M->getOrInsertFunction(Name, A, MyVoid, T, nullptr));
>> +        Value *F = (M->getOrInsertFunction(Name, A, MyVoid, T));
>>          CallInst::Create(F, Params, "", &I);
>>        } else if (const CallInst *CI = dyn_cast<CallInst>(&I)) {
>>          FunctionType *FT = CI->getFunctionType();
>>
>> Modified: llvm/trunk/lib/Target/X86/X86ISelLowering.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/
>> X86/X86ISelLowering.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Target/X86/X86ISelLowering.cpp (original)
>> +++ llvm/trunk/lib/Target/X86/X86ISelLowering.cpp Tue Apr 11 10:01:18
>> 2017
>> @@ -2101,7 +2101,7 @@ void X86TargetLowering::insertSSPDeclara
>>      auto *SecurityCheckCookie = cast<Function>(
>>          M.getOrInsertFunction("__security_check_cookie",
>>                                Type::getVoidTy(M.getContext()),
>> -                              Type::getInt8PtrTy(M.getContext()),
>> nullptr));
>> +                              Type::getInt8PtrTy(M.getContext())));
>>      SecurityCheckCookie->setCallingConv(CallingConv::X86_FastCall);
>>      SecurityCheckCookie->addAttribute(1, Attribute::AttrKind::InReg);
>>      return;
>>
>> Modified: llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/IPO/CrossDSOCFI.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp (original)
>> +++ llvm/trunk/lib/Transforms/IPO/CrossDSOCFI.cpp Tue Apr 11 10:01:18
>> 2017
>> @@ -98,7 +98,7 @@ void CrossDSOCFI::buildCFICheck(Module &
>>    LLVMContext &Ctx = M.getContext();
>>    Constant *C = M.getOrInsertFunction(
>>        "__cfi_check", Type::getVoidTy(Ctx), Type::getInt64Ty(Ctx),
>> -      Type::getInt8PtrTy(Ctx), Type::getInt8PtrTy(Ctx), nullptr);
>> +      Type::getInt8PtrTy(Ctx), Type::getInt8PtrTy(Ctx));
>>    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 &
>>    IRBuilder<> IRBFail(TrapBB);
>>    Constant *CFICheckFailFn = M.getOrInsertFunction(
>>        "__cfi_check_fail", Type::getVoidTy(Ctx), Type::getInt8PtrTy(Ctx),
>> -      Type::getInt8PtrTy(Ctx), nullptr);
>> +      Type::getInt8PtrTy(Ctx));
>>    IRBFail.CreateCall(CFICheckFailFn, {&CFICheckFailData, &Addr});
>>    IRBFail.CreateBr(ExitBB);
>>
>>
>> Modified: llvm/trunk/lib/Transforms/IPO/WholeProgramDevirt.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/IPO/
>> WholeProgramDevirt.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/IPO/WholeProgramDevirt.cpp (original)
>> +++ llvm/trunk/lib/Transforms/IPO/WholeProgramDevirt.cpp Tue Apr 11
>> 10:01:18 2017
>> @@ -1221,7 +1221,7 @@ void DevirtModule::importResolution(VTab
>>      // 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()), nullptr);
>> +        Res.SingleImplName, Type::getVoidTy(M.getContext()));
>>
>>      // This is the import phase so we should not be exporting anything.
>>      bool IsExported = false;
>>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/Instrumentation/AddressSanitizer.cpp?rev=
>> 299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>> (original)
>> +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Tue
>> Apr 11 10:01:18 2017
>> @@ -1568,31 +1568,31 @@ void AddressSanitizerModule::initializeC
>>
>>    // Declare our poisoning and unpoisoning functions.
>>    AsanPoisonGlobals = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      kAsanPoisonGlobalsName, IRB.getVoidTy(), IntptrTy, nullptr));
>> +      kAsanPoisonGlobalsName, IRB.getVoidTy(), IntptrTy));
>>    AsanPoisonGlobals->setLinkage(Function::ExternalLinkage);
>>    AsanUnpoisonGlobals = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      kAsanUnpoisonGlobalsName, IRB.getVoidTy(), nullptr));
>> +      kAsanUnpoisonGlobalsName, IRB.getVoidTy()));
>>    AsanUnpoisonGlobals->setLinkage(Function::ExternalLinkage);
>>
>>    // Declare functions that register/unregister globals.
>>    AsanRegisterGlobals = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      kAsanRegisterGlobalsName, IRB.getVoidTy(), IntptrTy, IntptrTy,
>> nullptr));
>> +      kAsanRegisterGlobalsName, IRB.getVoidTy(), IntptrTy, IntptrTy));
>>    AsanRegisterGlobals->setLinkage(Function::ExternalLinkage);
>>    AsanUnregisterGlobals = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction(kAsanUnregisterGlobalsName, IRB.getVoidTy(),
>> -                            IntptrTy, IntptrTy, nullptr));
>> +                            IntptrTy, IntptrTy));
>>    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,
>> nullptr));
>> +          kAsanRegisterImageGlobalsName, IRB.getVoidTy(), IntptrTy));
>>    AsanRegisterImageGlobals->setLinkage(Function::ExternalLinkage);
>>
>>    AsanUnregisterImageGlobals =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          kAsanUnregisterImageGlobalsName, IRB.getVoidTy(), IntptrTy,
>> nullptr));
>> +          kAsanUnregisterImageGlobalsName, IRB.getVoidTy(), IntptrTy));
>>    AsanUnregisterImageGlobals->setLinkage(Function::ExternalLinkage);
>>  }
>>
>> @@ -1963,49 +1963,60 @@ void AddressSanitizer::initializeCallbac
>>        const std::string ExpStr = Exp ? "exp_" : "";
>>        const std::string SuffixStr = CompileKernel ? "N" : "_n";
>>        const std::string EndingStr = Recover ? "_noabort" : "";
>> -      Type *ExpType = Exp ? Type::getInt32Ty(*C) : nullptr;
>> -      AsanErrorCallbackSized[AccessIsWrite][Exp] =
>> -          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -              kAsanReportErrorTemplate + ExpStr + TypeStr + SuffixStr +
>> EndingStr,
>> -              IRB.getVoidTy(), IntptrTy, IntptrTy, ExpType, nullptr));
>> -      AsanMemoryAccessCallbackSized[AccessIsWrite][Exp] =
>> -          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -              ClMemoryAccessCallbackPrefix + ExpStr + TypeStr + "N" +
>> EndingStr,
>> -              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, nullptr));
>> -        AsanMemoryAccessCallback[AccessIsWrite][Exp][AccessSizeIndex] =
>> -            checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -                ClMemoryAccessCallbackPrefix + ExpStr + Suffix +
>> EndingStr,
>> -                IRB.getVoidTy(), IntptrTy, ExpType, nullptr));
>> +
>> +      SmallVector<Type *, 3> Args2 = {IntptrTy, IntptrTy};
>> +      SmallVector<Type *, 2> Args1{1, IntptrTy};
>> +      if (Exp) {
>> +        Type *ExpType = Type::getInt32Ty(*C);
>> +        Args2.push_back(ExpType);
>> +        Args1.push_back(ExpType);
>>        }
>> -    }
>> +           AsanErrorCallbackSized[AccessIsWrite][Exp] =
>> +               checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> +                   kAsanReportErrorTemplate + ExpStr + TypeStr +
>> SuffixStr +
>> +                       EndingStr,
>> +                   FunctionType::get(IRB.getVoidTy(), Args2, false)));
>> +
>> +           AsanMemoryAccessCallbackSized[AccessIsWrite][Exp] =
>> +               checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> +                   ClMemoryAccessCallbackPrefix + ExpStr + TypeStr + "N"
>> + EndingStr,
>> +                   FunctionType::get(IRB.getVoidTy(), Args2, false)));
>> +
>> +           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,
>> +                     FunctionType::get(IRB.getVoidTy(), Args1, false)));
>> +
>> +             AsanMemoryAccessCallback[AccessIsWrite][Exp][AccessSizeIndex]
>> =
>> +                 checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> +                     ClMemoryAccessCallbackPrefix + ExpStr + Suffix +
>> EndingStr,
>> +                     FunctionType::get(IRB.getVoidTy(), Args1, false)));
>> +           }
>> +         }
>>    }
>>
>>    const std::string MemIntrinCallbackPrefix =
>>        CompileKernel ? std::string("") : ClMemoryAccessCallbackPrefix;
>>    AsanMemmove = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>>        MemIntrinCallbackPrefix + "memmove", IRB.getInt8PtrTy(),
>> -      IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +      IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy));
>>    AsanMemcpy = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>>        MemIntrinCallbackPrefix + "memcpy", IRB.getInt8PtrTy(),
>> -      IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +      IRB.getInt8PtrTy(), IRB.getInt8PtrTy(), IntptrTy));
>>    AsanMemset = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>>        MemIntrinCallbackPrefix + "memset", IRB.getInt8PtrTy(),
>> -      IRB.getInt8PtrTy(), IRB.getInt32Ty(), IntptrTy, nullptr));
>> +      IRB.getInt8PtrTy(), IRB.getInt32Ty(), IntptrTy));
>>
>>    AsanHandleNoReturnFunc = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction(kAsanHandleNoReturnName, IRB.getVoidTy(),
>> nullptr));
>> +      M.getOrInsertFunction(kAsanHandleNoReturnName, IRB.getVoidTy()));
>>
>>    AsanPtrCmpFunction = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      kAsanPtrCmp, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
>> +      kAsanPtrCmp, IRB.getVoidTy(), IntptrTy, IntptrTy));
>>    AsanPtrSubFunction = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      kAsanPtrSub, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
>> +      kAsanPtrSub, IRB.getVoidTy(), IntptrTy, IntptrTy));
>>    // 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 +2253,18 @@ void FunctionStackPoisoner::initializeCa
>>      std::string Suffix = itostr(i);
>>      AsanStackMallocFunc[i] = checkSanitizerInterfaceFunction(
>>          M.getOrInsertFunction(kAsanStackMallocNameTemplate + Suffix,
>> IntptrTy,
>> -                              IntptrTy, nullptr));
>> +                              IntptrTy));
>>      AsanStackFreeFunc[i] = checkSanitizerInterfaceFunction(
>>          M.getOrInsertFunction(kAsanStackFreeNameTemplate + Suffix,
>> -                              IRB.getVoidTy(), IntptrTy, IntptrTy,
>> nullptr));
>> +                              IRB.getVoidTy(), IntptrTy, IntptrTy));
>>    }
>>    if (ASan.UseAfterScope) {
>>      AsanPoisonStackMemoryFunc = checkSanitizerInterfaceFunction(
>>          M.getOrInsertFunction(kAsanPoisonStackMemoryName,
>> IRB.getVoidTy(),
>> -                              IntptrTy, IntptrTy, nullptr));
>> +                              IntptrTy, IntptrTy));
>>      AsanUnpoisonStackMemoryFunc = checkSanitizerInterfaceFunction(
>>          M.getOrInsertFunction(kAsanUnpoisonStackMemoryName,
>> IRB.getVoidTy(),
>> -                              IntptrTy, IntptrTy, nullptr));
>> +                              IntptrTy, IntptrTy));
>>    }
>>
>>    for (size_t Val : {0x00, 0xf1, 0xf2, 0xf3, 0xf5, 0xf8}) {
>> @@ -2262,14 +2273,14 @@ void FunctionStackPoisoner::initializeCa
>>      Name << std::setw(2) << std::setfill('0') << std::hex << Val;
>>      AsanSetShadowFunc[Val] =
>>          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -            Name.str(), IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
>> +            Name.str(), IRB.getVoidTy(), IntptrTy, IntptrTy));
>>    }
>>
>>    AsanAllocaPoisonFunc = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      kAsanAllocaPoison, IRB.getVoidTy(), IntptrTy, IntptrTy, nullptr));
>> +      kAsanAllocaPoison, IRB.getVoidTy(), IntptrTy, IntptrTy));
>>    AsanAllocasUnpoisonFunc =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          kAsanAllocasUnpoison, IRB.getVoidTy(), IntptrTy, IntptrTy,
>> nullptr));
>> +          kAsanAllocasUnpoison, IRB.getVoidTy(), IntptrTy, IntptrTy));
>>  }
>>
>>  void FunctionStackPoisoner::copyToShadowInline(ArrayRef<uint8_t>
>> ShadowMask,
>>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/
>> EfficiencySanitizer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/Instrumentation/EfficiencySanitizer.cpp?rev=
>> 299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp
>> (original)
>> +++ llvm/trunk/lib/Transforms/Instrumentation/EfficiencySanitizer.cpp
>> Tue Apr 11 10:01:18 2017
>> @@ -267,35 +267,35 @@ void EfficiencySanitizer::initializeCall
>>      SmallString<32> AlignedLoadName("__esan_aligned_load" +
>> ByteSizeStr);
>>      EsanAlignedLoad[Idx] =
>>          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -            AlignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy(),
>> nullptr));
>> +            AlignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>      SmallString<32> AlignedStoreName("__esan_aligned_store" +
>> ByteSizeStr);
>>      EsanAlignedStore[Idx] =
>>          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -            AlignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy(),
>> nullptr));
>> +            AlignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>      SmallString<32> UnalignedLoadName("__esan_unaligned_load" +
>> ByteSizeStr);
>>      EsanUnalignedLoad[Idx] =
>>          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -            UnalignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy(),
>> nullptr));
>> +            UnalignedLoadName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>      SmallString<32> UnalignedStoreName("__esan_unaligned_store" +
>> ByteSizeStr);
>>      EsanUnalignedStore[Idx] =
>>          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -            UnalignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy(),
>> nullptr));
>> +            UnalignedStoreName, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>    }
>>    EsanUnalignedLoadN = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("__esan_unaligned_loadN", IRB.getVoidTy(),
>> -                            IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +                            IRB.getInt8PtrTy(), IntptrTy));
>>    EsanUnalignedStoreN = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("__esan_unaligned_storeN", IRB.getVoidTy(),
>> -                            IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +                            IRB.getInt8PtrTy(), IntptrTy));
>>    MemmoveFn = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("memmove", IRB.getInt8PtrTy(),
>> IRB.getInt8PtrTy(),
>> -                            IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +                            IRB.getInt8PtrTy(), IntptrTy));
>>    MemcpyFn = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("memcpy", IRB.getInt8PtrTy(),
>> IRB.getInt8PtrTy(),
>> -                            IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +                            IRB.getInt8PtrTy(), IntptrTy));
>>    MemsetFn = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("memset", IRB.getInt8PtrTy(),
>> IRB.getInt8PtrTy(),
>> -                            IRB.getInt32Ty(), IntptrTy, nullptr));
>> +                            IRB.getInt32Ty(), IntptrTy));
>>  }
>>
>>  bool EfficiencySanitizer::shouldIgnoreStructType(StructType *StructTy) {
>> @@ -533,7 +533,7 @@ void EfficiencySanitizer::createDestruct
>>    IRBuilder<> IRB_Dtor(EsanDtorFunction->getEntryBlock().getTerminator(
>> ));
>>    Function *EsanExit = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction(EsanExitName, IRB_Dtor.getVoidTy(),
>> -                            Int8PtrTy, nullptr));
>> +                            Int8PtrTy));
>>    EsanExit->setLinkage(Function::ExternalLinkage);
>>    IRB_Dtor.CreateCall(EsanExit, {ToolInfoArg});
>>    appendToGlobalDtors(M, EsanDtorFunction, EsanCtorAndDtorPriority);
>>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/Instrumentation/MemorySanitizer.cpp?rev=
>> 299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp
>> (original)
>> +++ llvm/trunk/lib/Transforms/Instrumentation/MemorySanitizer.cpp Tue
>> Apr 11 10:01:18 2017
>> @@ -425,7 +425,7 @@ void MemorySanitizer::initializeCallback
>>    // which is not yet implemented.
>>    StringRef WarningFnName = Recover ? "__msan_warning"
>>                                      : "__msan_warning_noreturn";
>> -  WarningFn = M.getOrInsertFunction(WarningFnName, IRB.getVoidTy(),
>> nullptr);
>> +  WarningFn = M.getOrInsertFunction(WarningFnName, IRB.getVoidTy());
>>
>>    for (size_t AccessSizeIndex = 0; AccessSizeIndex <
>> kNumberOfAccessSizes;
>>         AccessSizeIndex++) {
>> @@ -433,31 +433,31 @@ void MemorySanitizer::initializeCallback
>>      std::string FunctionName = "__msan_maybe_warning_" +
>> itostr(AccessSize);
>>      MaybeWarningFn[AccessSizeIndex] = M.getOrInsertFunction(
>>          FunctionName, IRB.getVoidTy(), IRB.getIntNTy(AccessSize * 8),
>> -        IRB.getInt32Ty(), nullptr);
>> +        IRB.getInt32Ty());
>>
>>      FunctionName = "__msan_maybe_store_origin_" + itostr(AccessSize);
>>      MaybeStoreOriginFn[AccessSizeIndex] = M.getOrInsertFunction(
>>          FunctionName, IRB.getVoidTy(), IRB.getIntNTy(AccessSize * 8),
>> -        IRB.getInt8PtrTy(), IRB.getInt32Ty(), nullptr);
>> +        IRB.getInt8PtrTy(), IRB.getInt32Ty());
>>    }
>>
>>    MsanSetAllocaOrigin4Fn = M.getOrInsertFunction(
>>      "__msan_set_alloca_origin4", IRB.getVoidTy(), IRB.getInt8PtrTy(),
>> IntptrTy,
>> -    IRB.getInt8PtrTy(), IntptrTy, nullptr);
>> +    IRB.getInt8PtrTy(), IntptrTy);
>>    MsanPoisonStackFn =
>>        M.getOrInsertFunction("__msan_poison_stack", IRB.getVoidTy(),
>> -                            IRB.getInt8PtrTy(), IntptrTy, nullptr);
>> +                            IRB.getInt8PtrTy(), IntptrTy);
>>    MsanChainOriginFn = M.getOrInsertFunction(
>> -    "__msan_chain_origin", IRB.getInt32Ty(), IRB.getInt32Ty(), nullptr);
>> +    "__msan_chain_origin", IRB.getInt32Ty(), IRB.getInt32Ty());
>>    MemmoveFn = M.getOrInsertFunction(
>>      "__msan_memmove", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
>> -    IRB.getInt8PtrTy(), IntptrTy, nullptr);
>> +    IRB.getInt8PtrTy(), IntptrTy);
>>    MemcpyFn = M.getOrInsertFunction(
>>      "__msan_memcpy", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
>> IRB.getInt8PtrTy(),
>> -    IntptrTy, nullptr);
>> +    IntptrTy);
>>    MemsetFn = M.getOrInsertFunction(
>>      "__msan_memset", IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
>> IRB.getInt32Ty(),
>> -    IntptrTy, nullptr);
>> +    IntptrTy);
>>
>>    // Create globals.
>>    RetvalTLS = new GlobalVariable(
>>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/Instrumentation/SanitizerCoverage.cpp?rev=
>> 299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
>> (original)
>> +++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Tue
>> Apr 11 10:01:18 2017
>> @@ -262,39 +262,39 @@ bool SanitizerCoverageModule::runOnModul
>>    Int32Ty = IRB.getInt32Ty();
>>
>>    SanCovFunction = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction(SanCovName, VoidTy, Int32PtrTy, nullptr));
>> +      M.getOrInsertFunction(SanCovName, VoidTy, Int32PtrTy));
>>    SanCovWithCheckFunction = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction(SanCovWithCheckName, VoidTy, Int32PtrTy,
>> nullptr));
>> +      M.getOrInsertFunction(SanCovWithCheckName, VoidTy, Int32PtrTy));
>>    SanCovTracePCIndir = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction(SanCovTracePCIndirName, VoidTy, IntptrTy,
>> nullptr));
>> +      M.getOrInsertFunction(SanCovTracePCIndirName, VoidTy, IntptrTy));
>>    SanCovIndirCallFunction =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          SanCovIndirCallName, VoidTy, IntptrTy, IntptrTy, nullptr));
>> +          SanCovIndirCallName, VoidTy, IntptrTy, IntptrTy));
>>    SanCovTraceCmpFunction[0] =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          SanCovTraceCmp1, VoidTy, IRB.getInt8Ty(), IRB.getInt8Ty(),
>> nullptr));
>> +          SanCovTraceCmp1, VoidTy, IRB.getInt8Ty(), IRB.getInt8Ty()));
>>    SanCovTraceCmpFunction[1] = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction(SanCovTraceCmp2, VoidTy, IRB.getInt16Ty(),
>> -                            IRB.getInt16Ty(), nullptr));
>> +                            IRB.getInt16Ty()));
>>    SanCovTraceCmpFunction[2] = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction(SanCovTraceCmp4, VoidTy, IRB.getInt32Ty(),
>> -                            IRB.getInt32Ty(), nullptr));
>> +                            IRB.getInt32Ty()));
>>    SanCovTraceCmpFunction[3] =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          SanCovTraceCmp8, VoidTy, Int64Ty, Int64Ty, nullptr));
>> +          SanCovTraceCmp8, VoidTy, Int64Ty, Int64Ty));
>>
>>    SanCovTraceDivFunction[0] =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          SanCovTraceDiv4, VoidTy, IRB.getInt32Ty(), nullptr));
>> +          SanCovTraceDiv4, VoidTy, IRB.getInt32Ty()));
>>    SanCovTraceDivFunction[1] =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          SanCovTraceDiv8, VoidTy, Int64Ty, nullptr));
>> +          SanCovTraceDiv8, VoidTy, Int64Ty));
>>    SanCovTraceGepFunction =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          SanCovTraceGep, VoidTy, IntptrTy, nullptr));
>> +          SanCovTraceGep, VoidTy, IntptrTy));
>>    SanCovTraceSwitchFunction =
>>        checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -          SanCovTraceSwitchName, VoidTy, Int64Ty, Int64PtrTy, nullptr));
>> +          SanCovTraceSwitchName, VoidTy, Int64Ty, Int64PtrTy));
>>
>>    // 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::runOnModul
>>                              /*hasSideEffects=*/true);
>>
>>    SanCovTracePC = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction(SanCovTracePCName, VoidTy, nullptr));
>> +      M.getOrInsertFunction(SanCovTracePCName, VoidTy));
>>    SanCovTracePCGuard = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      SanCovTracePCGuardName, VoidTy, Int32PtrTy, nullptr));
>> +      SanCovTracePCGuardName, VoidTy, Int32PtrTy));
>>    SanCovTraceEnter = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction(SanCovTraceEnterName, VoidTy, Int32PtrTy,
>> nullptr));
>> +      M.getOrInsertFunction(SanCovTraceEnterName, VoidTy, Int32PtrTy));
>>    SanCovTraceBB = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction(SanCovTraceBBName, VoidTy, Int32PtrTy,
>> nullptr));
>> +      M.getOrInsertFunction(SanCovTraceBBName, VoidTy, Int32PtrTy));
>>
>>    // At this point we create a dummy array of guards because we don't
>>    // know how many elements we will need.
>>
>> Modified: llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/Instrumentation/ThreadSanitizer.cpp?rev=
>> 299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp
>> (original)
>> +++ llvm/trunk/lib/Transforms/Instrumentation/ThreadSanitizer.cpp Tue
>> Apr 11 10:01:18 2017
>> @@ -160,13 +160,13 @@ void ThreadSanitizer::initializeCallback
>>                             Attribute::NoUnwind);
>>    // Initialize the callbacks.
>>    TsanFuncEntry = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -      "__tsan_func_entry", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(),
>> nullptr));
>> +      "__tsan_func_entry", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>    TsanFuncExit = checkSanitizerInterfaceFunction(
>> -      M.getOrInsertFunction("__tsan_func_exit", Attr, IRB.getVoidTy(),
>> nullptr));
>> +      M.getOrInsertFunction("__tsan_func_exit", Attr, IRB.getVoidTy()));
>>    TsanIgnoreBegin = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      "__tsan_ignore_thread_begin", Attr, IRB.getVoidTy(), nullptr));
>> +      "__tsan_ignore_thread_begin", Attr, IRB.getVoidTy()));
>>    TsanIgnoreEnd = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -      "__tsan_ignore_thread_end", Attr, IRB.getVoidTy(), nullptr));
>> +      "__tsan_ignore_thread_end", Attr, IRB.getVoidTy()));
>>    OrdTy = IRB.getInt32Ty();
>>    for (size_t i = 0; i < kNumberOfAccessSizes; ++i) {
>>      const unsigned ByteSize = 1U << i;
>> @@ -175,31 +175,31 @@ void ThreadSanitizer::initializeCallback
>>      std::string BitSizeStr = utostr(BitSize);
>>      SmallString<32> ReadName("__tsan_read" + ByteSizeStr);
>>      TsanRead[i] = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -        ReadName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
>> +        ReadName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>
>>      SmallString<32> WriteName("__tsan_write" + ByteSizeStr);
>>      TsanWrite[i] = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -        WriteName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(), nullptr));
>> +        WriteName, Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>
>>      SmallString<64> UnalignedReadName("__tsan_unaligned_read" +
>> ByteSizeStr);
>>      TsanUnalignedRead[i] =
>>          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -            UnalignedReadName, Attr, IRB.getVoidTy(),
>> IRB.getInt8PtrTy(), nullptr));
>> +            UnalignedReadName, Attr, IRB.getVoidTy(),
>> IRB.getInt8PtrTy()));
>>
>>      SmallString<64> UnalignedWriteName("__tsan_unaligned_write" +
>> ByteSizeStr);
>>      TsanUnalignedWrite[i] =
>>          checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -            UnalignedWriteName, Attr, IRB.getVoidTy(),
>> IRB.getInt8PtrTy(), nullptr));
>> +            UnalignedWriteName, Attr, IRB.getVoidTy(),
>> IRB.getInt8PtrTy()));
>>
>>      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,
>> nullptr));
>> +        M.getOrInsertFunction(AtomicLoadName, Attr, Ty, PtrTy, OrdTy));
>>
>>      SmallString<32> AtomicStoreName("__tsan_atomic" + BitSizeStr +
>> "_store");
>>      TsanAtomicStore[i] = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -        AtomicStoreName, Attr, IRB.getVoidTy(), PtrTy, Ty, OrdTy,
>> nullptr));
>> +        AtomicStoreName, Attr, IRB.getVoidTy(), PtrTy, Ty, OrdTy));
>>
>>      for (int op = AtomicRMWInst::FIRST_BINOP;
>>          op <= AtomicRMWInst::LAST_BINOP; ++op) {
>> @@ -223,33 +223,33 @@ void ThreadSanitizer::initializeCallback
>>          continue;
>>        SmallString<32> RMWName("__tsan_atomic" + itostr(BitSize) +
>> NamePart);
>>        TsanAtomicRMW[op][i] = checkSanitizerInterfaceFunction(
>> -          M.getOrInsertFunction(RMWName, Attr, Ty, PtrTy, Ty, OrdTy,
>> nullptr));
>> +          M.getOrInsertFunction(RMWName, Attr, Ty, PtrTy, Ty, OrdTy));
>>      }
>>
>>      SmallString<32> AtomicCASName("__tsan_atomic" + BitSizeStr +
>>                                    "_compare_exchange_val");
>>      TsanAtomicCAS[i] = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -        AtomicCASName, Attr, Ty, PtrTy, Ty, Ty, OrdTy, OrdTy, nullptr));
>> +        AtomicCASName, Attr, Ty, PtrTy, Ty, Ty, OrdTy, OrdTy));
>>    }
>>    TsanVptrUpdate = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("__tsan_vptr_update", Attr, IRB.getVoidTy(),
>> -                            IRB.getInt8PtrTy(), IRB.getInt8PtrTy(),
>> nullptr));
>> +                            IRB.getInt8PtrTy(), IRB.getInt8PtrTy()));
>>    TsanVptrLoad = checkSanitizerInterfaceFunction(M.getOrInsertFunction(
>> -      "__tsan_vptr_read", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy(),
>> nullptr));
>> +      "__tsan_vptr_read", Attr, IRB.getVoidTy(), IRB.getInt8PtrTy()));
>>    TsanAtomicThreadFence = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      "__tsan_atomic_thread_fence", Attr, IRB.getVoidTy(), OrdTy,
>> nullptr));
>> +      "__tsan_atomic_thread_fence", Attr, IRB.getVoidTy(), OrdTy));
>>    TsanAtomicSignalFence = checkSanitizerInterfaceFunctio
>> n(M.getOrInsertFunction(
>> -      "__tsan_atomic_signal_fence", Attr, IRB.getVoidTy(), OrdTy,
>> nullptr));
>> +      "__tsan_atomic_signal_fence", Attr, IRB.getVoidTy(), OrdTy));
>>
>>    MemmoveFn = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("memmove", Attr, IRB.getInt8PtrTy(),
>> IRB.getInt8PtrTy(),
>> -                            IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +                            IRB.getInt8PtrTy(), IntptrTy));
>>    MemcpyFn = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("memcpy", Attr, IRB.getInt8PtrTy(),
>> IRB.getInt8PtrTy(),
>> -                            IRB.getInt8PtrTy(), IntptrTy, nullptr));
>> +                            IRB.getInt8PtrTy(), IntptrTy));
>>    MemsetFn = checkSanitizerInterfaceFunction(
>>        M.getOrInsertFunction("memset", Attr, IRB.getInt8PtrTy(),
>> IRB.getInt8PtrTy(),
>> -                            IRB.getInt32Ty(), IntptrTy, nullptr));
>> +                            IRB.getInt32Ty(), IntptrTy));
>>  }
>>
>>  bool ThreadSanitizer::doInitialization(Module &M) {
>>
>> Modified: llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/
>> Transforms/Scalar/LoopIdiomRecognize.cpp?rev=299949&r1=299948&r2=299949&
>> view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Scalar/LoopIdiomRecognize.cpp Tue Apr 11
>> 10:01:18 2017
>> @@ -823,7 +823,7 @@ bool LoopIdiomRecognize::processLoopStri
>>      Module *M = TheStore->getModule();
>>      Value *MSP =
>>          M->getOrInsertFunction("memset_pattern16", Builder.getVoidTy(),
>> -                               Int8PtrTy, Int8PtrTy, IntPtr, (void
>> *)nullptr);
>> +                               Int8PtrTy, Int8PtrTy, IntPtr);
>>      inferLibFuncAttributes(*M->getFunction("memset_pattern16"), *TLI);
>>
>>      // Otherwise we should form a memset_pattern16.  PatternValue is
>> known to be
>>
>> Modified: llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/
>> BuildLibCalls.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Utils/BuildLibCalls.cpp Tue Apr 11
>> 10:01:18 2017
>> @@ -723,7 +723,7 @@ Value *llvm::emitStrLen(Value *Ptr, IRBu
>>    Module *M = B.GetInsertBlock()->getModule();
>>    LLVMContext &Context = B.GetInsertBlock()->getContext();
>>    Constant *StrLen = M->getOrInsertFunction("strlen",
>> DL.getIntPtrType(Context),
>> -                                            B.getInt8PtrTy(), nullptr);
>> +                                            B.getInt8PtrTy());
>>    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
>>    Type *I8Ptr = B.getInt8PtrTy();
>>    Type *I32Ty = B.getInt32Ty();
>>    Constant *StrChr =
>> -      M->getOrInsertFunction("strchr", I8Ptr, I8Ptr, I32Ty, nullptr);
>> +      M->getOrInsertFunction("strchr", I8Ptr, I8Ptr, I32Ty);
>>    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, Va
>>    LLVMContext &Context = B.GetInsertBlock()->getContext();
>>    Value *StrNCmp = M->getOrInsertFunction("strncmp", B.getInt32Ty(),
>>                                            B.getInt8PtrTy(),
>> B.getInt8PtrTy(),
>> -                                          DL.getIntPtrType(Context),
>> nullptr);
>> +                                          DL.getIntPtrType(Context));
>>    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, Valu
>>
>>    Module *M = B.GetInsertBlock()->getModule();
>>    Type *I8Ptr = B.getInt8PtrTy();
>> -  Value *StrCpy = M->getOrInsertFunction(Name, I8Ptr, I8Ptr, I8Ptr,
>> nullptr);
>> +  Value *StrCpy = M->getOrInsertFunction(Name, I8Ptr, I8Ptr, I8Ptr);
>>    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, Val
>>    Module *M = B.GetInsertBlock()->getModule();
>>    Type *I8Ptr = B.getInt8PtrTy();
>>    Value *StrNCpy = M->getOrInsertFunction(Name, I8Ptr, I8Ptr, I8Ptr,
>> -                                          Len->getType(), nullptr);
>> +                                          Len->getType());
>>    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, V
>>    Value *MemCpy = M->getOrInsertFunction(
>>        "__memcpy_chk", AttributeList::get(M->getContext(), AS),
>> B.getInt8PtrTy(),
>>        B.getInt8PtrTy(), B.getInt8PtrTy(), DL.getIntPtrType(Context),
>> -      DL.getIntPtrType(Context), nullptr);
>> +      DL.getIntPtrType(Context));
>>    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, Valu
>>    LLVMContext &Context = B.GetInsertBlock()->getContext();
>>    Value *MemChr = M->getOrInsertFunction("memchr", B.getInt8PtrTy(),
>>                                           B.getInt8PtrTy(),
>> B.getInt32Ty(),
>> -                                         DL.getIntPtrType(Context),
>> nullptr);
>> +                                         DL.getIntPtrType(Context));
>>    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, Val
>>    LLVMContext &Context = B.GetInsertBlock()->getContext();
>>    Value *MemCmp = M->getOrInsertFunction("memcmp", B.getInt32Ty(),
>>                                           B.getInt8PtrTy(),
>> B.getInt8PtrTy(),
>> -                                         DL.getIntPtrType(Context),
>> nullptr);
>> +                                         DL.getIntPtrType(Context));
>>    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
>>
>>    Module *M = B.GetInsertBlock()->getModule();
>>    Value *Callee = M->getOrInsertFunction(Name, Op->getType(),
>> -                                         Op->getType(), nullptr);
>> +                                         Op->getType());
>>    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
>>
>>    Module *M = B.GetInsertBlock()->getModule();
>>    Value *Callee = M->getOrInsertFunction(Name, Op1->getType(),
>> Op1->getType(),
>> -                                         Op2->getType(), nullptr);
>> +                                         Op2->getType());
>>    CallInst *CI = B.CreateCall(Callee, {Op1, Op2}, Name);
>>    CI->setAttributes(Attrs);
>>    if (const Function *F = dyn_cast<Function>(Callee->
>> stripPointerCasts()))
>> @@ -918,8 +918,7 @@ Value *llvm::emitPutChar(Value *Char, IR
>>      return nullptr;
>>
>>    Module *M = B.GetInsertBlock()->getModule();
>> -  Value *PutChar = M->getOrInsertFunction("putchar", B.getInt32Ty(),
>> -                                          B.getInt32Ty(), nullptr);
>> +  Value *PutChar = M->getOrInsertFunction("putchar", B.getInt32Ty(),
>> B.getInt32Ty());
>>    inferLibFuncAttributes(*M->getFunction("putchar"), *TLI);
>>    CallInst *CI = B.CreateCall(PutChar,
>>                                B.CreateIntCast(Char,
>> @@ -940,7 +939,7 @@ Value *llvm::emitPutS(Value *Str, IRBuil
>>
>>    Module *M = B.GetInsertBlock()->getModule();
>>    Value *PutS =
>> -      M->getOrInsertFunction("puts", B.getInt32Ty(), B.getInt8PtrTy(),
>> nullptr);
>> +      M->getOrInsertFunction("puts", B.getInt32Ty(), B.getInt8PtrTy());
>>    inferLibFuncAttributes(*M->getFunction("puts"), *TLI);
>>    CallInst *CI = B.CreateCall(PutS, castToCStr(Str, B), "puts");
>>    if (const Function *F = dyn_cast<Function>(PutS->stripPointerCasts()))
>> @@ -955,7 +954,7 @@ Value *llvm::emitFPutC(Value *Char, Valu
>>
>>    Module *M = B.GetInsertBlock()->getModule();
>>    Constant *F = M->getOrInsertFunction("fputc", B.getInt32Ty(),
>> B.getInt32Ty(),
>> -                                       File->getType(), nullptr);
>> +                                       File->getType());
>>    if (File->getType()->isPointerTy())
>>      inferLibFuncAttributes(*M->getFunction("fputc"), *TLI);
>>    Char = B.CreateIntCast(Char, B.getInt32Ty(), /*isSigned*/true,
>> @@ -975,7 +974,7 @@ Value *llvm::emitFPutS(Value *Str, Value
>>    Module *M = B.GetInsertBlock()->getModule();
>>    StringRef FPutsName = TLI->getName(LibFunc_fputs);
>>    Constant *F = M->getOrInsertFunction(
>> -      FPutsName, B.getInt32Ty(), B.getInt8PtrTy(), File->getType(),
>> nullptr);
>> +      FPutsName, B.getInt32Ty(), B.getInt8PtrTy(), File->getType());
>>    if (File->getType()->isPointerTy())
>>      inferLibFuncAttributes(*M->getFunction(FPutsName), *TLI);
>>    CallInst *CI = B.CreateCall(F, {castToCStr(Str, B), File}, "fputs");
>> @@ -995,8 +994,8 @@ Value *llvm::emitFWrite(Value *Ptr, Valu
>>    StringRef FWriteName = TLI->getName(LibFunc_fwrite);
>>    Constant *F = M->getOrInsertFunction(
>>        FWriteName, DL.getIntPtrType(Context), B.getInt8PtrTy(),
>> -      DL.getIntPtrType(Context), DL.getIntPtrType(Context),
>> File->getType(),
>> -      nullptr);
>> +      DL.getIntPtrType(Context), DL.getIntPtrType(Context),
>> File->getType());
>> +
>>    if (File->getType()->isPointerTy())
>>      inferLibFuncAttributes(*M->getFunction(FWriteName), *TLI);
>>    CallInst *CI =
>>
>> Modified: llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/
>> SimplifyLibCalls.cpp?rev=299949&r1=299948&r2=299949&view=diff
>> ============================================================
>> ==================
>> --- llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp (original)
>> +++ llvm/trunk/lib/Transforms/Utils/SimplifyLibCalls.cpp Tue Apr 11
>> 10:01:18 2017
>> @@ -819,7 +819,7 @@ static Value *emitCalloc(Value *Num, Val
>>    const DataLayout &DL = M->getDataLayout();
>>    IntegerType *PtrType = DL.getIntPtrType((B.
>> GetInsertBlock()->getContext()));
>>    Value *Calloc = M->getOrInsertFunction("calloc", Attrs,
>> B.getInt8PtrTy(),
>> -                                         PtrType, PtrType, nullptr);
>> +
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170424/28a22ed9/attachment-0001.html>


More information about the llvm-commits mailing list