LLVM  3.7.0
Functions | Variables
SimplifyLibCalls.cpp File Reference
#include "llvm/Transforms/Utils/SimplifyLibCalls.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringMap.h"
#include "llvm/ADT/Triple.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DiagnosticInfo.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Transforms/Utils/BuildLibCalls.h"
Include dependency graph for SimplifyLibCalls.cpp:

Go to the source code of this file.

Functions

static bool ignoreCallingConv (LibFunc::Func Func)
 
static bool isOnlyUsedInZeroEqualityComparison (Value *V)
 isOnlyUsedInZeroEqualityComparison - Return true if it only matters that the value is equal or not-equal to zero. More...
 
static bool isOnlyUsedInEqualityComparison (Value *V, Value *With)
 isOnlyUsedInEqualityComparison - Return true if it is only used in equality comparisons with With. More...
 
static bool callHasFloatingPointArgument (const CallInst *CI)
 
static bool hasUnaryFloatFn (const TargetLibraryInfo *TLI, Type *Ty, LibFunc::Func DoubleFn, LibFunc::Func FloatFn, LibFunc::Func LongDoubleFn)
 Check whether the overloaded unary floating point function corresponing to Ty is available. More...
 
static bool checkStringCopyLibFuncSignature (Function *F, LibFunc::Func Func)
 Returns whether F matches the signature expected for the string/memory copying library function Func. More...
 
static ValuevalueHasFloatPrecision (Value *Val)
 Return a variant of Val with float type. More...
 
static bool isTrigLibCall (CallInst *CI)
 
static void insertSinCosCall (IRBuilder<> &B, Function *OrigCallee, Value *Arg, bool UseFloat, Value *&Sin, Value *&Cos, Value *&SinCos)
 
static bool isReportingError (Function *Callee, CallInst *CI, int StreamArg)
 

Variables

static cl::opt< boolColdErrorCalls ("error-reporting-is-cold", cl::init(true), cl::Hidden, cl::desc("Treat error-reporting calls as cold"))
 
static cl::opt< boolEnableUnsafeFPShrink ("enable-double-float-shrink", cl::Hidden, cl::init(false), cl::desc("Enable unsafe double to float ""shrinking for math lib calls"))
 

Function Documentation

static bool callHasFloatingPointArgument ( const CallInst CI)
static

Definition at line 95 of file SimplifyLibCalls.cpp.

References llvm::User::op_begin(), and llvm::User::op_end().

static bool checkStringCopyLibFuncSignature ( Function F,
LibFunc::Func  Func 
)
static

Returns whether F matches the signature expected for the string/memory copying library function Func.

Acceptable functions are st[rp][n]?cpy, memove, memcpy, and memset. Their fortified (_chk) counterparts are also accepted.

Definition at line 123 of file SimplifyLibCalls.cpp.

References llvm::DL, llvm::Function::getContext(), llvm::Module::getDataLayout(), llvm::Function::getFunctionType(), llvm::Type::getInt8PtrTy(), llvm::DataLayout::getIntPtrType(), llvm::FunctionType::getNumParams(), llvm::FunctionType::getParamType(), llvm::GlobalValue::getParent(), llvm::FunctionType::getReturnType(), llvm::Type::isIntegerTy(), llvm::Type::isPointerTy(), and llvm_unreachable.

static bool hasUnaryFloatFn ( const TargetLibraryInfo TLI,
Type Ty,
LibFunc::Func  DoubleFn,
LibFunc::Func  FloatFn,
LibFunc::Func  LongDoubleFn 
)
static

Check whether the overloaded unary floating point function corresponing to Ty is available.

Definition at line 106 of file SimplifyLibCalls.cpp.

References llvm::Type::DoubleTyID, llvm::Type::FloatTyID, llvm::Type::getTypeID(), and llvm::TargetLibraryInfo::has().

static bool ignoreCallingConv ( LibFunc::Func  Func)
static
void insertSinCosCall ( IRBuilder<> &  B,
Function OrigCallee,
Value Arg,
bool  UseFloat,
Value *&  Sin,
Value *&  Cos,
Value *&  SinCos 
)
static
static bool isOnlyUsedInEqualityComparison ( Value V,
Value With 
)
static

isOnlyUsedInEqualityComparison - Return true if it is only used in equality comparisons with With.

Definition at line 84 of file SimplifyLibCalls.cpp.

References llvm::Value::users().

static bool isOnlyUsedInZeroEqualityComparison ( Value V)
static

isOnlyUsedInZeroEqualityComparison - Return true if it only matters that the value is equal or not-equal to zero.

Definition at line 69 of file SimplifyLibCalls.cpp.

References llvm::Value::users().

static bool isReportingError ( Function Callee,
CallInst CI,
int  StreamArg 
)
static
static bool isTrigLibCall ( CallInst CI)
static
static Value* valueHasFloatPrecision ( Value Val)
static

Return a variant of Val with float type.

Currently this works in two cases: If Val is an FPExtension of a float value to something bigger, simply return the operand. If Val is a ConstantFP but can be converted to a float ConstantFP without loss of precision do so.

Definition at line 931 of file SimplifyLibCalls.cpp.

References llvm::APFloat::convert(), F(), llvm::ConstantFP::get(), llvm::Value::getType(), llvm::APFloat::IEEEsingle, llvm::Type::isFloatTy(), and llvm::APFloat::rmNearestTiesToEven.

Variable Documentation

cl::opt<bool> ColdErrorCalls("error-reporting-is-cold", cl::init(true), cl::Hidden, cl::desc("Treat error-reporting calls as cold"))
static

Referenced by isReportingError().

cl::opt<bool> EnableUnsafeFPShrink("enable-double-float-shrink", cl::Hidden, cl::init(false), cl::desc("Enable unsafe double to float ""shrinking for math lib calls"))
static