LLVM 22.0.0git
|
#include "llvm/Transforms/Utils/SimplifyLibCalls.h"
#include "llvm/ADT/APFloat.h"
#include "llvm/ADT/APSInt.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/Analysis/ConstantFolding.h"
#include "llvm/Analysis/Loads.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/Utils/Local.h"
#include "llvm/Analysis/ValueTracking.h"
#include "llvm/IR/AttributeMask.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/KnownBits.h"
#include "llvm/Support/KnownFPClass.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/TargetParser/Triple.h"
#include "llvm/Transforms/Utils/BuildLibCalls.h"
#include "llvm/Transforms/Utils/Local.h"
#include "llvm/Transforms/Utils/SizeOpts.h"
#include <cmath>
Go to the source code of this file.
Variables | |
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")) |
static cl::opt< bool > | OptimizeHotColdNew ("optimize-hot-cold-new", cl::Hidden, cl::init(false), cl::desc("Enable hot/cold operator new library calls")) |
static cl::opt< bool > | OptimizeExistingHotColdNew ("optimize-existing-hot-cold-new", cl::Hidden, cl::init(false), cl::desc("Enable optimization of existing hot/cold operator new library calls")) |
static cl::opt< unsigned, false, HotColdHintParser > | ColdNewHintValue ("cold-new-hint-value", cl::Hidden, cl::init(1), cl::desc("Value to pass to hot/cold operator new for cold allocation")) |
static cl::opt< unsigned, false, HotColdHintParser > | NotColdNewHintValue ("notcold-new-hint-value", cl::Hidden, cl::init(128), cl::desc("Value to pass to hot/cold operator new for " "notcold (warm) allocation")) |
static cl::opt< unsigned, false, HotColdHintParser > | HotNewHintValue ("hot-new-hint-value", cl::Hidden, cl::init(254), cl::desc("Value to pass to hot/cold operator new for hot allocation")) |
|
static |
Definition at line 269 of file SimplifyLibCalls.cpp.
References llvm::CallBase::addParamAttr(), F, llvm::CallBase::getArgOperand(), llvm::CallBase::getCaller(), llvm::Value::getContext(), llvm::CallBase::getParamDereferenceableBytes(), llvm::CallBase::getParamDereferenceableOrNullBytes(), llvm::Type::getPointerAddressSpace(), llvm::Value::getType(), llvm::Attribute::getWithDereferenceableBytes(), llvm::NullPointerIsDefined(), llvm::CallBase::paramHasAttr(), and llvm::CallBase::removeParamAttr().
Referenced by annotateNonNullAndDereferenceable(), and annotateNonNullNoUndefBasedOnAccess().
|
static |
Definition at line 316 of file SimplifyLibCalls.cpp.
References annotateDereferenceableBytes(), annotateNonNullNoUndefBasedOnAccess(), DL, llvm::isKnownNonZero(), llvm::PatternMatch::m_ConstantInt(), llvm::PatternMatch::m_Select(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), Size, X, and Y.
|
static |
Definition at line 294 of file SimplifyLibCalls.cpp.
References llvm::CallBase::addParamAttr(), annotateDereferenceableBytes(), F, llvm::CallBase::getArgOperand(), llvm::CallBase::getCaller(), llvm::Type::getPointerAddressSpace(), llvm::Value::getType(), llvm::NullPointerIsDefined(), and llvm::CallBase::paramHasAttr().
Referenced by annotateNonNullAndDereferenceable().
Definition at line 122 of file SimplifyLibCalls.cpp.
References llvm::any_of(), and llvm::User::operands().
Definition at line 128 of file SimplifyLibCalls.cpp.
References llvm::any_of(), and llvm::User::operands().
|
static |
Definition at line 255 of file SimplifyLibCalls.cpp.
References DL, llvm::Instruction::getFunction(), llvm::Function::hasFnAttribute(), llvm::isDereferenceableAndAlignedPointer(), and isOnlyUsedInComparisonWithZero().
|
static |
Definition at line 141 of file SimplifyLibCalls.cpp.
References B, llvm::sampleprof::Base, llvm::CallBase::getArgOperand(), llvm::Value::getType(), isDigit(), llvm::maxIntN(), llvm::maxUIntN(), llvm::Offset, RetTy, and llvm::SaturatingMultiplyAdd().
Definition at line 337 of file SimplifyLibCalls.cpp.
References assert(), llvm::CallInst::getTailCallKind(), llvm::CallInst::isMustTailCall(), and llvm::CallInst::isNoTailCall().
Referenced by mergeAttributesAndFlags(), optimizeSymmetricCall(), and replaceUnaryCall().
|
static |
Definition at line 2331 of file SimplifyLibCalls.cpp.
References B, llvm::sampleprof::Base, and llvm::Value::getType().
|
static |
Definition at line 2066 of file SimplifyLibCalls.cpp.
References B, and llvm::BitWidth.
|
static |
Definition at line 2260 of file SimplifyLibCalls.cpp.
References B, llvm::emitUnaryFloatFnCall(), and llvm::hasFloatFn().
Definition at line 105 of file SimplifyLibCalls.cpp.
Referenced by llvm::FortifiedLibCallSimplifier::optimizeCall(), and llvm::LibCallSimplifier::optimizeCall().
|
static |
Definition at line 2921 of file SimplifyLibCalls.cpp.
References assert(), B, llvm::BasicBlock::begin(), llvm::StructType::get(), llvm::FixedVectorType::get(), llvm::Function::getAttributes(), llvm::TargetLibraryInfo::getLibFunc(), llvm::getOrInsertLibFunc(), llvm::GlobalValue::getParent(), llvm::Module::getTargetTriple(), llvm::Value::getType(), llvm::isLibFuncEmittable(), llvm::Type::isStructTy(), Name, llvm::Triple::x86, and llvm::Triple::x86_64.
Definition at line 243 of file SimplifyLibCalls.cpp.
References llvm::CallingConv::C.
Referenced by canTransformToMemCmp().
Return true if it is only used in equality comparisons with With.
Definition at line 111 of file SimplifyLibCalls.cpp.
Definition at line 3293 of file SimplifyLibCalls.cpp.
References llvm::CallBase::arg_size(), llvm::CallBase::getArgOperand(), llvm::Value::getName(), llvm::LoadInst::getPointerOperand(), and llvm::GlobalValue::isDeclaration().
Definition at line 2914 of file SimplifyLibCalls.cpp.
References llvm::CallBase::doesNotAccessMemory(), and llvm::CallBase::doesNotThrow().
|
static |
Definition at line 454 of file SimplifyLibCalls.cpp.
References B, llvm::CallBase::getArgOperand(), llvm::Constant::getNullValue(), and llvm::Value::getType().
Definition at line 345 of file SimplifyLibCalls.cpp.
References llvm::CallBase::arg_size(), copyFlags(), llvm::AttributeList::get(), llvm::CallBase::getArgOperand(), llvm::Value::getContext(), llvm::CallBase::getParamAttributes(), llvm::CallBase::getRetAttributes(), llvm::Value::getType(), I, llvm::CallBase::removeParamAttrs(), llvm::CallBase::removeRetAttrs(), llvm::CallBase::setAttributes(), and llvm::AttributeFuncs::typeIncompatible().
|
static |
Shrink double -> float for binary functions.
Definition at line 2008 of file SimplifyLibCalls.cpp.
References B, and optimizeDoubleFP().
|
static |
Shrink double -> float functions.
Definition at line 1942 of file SimplifyLibCalls.cpp.
References B, llvm::emitBinaryFloatFnCall(), llvm::emitUnaryFloatFnCall(), llvm::StringRef::ends_with(), llvm::CallBase::getArgOperand(), llvm::Function::getAttributes(), llvm::CallBase::getCalledFunction(), llvm::Instruction::getFastMathFlags(), llvm::Instruction::getFunction(), llvm::Function::getIntrinsicID(), llvm::Value::getName(), llvm::Value::getType(), isBinary(), llvm::Type::isDoubleTy(), llvm::Type::isFloatTy(), llvm::Function::isIntrinsic(), llvm::StringRef::size(), llvm::StringRef::starts_with(), llvm::Value::users(), and valueHasFloatPrecision().
Referenced by optimizeBinaryDoubleFP(), and optimizeUnaryDoubleFP().
|
static |
Definition at line 1535 of file SimplifyLibCalls.cpp.
References B, llvm::ConstantFoldLoadFromConstPtr(), DL, llvm::IntegerType::get(), llvm::Value::getContext(), llvm::getKnownAlignment(), llvm::Constant::getNullValue(), llvm::Value::getType(), llvm::isOnlyUsedInZeroEqualityComparison(), LHS, and RHS.
|
static |
Definition at line 1493 of file SimplifyLibCalls.cpp.
References B, llvm::getConstantStringInfo(), llvm::Constant::getNullValue(), llvm::Value::getType(), llvm::CmpInst::ICMP_ULE, LHS, RHS, llvm::StringRef::size(), and Size.
Constant folding nan/nanf/nanl.
Definition at line 3975 of file SimplifyLibCalls.cpp.
References llvm::StringRef::empty(), llvm::CallBase::getArgOperand(), llvm::StringRef::getAsInteger(), llvm::getConstantStringInfo(), llvm::ConstantFP::getQNaN(), and llvm::Value::getType().
|
static |
Definition at line 2977 of file SimplifyLibCalls.cpp.
References B, copyFlags(), llvm::CallBase::getArgOperand(), llvm::CallBase::getCalledFunction(), llvm::PatternMatch::m_CopySign(), llvm::PatternMatch::m_FAbs(), llvm::PatternMatch::m_FNeg(), llvm::MIPatternMatch::m_OneUse(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), and X.
|
static |
Shrink double -> float for unary functions.
Definition at line 2001 of file SimplifyLibCalls.cpp.
References B, and optimizeDoubleFP().
Referenced by llvm::LibCallSimplifier::optimizeCall().
|
static |
Definition at line 1912 of file SimplifyLibCalls.cpp.
References B, copyFlags(), llvm::CallBase::getArgOperand(), and llvm::Value::takeName().
Definition at line 359 of file SimplifyLibCalls.cpp.
Referenced by llvm::StringRef::consume_back(), llvm::StringRef::consume_back_insensitive(), llvm::StringRef::consume_front(), llvm::StringRef::consume_front_insensitive(), llvm::StringRef::drop_back(), llvm::StringRef::drop_front(), llvm::StringRef::drop_until(), llvm::StringRef::drop_while(), llvm::X86TargetLowering::ExpandInlineAsm(), llvm::object::MachOObjectFile::getSectionContents(), llvm::StringRef::rsplit(), llvm::StringRef::split(), llvm::streamFile(), llvm::StringRef::take_until(), and llvm::StringRef::take_while().
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 1924 of file SimplifyLibCalls.cpp.
References F, llvm::APFloatBase::IEEEsingle(), and llvm::APFloatBase::rmNearestTiesToEven.
Referenced by optimizeDoubleFP().
|
static |
|
static |
Referenced by llvm::LibCallSimplifier::optimizeCall().
|
static |
|
static |
|
static |