|
LLVM
3.7.0
|
#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"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 Value * | valueHasFloatPrecision (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< bool > | ColdErrorCalls ("error-reporting-is-cold", cl::init(true), cl::Hidden, cl::desc("Treat error-reporting calls as cold")) |
| static 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")) |
Definition at line 95 of file SimplifyLibCalls.cpp.
References llvm::User::op_begin(), and llvm::User::op_end().
|
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 |
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 |
Definition at line 54 of file SimplifyLibCalls.cpp.
References llvm::abs(), and llvm_unreachable.
Referenced by llvm::FortifiedLibCallSimplifier::optimizeCall(), and llvm::LibCallSimplifier::optimizeCall().
|
static |
Definition at line 1362 of file SimplifyLibCalls.cpp.
References llvm::BasicBlock::begin(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateCall(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateExtractElement(), llvm::IRBuilder< preserveNames, T, Inserter >::CreateExtractValue(), llvm::ConstantInt::get(), llvm::StructType::get(), llvm::VectorType::get(), llvm::Function::getAttributes(), llvm::Function::getEntryBlock(), llvm::IRBuilderBase::GetInsertBlock(), llvm::IRBuilderBase::getInt32Ty(), llvm::Module::getOrInsertFunction(), llvm::BasicBlock::getParent(), llvm::GlobalValue::getParent(), llvm::Module::getTargetTriple(), llvm::Value::getType(), llvm::Type::isStructTy(), llvm::IRBuilderBase::SetInsertPoint(), T, llvm::Triple::x86, and llvm::Triple::x86_64.
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().
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().
Definition at line 1531 of file SimplifyLibCalls.cpp.
References ColdErrorCalls, llvm::dyn_cast(), llvm::CallInst::getArgOperand(), llvm::Value::getName(), llvm::CallInst::getNumArgOperands(), llvm::LoadInst::getPointerOperand(), and llvm::GlobalValue::isDeclaration().
Definition at line 1305 of file SimplifyLibCalls.cpp.
References llvm::CallInst::getCalledFunction(), llvm::Function::getFunctionType(), llvm::FunctionType::getNumParams(), llvm::FunctionType::getParamType(), llvm::FunctionType::getReturnType(), llvm::CallInst::hasFnAttr(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Attribute::NoUnwind, and llvm::Attribute::ReadNone.
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.
|
static |
Referenced by isReportingError().
1.8.6