LLVM 20.0.0git
|
#include "llvm/Transforms/Utils/BuildLibCalls.h"
#include "llvm/ADT/SmallString.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/IR/Argument.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/Type.h"
#include "llvm/Support/TypeSize.h"
#include <optional>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "build-libcalls" |
Functions | |
STATISTIC (NumReadNone, "Number of functions inferred as readnone") | |
STATISTIC (NumInaccessibleMemOnly, "Number of functions inferred as inaccessiblememonly") | |
STATISTIC (NumReadOnly, "Number of functions inferred as readonly") | |
STATISTIC (NumWriteOnly, "Number of functions inferred as writeonly") | |
STATISTIC (NumArgMemOnly, "Number of functions inferred as argmemonly") | |
STATISTIC (NumInaccessibleMemOrArgMemOnly, "Number of functions inferred as inaccessiblemem_or_argmemonly") | |
STATISTIC (NumNoUnwind, "Number of functions inferred as nounwind") | |
STATISTIC (NumNoCapture, "Number of arguments inferred as nocapture") | |
STATISTIC (NumWriteOnlyArg, "Number of arguments inferred as writeonly") | |
STATISTIC (NumReadOnlyArg, "Number of arguments inferred as readonly") | |
STATISTIC (NumNoAlias, "Number of function returns inferred as noalias") | |
STATISTIC (NumNoUndef, "Number of function returns inferred as noundef returns") | |
STATISTIC (NumReturnedArg, "Number of arguments inferred as returned") | |
STATISTIC (NumWillReturn, "Number of functions inferred as willreturn") | |
STATISTIC (NumCold, "Number of functions inferred as cold") | |
STATISTIC (NumNoReturn, "Number of functions inferred as no return") | |
static bool | setDoesNotAccessMemory (Function &F) |
static bool | setIsCold (Function &F) |
static bool | setNoReturn (Function &F) |
static bool | setOnlyAccessesInaccessibleMemory (Function &F) |
static bool | setOnlyReadsMemory (Function &F) |
static bool | setOnlyWritesMemory (Function &F) |
static bool | setOnlyAccessesArgMemory (Function &F) |
static bool | setOnlyAccessesInaccessibleMemOrArgMem (Function &F) |
static bool | setDoesNotThrow (Function &F) |
static bool | setRetDoesNotAlias (Function &F) |
static bool | setDoesNotCapture (Function &F, unsigned ArgNo) |
static bool | setDoesNotAlias (Function &F, unsigned ArgNo) |
static bool | setOnlyReadsMemory (Function &F, unsigned ArgNo) |
static bool | setOnlyWritesMemory (Function &F, unsigned ArgNo) |
static bool | setRetNoUndef (Function &F) |
static bool | setArgsNoUndef (Function &F) |
static bool | setArgNoUndef (Function &F, unsigned ArgNo) |
static bool | setRetAndArgsNoUndef (Function &F) |
static bool | setReturnedArg (Function &F, unsigned ArgNo) |
static bool | setNonLazyBind (Function &F) |
static bool | setDoesNotFreeMemory (Function &F) |
static bool | setWillReturn (Function &F) |
static bool | setAlignedAllocParam (Function &F, unsigned ArgNo) |
static bool | setAllocatedPointerParam (Function &F, unsigned ArgNo) |
static bool | setAllocSize (Function &F, unsigned ElemSizeArg, std::optional< unsigned > NumElemsArg) |
static bool | setAllocFamily (Function &F, StringRef Family) |
static bool | setAllocKind (Function &F, AllocFnKind K) |
static void | setArgExtAttr (Function &F, unsigned ArgNo, const TargetLibraryInfo &TLI, bool Signed=true) |
static void | setRetExtAttr (Function &F, const TargetLibraryInfo &TLI, bool Signed=true) |
static IntegerType * | getIntTy (IRBuilderBase &B, const TargetLibraryInfo *TLI) |
static IntegerType * | getSizeTTy (IRBuilderBase &B, const TargetLibraryInfo *TLI) |
static Value * | emitLibCall (LibFunc TheLibFunc, Type *ReturnType, ArrayRef< Type * > ParamTypes, ArrayRef< Value * > Operands, IRBuilderBase &B, const TargetLibraryInfo *TLI, bool IsVaArgs=false) |
static void | appendTypeSuffix (Value *Op, StringRef &Name, SmallString< 20 > &NameBuffer) |
Append a suffix to the function name according to the type of 'Op'. | |
static Value * | emitUnaryFloatFnCallHelper (Value *Op, LibFunc TheLibFunc, StringRef Name, IRBuilderBase &B, const AttributeList &Attrs, const TargetLibraryInfo *TLI) |
static Value * | emitBinaryFloatFnCallHelper (Value *Op1, Value *Op2, LibFunc TheLibFunc, StringRef Name, IRBuilderBase &B, const AttributeList &Attrs, const TargetLibraryInfo *TLI) |
#define DEBUG_TYPE "build-libcalls" |
Definition at line 32 of file BuildLibCalls.cpp.
|
static |
Append a suffix to the function name according to the type of 'Op'.
Definition at line 1726 of file BuildLibCalls.cpp.
References Name.
Referenced by llvm::emitBinaryFloatFnCall(), and llvm::emitUnaryFloatFnCall().
|
static |
Definition at line 1788 of file BuildLibCalls.cpp.
References assert(), B, F, llvm::getOrInsertLibFunc(), llvm::Value::getType(), llvm::inferNonMandatoryLibFuncAttrs(), Name, llvm::CallBase::setAttributes(), and llvm::CallBase::setCallingConv().
Referenced by llvm::emitBinaryFloatFnCall().
|
static |
Definition at line 1482 of file BuildLibCalls.cpp.
References B, F, llvm::TargetLibraryInfo::getName(), llvm::getOrInsertLibFunc(), llvm::inferNonMandatoryLibFuncAttrs(), llvm::isLibFuncEmittable(), Operands, and llvm::CallBase::setCallingConv().
Referenced by llvm::emitBCmp(), llvm::emitMemCCpy(), llvm::emitMemChr(), llvm::emitMemCmp(), llvm::emitMemPCpy(), llvm::emitMemRChr(), llvm::emitSNPrintf(), llvm::emitSPrintf(), llvm::emitStpCpy(), llvm::emitStpNCpy(), llvm::emitStrCat(), llvm::emitStrChr(), llvm::emitStrCpy(), llvm::emitStrDup(), llvm::emitStrLCat(), llvm::emitStrLCpy(), llvm::emitStrLen(), llvm::emitStrNCat(), llvm::emitStrNCmp(), llvm::emitStrNCpy(), llvm::emitVSNPrintf(), and llvm::emitVSPrintf().
|
static |
Definition at line 1740 of file BuildLibCalls.cpp.
References assert(), B, F, llvm::getOrInsertLibFunc(), Name, llvm::CallBase::setAttributes(), and llvm::CallBase::setCallingConv().
Referenced by llvm::emitUnaryFloatFnCall().
|
static |
Definition at line 1473 of file BuildLibCalls.cpp.
References B, and llvm::TargetLibraryInfo::getIntSize().
Referenced by llvm::emitBCmp(), llvm::emitFPutC(), llvm::emitFPutS(), llvm::emitMemCCpy(), llvm::emitMemChr(), llvm::emitMemCmp(), llvm::emitMemRChr(), llvm::emitPutChar(), llvm::emitPutS(), llvm::emitSNPrintf(), llvm::emitSPrintf(), llvm::emitStrChr(), llvm::emitStrNCmp(), llvm::emitVSNPrintf(), and llvm::emitVSPrintf().
|
static |
Definition at line 1477 of file BuildLibCalls.cpp.
References B, and llvm::TargetLibraryInfo::getSizeTSize().
Referenced by llvm::emitBCmp(), llvm::emitCalloc(), llvm::emitFWrite(), llvm::emitMalloc(), llvm::emitMemCCpy(), llvm::emitMemChr(), llvm::emitMemCmp(), llvm::emitMemCpyChk(), llvm::emitMemPCpy(), llvm::emitMemRChr(), llvm::emitSNPrintf(), llvm::emitStpNCpy(), llvm::emitStrLCat(), llvm::emitStrLCpy(), llvm::emitStrLen(), llvm::emitStrNCat(), llvm::emitStrNCmp(), llvm::emitStrNCpy(), and llvm::emitVSNPrintf().
Definition at line 234 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 241 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 257 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
|
static |
Definition at line 264 of file BuildLibCalls.cpp.
References F, and llvm::Attribute::get().
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
|
static |
Definition at line 248 of file BuildLibCalls.cpp.
References F, and llvm::Attribute::getWithAllocSizeArgs().
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
|
static |
Definition at line 1285 of file BuildLibCalls.cpp.
References F, llvm::Attribute::None, and Signed.
Referenced by llvm::getOrInsertLibFunc().
Definition at line 189 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 177 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs(), and setRetAndArgsNoUndef().
Definition at line 55 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 143 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 135 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 219 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 119 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 63 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 212 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs(), and lowerObjCCall().
Definition at line 71 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 103 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 111 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 79 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 87 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 151 of file BuildLibCalls.cpp.
References F.
Definition at line 95 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 159 of file BuildLibCalls.cpp.
References F.
Definition at line 197 of file BuildLibCalls.cpp.
References F, setArgsNoUndef(), and setRetNoUndef().
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 127 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
|
static |
Definition at line 1292 of file BuildLibCalls.cpp.
References F, llvm::Attribute::None, and Signed.
Referenced by llvm::getOrInsertLibFunc().
Definition at line 167 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs(), and setRetAndArgsNoUndef().
Definition at line 204 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
Definition at line 226 of file BuildLibCalls.cpp.
References F.
Referenced by llvm::inferNonMandatoryLibFuncAttrs().
STATISTIC | ( | NumArgMemOnly | , |
"Number of functions inferred as argmemonly" | |||
) |
STATISTIC | ( | NumCold | , |
"Number of functions inferred as cold" | |||
) |
STATISTIC | ( | NumInaccessibleMemOnly | , |
"Number of functions inferred as inaccessiblememonly" | |||
) |
STATISTIC | ( | NumInaccessibleMemOrArgMemOnly | , |
"Number of functions inferred as inaccessiblemem_or_argmemonly" | |||
) |
STATISTIC | ( | NumNoAlias | , |
"Number of function returns inferred as noalias" | |||
) |
STATISTIC | ( | NumNoCapture | , |
"Number of arguments inferred as nocapture" | |||
) |
STATISTIC | ( | NumNoReturn | , |
"Number of functions inferred as no return" | |||
) |
STATISTIC | ( | NumNoUndef | , |
"Number of function returns inferred as noundef returns" | |||
) |
STATISTIC | ( | NumNoUnwind | , |
"Number of functions inferred as nounwind" | |||
) |
STATISTIC | ( | NumReadNone | , |
"Number of functions inferred as readnone" | |||
) |
STATISTIC | ( | NumReadOnly | , |
"Number of functions inferred as readonly" | |||
) |
STATISTIC | ( | NumReadOnlyArg | , |
"Number of arguments inferred as readonly" | |||
) |
STATISTIC | ( | NumReturnedArg | , |
"Number of arguments inferred as returned" | |||
) |
STATISTIC | ( | NumWillReturn | , |
"Number of functions inferred as willreturn" | |||
) |
STATISTIC | ( | NumWriteOnly | , |
"Number of functions inferred as writeonly" | |||
) |
STATISTIC | ( | NumWriteOnlyArg | , |
"Number of arguments inferred as writeonly" | |||
) |