LLVM API Documentation
#include "llvm/CodeGen/IntrinsicLowering.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/IR/CallSite.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
Go to the source code of this file.
Functions | |
template<class ArgIt > | |
static void | EnsureFunctionExists (Module &M, const char *Name, ArgIt ArgBegin, ArgIt ArgEnd, Type *RetTy) |
static void | EnsureFPIntrinsicsExist (Module &M, Function *Fn, const char *FName, const char *DName, const char *LDName) |
template<class ArgIt > | |
static CallInst * | ReplaceCallWith (const char *NewFn, CallInst *CI, ArgIt ArgBegin, ArgIt ArgEnd, Type *RetTy) |
static Value * | LowerBSWAP (LLVMContext &Context, Value *V, Instruction *IP) |
static Value * | LowerCTPOP (LLVMContext &Context, Value *V, Instruction *IP) |
static Value * | LowerCTLZ (LLVMContext &Context, Value *V, Instruction *IP) |
static void | ReplaceFPIntrinsicWithCall (CallInst *CI, const char *Fname, const char *Dname, const char *LDname) |
static void EnsureFPIntrinsicsExist | ( | Module & | M, |
Function * | Fn, | ||
const char * | FName, | ||
const char * | DName, | ||
const char * | LDName | ||
) | [static] |
Definition at line 38 of file IntrinsicLowering.cpp.
References llvm::Function::arg_begin(), llvm::Function::arg_end(), llvm::Type::DoubleTyID, EnsureFunctionExists(), llvm::Type::FloatTyID, llvm::Type::FP128TyID, llvm::Module::getContext(), llvm::Type::getDoubleTy(), llvm::Type::getFloatTy(), llvm::Type::PPC_FP128TyID, and llvm::Type::X86_FP80TyID.
Referenced by llvm::IntrinsicLowering::AddPrototypes().
static void EnsureFunctionExists | ( | Module & | M, |
const char * | Name, | ||
ArgIt | ArgBegin, | ||
ArgIt | ArgEnd, | ||
Type * | RetTy | ||
) | [static] |
Definition at line 28 of file IntrinsicLowering.cpp.
References llvm::FunctionType::get(), llvm::Module::getOrInsertFunction(), and I.
Referenced by llvm::IntrinsicLowering::AddPrototypes(), and EnsureFPIntrinsicsExist().
static Value* LowerBSWAP | ( | LLVMContext & | Context, |
Value * | V, | ||
Instruction * | IP | ||
) | [static] |
LowerBSWAP - Emit the code to lower bswap of V before the specified instruction IP.
Definition at line 166 of file IntrinsicLowering.cpp.
References llvm::ConstantInt::get(), llvm::Type::getInt32Ty(), llvm::Type::getInt64Ty(), llvm::Instruction::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), llvm::Type::isIntegerTy(), and llvm_unreachable.
Referenced by llvm::IntrinsicLowering::LowerIntrinsicCall().
static Value* LowerCTLZ | ( | LLVMContext & | Context, |
Value * | V, | ||
Instruction * | IP | ||
) | [static] |
LowerCTLZ - Emit the code to lower ctlz of V before the specified instruction IP.
Definition at line 302 of file IntrinsicLowering.cpp.
References llvm::ConstantInt::get(), llvm::Instruction::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), and LowerCTPOP().
Referenced by llvm::IntrinsicLowering::LowerIntrinsicCall().
static Value* LowerCTPOP | ( | LLVMContext & | Context, |
Value * | V, | ||
Instruction * | IP | ||
) | [static] |
LowerCTPOP - Emit the code to lower ctpop of V before the specified instruction IP.
Definition at line 262 of file IntrinsicLowering.cpp.
References llvm::ConstantInt::get(), llvm::Instruction::getParent(), llvm::Type::getPrimitiveSizeInBits(), llvm::Value::getType(), and llvm::Type::isIntegerTy().
Referenced by LowerCTLZ(), and llvm::IntrinsicLowering::LowerIntrinsicCall().
static CallInst* ReplaceCallWith | ( | const char * | NewFn, |
CallInst * | CI, | ||
ArgIt | ArgBegin, | ||
ArgIt | ArgEnd, | ||
Type * | RetTy | ||
) | [static] |
ReplaceCallWith - 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, and if that prototype doesn't match the arguments we expect to pass in.
Definition at line 65 of file IntrinsicLowering.cpp.
References llvm::FunctionType::get(), llvm::Value::getName(), llvm::Module::getOrInsertFunction(), llvm::Instruction::getParent(), llvm::BasicBlock::getParent(), llvm::GlobalValue::getParent(), I, llvm::Value::replaceAllUsesWith(), llvm::Value::setName(), and llvm::Value::use_empty().
Referenced by llvm::IntrinsicLowering::LowerIntrinsicCall(), and ReplaceFPIntrinsicWithCall().
static void ReplaceFPIntrinsicWithCall | ( | CallInst * | CI, |
const char * | Fname, | ||
const char * | Dname, | ||
const char * | LDname | ||
) | [static] |
Definition at line 317 of file IntrinsicLowering.cpp.
References llvm::CallSiteBase< FunTy, ValTy, UserTy, InstrTy, CallTy, InvokeTy, IterTy >::arg_begin(), llvm::CallSiteBase< FunTy, ValTy, UserTy, InstrTy, CallTy, InvokeTy, IterTy >::arg_end(), llvm::Type::DoubleTyID, llvm::Type::FloatTyID, llvm::Type::FP128TyID, llvm::CallInst::getArgOperand(), llvm::Value::getContext(), llvm::Type::getDoubleTy(), llvm::Type::getFloatTy(), llvm::Value::getType(), llvm::Type::getTypeID(), llvm_unreachable, llvm::Type::PPC_FP128TyID, ReplaceCallWith(), and llvm::Type::X86_FP80TyID.
Referenced by llvm::IntrinsicLowering::LowerIntrinsicCall().