class FortifiedLibCallSimplifier
Declaration
class FortifiedLibCallSimplifier { /* full declaration omitted */ };
Description
This class implements simplifications for calls to fortified library functions (__st*cpy_chk, __memcpy_chk, __memmove_chk, __memset_chk), to, when possible, replace them with their non-checking counterparts. Other optimizations can also be done, but it's possible to disable them and only simplify needless use of the checking versions (when the object size is unknown) by passing true for OnlyLowerUnknownSize.
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:38
Member Variables
- private const llvm::TargetLibraryInfo* TLI
- private bool OnlyLowerUnknownSize
Method Overview
- public FortifiedLibCallSimplifier(const llvm::TargetLibraryInfo * TLI, bool OnlyLowerUnknownSize = false)
- private bool isFortifiedCallFoldable(llvm::CallInst * CI, unsigned int ObjSizeOp, Optional<unsigned int> SizeOp = None, Optional<unsigned int> StrOp = None, Optional<unsigned int> FlagsOp = None)
- public llvm::Value * optimizeCall(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeMemCCpyChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeMemCpyChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeMemMoveChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeMemPCpyChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeMemSetChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeSNPrintfChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeSPrintfChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeStrCatChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeStrLCat(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeStrLCpyChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeStrLenChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeStrNCatChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeStrpCpyChk(llvm::CallInst * CI, llvm::IRBuilderBase & B, llvm::LibFunc Func)
- private llvm::Value * optimizeStrpNCpyChk(llvm::CallInst * CI, llvm::IRBuilderBase & B, llvm::LibFunc Func)
- private llvm::Value * optimizeVSNPrintfChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
- private llvm::Value * optimizeVSPrintfChk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
Methods
¶FortifiedLibCallSimplifier(
const llvm::TargetLibraryInfo* TLI,
bool OnlyLowerUnknownSize = false)
FortifiedLibCallSimplifier(
const llvm::TargetLibraryInfo* TLI,
bool OnlyLowerUnknownSize = false)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:44
Parameters
- const llvm::TargetLibraryInfo* TLI
- bool OnlyLowerUnknownSize = false
¶bool isFortifiedCallFoldable(
llvm::CallInst* CI,
unsigned int ObjSizeOp,
Optional<unsigned int> SizeOp = None,
Optional<unsigned int> StrOp = None,
Optional<unsigned int> FlagsOp = None)
bool isFortifiedCallFoldable(
llvm::CallInst* CI,
unsigned int ObjSizeOp,
Optional<unsigned int> SizeOp = None,
Optional<unsigned int> StrOp = None,
Optional<unsigned int> FlagsOp = None)
Description
Checks whether the call \p CI to a fortified libcall is foldable to the non-fortified version.
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:91
Parameters
- llvm::CallInst* CI
- the call to the fortified libcall.
- unsigned int ObjSizeOp
- the index of the object size parameter of this chk function. Not optional since this is mandatory.
- Optional<unsigned int> SizeOp = None
- optionally set to the parameter index of an explicit buffer size argument. For instance, set to '2' for __strncpy_chk.
- Optional<unsigned int> StrOp = None
- optionally set to the parameter index of the source string parameter to strcpy-like functions, where only the strlen of the source will be writtin into the destination.
- Optional<unsigned int> FlagsOp = None
- optionally set to the parameter index of a 'flags' parameter. These are used by an implementation to opt-into stricter checking.
¶llvm::Value* optimizeCall(llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeCall(llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Description
Take the given call instruction and return a more optimal value to replace the instruction with or 0 if a more optimal form can't be found. The call must not be an indirect call.
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:51
Parameters
¶llvm::Value* optimizeMemCCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeMemCCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:63
Parameters
¶llvm::Value* optimizeMemCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeMemCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:54
Parameters
¶llvm::Value* optimizeMemMoveChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeMemMoveChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:55
Parameters
¶llvm::Value* optimizeMemPCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeMemPCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:62
Parameters
¶llvm::Value* optimizeMemSetChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeMemSetChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:56
Parameters
¶llvm::Value* optimizeSNPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeSNPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:64
Parameters
¶llvm::Value* optimizeSPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeSPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:65
Parameters
¶llvm::Value* optimizeStrCatChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeStrCatChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:66
Parameters
¶llvm::Value* optimizeStrLCat(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeStrLCat(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:67
Parameters
¶llvm::Value* optimizeStrLCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeStrLCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:69
Parameters
¶llvm::Value* optimizeStrLenChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeStrLenChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:61
Parameters
¶llvm::Value* optimizeStrNCatChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeStrNCatChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:68
Parameters
¶llvm::Value* optimizeStrpCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B,
llvm::LibFunc Func)
llvm::Value* optimizeStrpCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B,
llvm::LibFunc Func)
Description
Str/Stp cpy are similar enough to be handled in the same functions.
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:59
Parameters
- llvm::CallInst* CI
- llvm::IRBuilderBase& B
- llvm::LibFunc Func
¶llvm::Value* optimizeStrpNCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B,
llvm::LibFunc Func)
llvm::Value* optimizeStrpNCpyChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B,
llvm::LibFunc Func)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:60
Parameters
- llvm::CallInst* CI
- llvm::IRBuilderBase& B
- llvm::LibFunc Func
¶llvm::Value* optimizeVSNPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeVSNPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:70
Parameters
¶llvm::Value* optimizeVSPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
llvm::Value* optimizeVSPrintfChk(
llvm::CallInst* CI,
llvm::IRBuilderBase& B)
Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:71