LLVM  8.0.1
Functions
IntrinsicLowering.cpp File Reference
#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"
Include dependency graph for IntrinsicLowering.cpp:

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 CallInstReplaceCallWith (const char *NewFn, CallInst *CI, ArgIt ArgBegin, ArgIt ArgEnd, Type *RetTy)
 This function is used when we want to lower an intrinsic call to a call of an external function. More...
 
static ValueLowerBSWAP (LLVMContext &Context, Value *V, Instruction *IP)
 Emit the code to lower bswap of V before the specified instruction IP. More...
 
static ValueLowerCTPOP (LLVMContext &Context, Value *V, Instruction *IP)
 Emit the code to lower ctpop of V before the specified instruction IP. More...
 
static ValueLowerCTLZ (LLVMContext &Context, Value *V, Instruction *IP)
 Emit the code to lower ctlz of V before the specified instruction IP. More...
 
static void ReplaceFPIntrinsicWithCall (CallInst *CI, const char *Fname, const char *Dname, const char *LDname)
 

Function Documentation

◆ EnsureFPIntrinsicsExist()

static void EnsureFPIntrinsicsExist ( Module M,
Function Fn,
const char FName,
const char DName,
const char LDName 
)
static

◆ EnsureFunctionExists()

template<class ArgIt >
static void EnsureFunctionExists ( Module M,
const char Name,
ArgIt  ArgBegin,
ArgIt  ArgEnd,
Type RetTy 
)
static

◆ LowerBSWAP()

static Value* LowerBSWAP ( LLVMContext Context,
Value V,
Instruction IP 
)
static

◆ LowerCTLZ()

static Value* LowerCTLZ ( LLVMContext Context,
Value V,
Instruction IP 
)
static

◆ LowerCTPOP()

static Value* LowerCTPOP ( LLVMContext Context,
Value V,
Instruction IP 
)
static

◆ ReplaceCallWith()

template<class ArgIt >
static CallInst* ReplaceCallWith ( const char NewFn,
CallInst CI,
ArgIt  ArgBegin,
ArgIt  ArgEnd,
Type RetTy 
)
static

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 arguments we expect to pass in.

Definition at line 65 of file IntrinsicLowering.cpp.

References llvm::AMDGPU::HSAMD::Kernel::Key::Args, llvm::FunctionType::get(), llvm::ilist_node_impl< OptionsT >::getIterator(), llvm::Instruction::getModule(), llvm::Value::getName(), llvm::Module::getOrInsertFunction(), llvm::Instruction::getParent(), I, llvm::Value::replaceAllUsesWith(), llvm::Value::setName(), and llvm::Value::use_empty().

Referenced by llvm::IntrinsicLowering::LowerIntrinsicCall(), and ReplaceFPIntrinsicWithCall().

◆ ReplaceFPIntrinsicWithCall()

static void ReplaceFPIntrinsicWithCall ( CallInst CI,
const char Fname,
const char Dname,
const char LDname 
)
static