diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-08-21 18:13:02 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-08-21 18:13:02 +0000 | 
| commit | 54db30ce18663e6c2991958f3b5d18362e8e93c4 (patch) | |
| tree | 4aa6442802570767398cc83ba484e97b1309bdc2 /contrib/llvm/lib/CodeGen/IntrinsicLowering.cpp | |
| parent | 35284c22e9c8348159b7ce032ea45f2cdeb65298 (diff) | |
| parent | e6d1592492a3a379186bfb02bd0f4eda0669c0d5 (diff) | |
Notes
Diffstat (limited to 'contrib/llvm/lib/CodeGen/IntrinsicLowering.cpp')
| -rw-r--r-- | contrib/llvm/lib/CodeGen/IntrinsicLowering.cpp | 115 | 
1 files changed, 6 insertions, 109 deletions
diff --git a/contrib/llvm/lib/CodeGen/IntrinsicLowering.cpp b/contrib/llvm/lib/CodeGen/IntrinsicLowering.cpp index 707113bd973b..8cbd8bcaeabb 100644 --- a/contrib/llvm/lib/CodeGen/IntrinsicLowering.cpp +++ b/contrib/llvm/lib/CodeGen/IntrinsicLowering.cpp @@ -1,9 +1,8 @@  //===-- IntrinsicLowering.cpp - Intrinsic Lowering default implementation -===//  // -//                     The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception  //  //===----------------------------------------------------------------------===//  // @@ -24,39 +23,6 @@  #include "llvm/Support/raw_ostream.h"  using namespace llvm; -template <class ArgIt> -static void EnsureFunctionExists(Module &M, const char *Name, -                                 ArgIt ArgBegin, ArgIt ArgEnd, -                                 Type *RetTy) { -  // Insert a correctly-typed definition now. -  std::vector<Type *> ParamTys; -  for (ArgIt I = ArgBegin; I != ArgEnd; ++I) -    ParamTys.push_back(I->getType()); -  M.getOrInsertFunction(Name, FunctionType::get(RetTy, ParamTys, false)); -} - -static void EnsureFPIntrinsicsExist(Module &M, Function &Fn, -                                    const char *FName, -                                    const char *DName, const char *LDName) { -  // Insert definitions for all the floating point types. -  switch((int)Fn.arg_begin()->getType()->getTypeID()) { -  case Type::FloatTyID: -    EnsureFunctionExists(M, FName, Fn.arg_begin(), Fn.arg_end(), -                         Type::getFloatTy(M.getContext())); -    break; -  case Type::DoubleTyID: -    EnsureFunctionExists(M, DName, Fn.arg_begin(), Fn.arg_end(), -                         Type::getDoubleTy(M.getContext())); -    break; -  case Type::X86_FP80TyID: -  case Type::FP128TyID: -  case Type::PPC_FP128TyID: -    EnsureFunctionExists(M, LDName, Fn.arg_begin(), Fn.arg_end(), -                         Fn.arg_begin()->getType()); -    break; -  } -} -  /// This function is used when we want to lower an intrinsic call to a call of  /// an external function. This handles hard cases such as when there was already  /// a prototype for the external function, but that prototype doesn't match the @@ -72,8 +38,8 @@ static CallInst *ReplaceCallWith(const char *NewFn, CallInst *CI,    std::vector<Type *> ParamTys;    for (ArgIt I = ArgBegin; I != ArgEnd; ++I)      ParamTys.push_back((*I)->getType()); -  Constant* FCache = M->getOrInsertFunction(NewFn, -                                  FunctionType::get(RetTy, ParamTys, false)); +  FunctionCallee FCache = +      M->getOrInsertFunction(NewFn, FunctionType::get(RetTy, ParamTys, false));    IRBuilder<> Builder(CI->getParent(), CI->getIterator());    SmallVector<Value *, 8> Args(ArgBegin, ArgEnd); @@ -92,75 +58,6 @@ static CallInst *ReplaceCallWith(const char *NewFn, CallInst *CI,  #  define setjmp_undefined_for_msvc  #endif -void IntrinsicLowering::AddPrototypes(Module &M) { -  LLVMContext &Context = M.getContext(); -  for (auto &F : M) -    if (F.isDeclaration() && !F.use_empty()) -      switch (F.getIntrinsicID()) { -      default: break; -      case Intrinsic::setjmp: -        EnsureFunctionExists(M, "setjmp", F.arg_begin(), F.arg_end(), -                             Type::getInt32Ty(M.getContext())); -        break; -      case Intrinsic::longjmp: -        EnsureFunctionExists(M, "longjmp", F.arg_begin(), F.arg_end(), -                             Type::getVoidTy(M.getContext())); -        break; -      case Intrinsic::siglongjmp: -        EnsureFunctionExists(M, "abort", F.arg_end(), F.arg_end(), -                             Type::getVoidTy(M.getContext())); -        break; -      case Intrinsic::memcpy: -        M.getOrInsertFunction("memcpy", -          Type::getInt8PtrTy(Context), -                              Type::getInt8PtrTy(Context), -                              Type::getInt8PtrTy(Context), -                              DL.getIntPtrType(Context)); -        break; -      case Intrinsic::memmove: -        M.getOrInsertFunction("memmove", -          Type::getInt8PtrTy(Context), -                              Type::getInt8PtrTy(Context), -                              Type::getInt8PtrTy(Context), -                              DL.getIntPtrType(Context)); -        break; -      case Intrinsic::memset: -        M.getOrInsertFunction("memset", -          Type::getInt8PtrTy(Context), -                              Type::getInt8PtrTy(Context), -                              Type::getInt32Ty(M.getContext()), -                              DL.getIntPtrType(Context)); -        break; -      case Intrinsic::sqrt: -        EnsureFPIntrinsicsExist(M, F, "sqrtf", "sqrt", "sqrtl"); -        break; -      case Intrinsic::sin: -        EnsureFPIntrinsicsExist(M, F, "sinf", "sin", "sinl"); -        break; -      case Intrinsic::cos: -        EnsureFPIntrinsicsExist(M, F, "cosf", "cos", "cosl"); -        break; -      case Intrinsic::pow: -        EnsureFPIntrinsicsExist(M, F, "powf", "pow", "powl"); -        break; -      case Intrinsic::log: -        EnsureFPIntrinsicsExist(M, F, "logf", "log", "logl"); -        break; -      case Intrinsic::log2: -        EnsureFPIntrinsicsExist(M, F, "log2f", "log2", "log2l"); -        break; -      case Intrinsic::log10: -        EnsureFPIntrinsicsExist(M, F, "log10f", "log10", "log10l"); -        break; -      case Intrinsic::exp: -        EnsureFPIntrinsicsExist(M, F, "expf", "exp", "expl"); -        break; -      case Intrinsic::exp2: -        EnsureFPIntrinsicsExist(M, F, "exp2f", "exp2", "exp2l"); -        break; -      } -} -  /// Emit the code to lower bswap of V before the specified instruction IP.  static Value *LowerBSWAP(LLVMContext &Context, Value *V, Instruction *IP) {    assert(V->getType()->isIntOrIntVectorTy() && "Can't bswap a non-integer type!"); @@ -601,7 +498,7 @@ bool IntrinsicLowering::LowerToByteSwap(CallInst *CI) {    // Okay, we can do this xform, do so now.    Module *M = CI->getModule(); -  Constant *Int = Intrinsic::getDeclaration(M, Intrinsic::bswap, Ty); +  Function *Int = Intrinsic::getDeclaration(M, Intrinsic::bswap, Ty);    Value *Op = CI->getArgOperand(0);    Op = CallInst::Create(Int, Op, CI->getName(), CI);  | 
