class LibCallSimplifier

Declaration

class LibCallSimplifier { /* full declaration omitted */ };

Description

LibCallSimplifier - This class implements a collection of optimizations that replace well formed calls to library functions with a more optimal form. For example, replacing 'printf("Hello!")' with 'puts("Hello!")'.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:100

Member Variables

private llvm::FortifiedLibCallSimplifier FortifiedSimplifier
private const llvm::DataLayout& DL
private const llvm::TargetLibraryInfo* TLI
private llvm::OptimizationRemarkEmitter& ORE
private llvm::BlockFrequencyInfo* BFI
private llvm::ProfileSummaryInfo* PSI
private bool UnsafeFPShrink = false
private function_ref<void(llvm::Instruction*, llvm::Value*)> Replacer
private function_ref<void(llvm::Instruction*)> Eraser

Method Overview

  • public LibCallSimplifier(const llvm::DataLayout & DL, const llvm::TargetLibraryInfo * TLI, llvm::OptimizationRemarkEmitter & ORE, llvm::BlockFrequencyInfo * BFI, llvm::ProfileSummaryInfo * PSI, function_ref<void (llvm::Instruction *, llvm::Value *)> Replacer = &replaceAllUsesWithDefault, function_ref<void (llvm::Instruction *)> Eraser = &eraseFromParentDefault)
  • private void classifyArgUse(llvm::Value * Val, llvm::Function * F, bool IsFloat, SmallVectorImpl<llvm::CallInst *> & SinCalls, SmallVectorImpl<llvm::CallInst *> & CosCalls, SmallVectorImpl<llvm::CallInst *> & SinCosCalls)
  • private llvm::Value * emitStrLenMemCpy(llvm::Value * Src, llvm::Value * Dst, uint64_t Len, llvm::IRBuilderBase & B)
  • private void eraseFromParent(llvm::Instruction * I)
  • private static void eraseFromParentDefault(llvm::Instruction * I)
  • private bool hasFloatVersion(const llvm::Module * M, llvm::StringRef FuncName)
  • private llvm::Value * optimizeAbs(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeAtoi(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeBCmp(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeBCopy(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeCAbs(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • public llvm::Value * optimizeCall(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeErrorReporting(llvm::CallInst * CI, llvm::IRBuilderBase & B, int StreamArg = -1)
  • private llvm::Value * optimizeExp2(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFFS(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFMinFMax(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFPrintF(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFPrintFString(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFPuts(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFWrite(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFloatingPointLibCall(llvm::CallInst * CI, llvm::LibFunc Func, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeFls(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeIsAscii(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeIsDigit(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeLog(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemCCpy(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemChr(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemCmp(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemCmpBCmpCommon(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemCpy(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemMove(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemPCpy(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemRChr(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeMemSet(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizePow(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizePrintF(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizePrintFString(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizePuts(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeRealloc(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeSPrintF(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeSPrintFString(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeSinCosPi(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeSnPrintF(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeSnPrintFString(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeSqrt(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStpCpy(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrCSpn(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrCat(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrChr(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrCmp(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrCpy(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrLen(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrNCat(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrNCmp(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrNCpy(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrNDup(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrNLen(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrPBrk(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrRChr(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrSpn(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrStr(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrTo(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeStrToInt(llvm::CallInst * CI, llvm::IRBuilderBase & B, bool AsSigned)
  • private llvm::Value * optimizeStringLength(llvm::CallInst * CI, llvm::IRBuilderBase & B, unsigned int CharSize, llvm::Value * Bound = nullptr)
  • private llvm::Value * optimizeStringMemoryLibCall(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeTan(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeToAscii(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private llvm::Value * optimizeWcslen(llvm::CallInst * CI, llvm::IRBuilderBase & B)
  • private void replaceAllUsesWith(llvm::Instruction * I, llvm::Value * With)
  • private static void replaceAllUsesWithDefault(llvm::Instruction * I, llvm::Value * With)
  • private llvm::Value * replacePowWithExp(llvm::CallInst * Pow, llvm::IRBuilderBase & B)
  • private llvm::Value * replacePowWithSqrt(llvm::CallInst * Pow, llvm::IRBuilderBase & B)
  • private void substituteInParent(llvm::Instruction * I, llvm::Value * With)

Methods

LibCallSimplifier(
    const llvm::DataLayout& DL,
    const llvm::TargetLibraryInfo* TLI,
    llvm::OptimizationRemarkEmitter& ORE,
    llvm::BlockFrequencyInfo* BFI,
    llvm::ProfileSummaryInfo* PSI,
    function_ref<void(llvm::Instruction*,
                      llvm::Value*)> Replacer =
        &replaceAllUsesWithDefault,
    function_ref<void(llvm::Instruction*)>
        Eraser = &eraseFromParentDefault)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:136

Parameters

const llvm::DataLayout& DL
const llvm::TargetLibraryInfo* TLI
llvm::OptimizationRemarkEmitter& ORE
llvm::BlockFrequencyInfo* BFI
llvm::ProfileSummaryInfo* PSI
function_ref<void(llvm::Instruction*, llvm::Value*)> Replacer = &replaceAllUsesWithDefault
function_ref<void(llvm::Instruction*)> Eraser = &eraseFromParentDefault

void classifyArgUse(
    llvm::Value* Val,
    llvm::Function* F,
    bool IsFloat,
    SmallVectorImpl<llvm::CallInst*>& SinCalls,
    SmallVectorImpl<llvm::CallInst*>& CosCalls,
    SmallVectorImpl<llvm::CallInst*>& SinCosCalls)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:227

Parameters

llvm::Value* Val
llvm::Function* F
bool IsFloat
SmallVectorImpl<llvm::CallInst*>& SinCalls
SmallVectorImpl<llvm::CallInst*>& CosCalls
SmallVectorImpl<llvm::CallInst*>& SinCosCalls

llvm::Value* emitStrLenMemCpy(
    llvm::Value* Src,
    llvm::Value* Dst,
    uint64_t Len,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:225

Parameters

llvm::Value* Src
llvm::Value* Dst
uint64_t Len
llvm::IRBuilderBase& B

void eraseFromParent(llvm::Instruction* I)

Description

Erase an instruction from its parent with our eraser.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:127

Parameters

llvm::Instruction* I

static void eraseFromParentDefault(
    llvm::Instruction* I)

Description

Internal wrapper for eraseFromParent that is the default implementation.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:121

Parameters

llvm::Instruction* I

bool hasFloatVersion(const llvm::Module* M,
                     llvm::StringRef FuncName)

Description

hasFloatVersion - Checks if there is a float version of the specified function by checking for an existing function with name FuncName + f

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:238

Parameters

const llvm::Module* M
llvm::StringRef FuncName

llvm::Value* optimizeAbs(llvm::CallInst* CI,
                         llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:206

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeAtoi(llvm::CallInst* CI,
                          llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:210

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeBCmp(llvm::CallInst* CI,
                          llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:175

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeBCopy(llvm::CallInst* CI,
                           llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:184

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeCAbs(llvm::CallInst* CI,
                          llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:189

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeCall(llvm::CallInst* CI,
                          llvm::IRBuilderBase& B)

Description

optimizeCall - 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. Note that the returned value may be equal to the instruction being optimized. In this case all other instructions that use the given instruction were modified and the given instruction is dead. The call must not be an indirect call.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:151

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeErrorReporting(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B,
    int StreamArg = -1)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:214

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B
int StreamArg = -1

llvm::Value* optimizeExp2(llvm::CallInst* CI,
                          llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:193

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeFFS(llvm::CallInst* CI,
                         llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:204

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeFMinFMax(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:194

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeFPrintF(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:219

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeFPrintFString(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:234

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeFPuts(llvm::CallInst* CI,
                           llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:221

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeFWrite(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:220

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeFloatingPointLibCall(
    llvm::CallInst* CI,
    llvm::LibFunc Func,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:200

Parameters

llvm::CallInst* CI
llvm::LibFunc Func
llvm::IRBuilderBase& B

llvm::Value* optimizeFls(llvm::CallInst* CI,
                         llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:205

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeIsAscii(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:208

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeIsDigit(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:207

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeLog(llvm::CallInst* CI,
                         llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:195

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemCCpy(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:177

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemChr(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:172

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemCmp(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:174

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemCmpBCmpCommon(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:176

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemCpy(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:179

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemMove(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:180

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemPCpy(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:178

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemRChr(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:173

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeMemSet(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:181

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizePow(llvm::CallInst* CI,
                         llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:190

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizePrintF(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:216

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizePrintFString(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:231

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizePuts(llvm::CallInst* CI,
                          llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:222

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeRealloc(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:182

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeSPrintF(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:217

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeSPrintFString(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:232

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeSinCosPi(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:197

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeSnPrintF(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:218

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeSnPrintFString(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:233

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeSqrt(llvm::CallInst* CI,
                          llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:196

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStpCpy(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:163

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrCSpn(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:170

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrCat(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:155

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrChr(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:157

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrCmp(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:159

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrCpy(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:162

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrLen(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:165

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrNCat(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:156

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrNCmp(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:160

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrNCpy(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:164

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrNDup(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:161

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrNLen(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:166

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrPBrk(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:167

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrRChr(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:158

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrSpn(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:169

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrStr(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:171

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrTo(llvm::CallInst* CI,
                           llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:168

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeStrToInt(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B,
    bool AsSigned)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:211

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B
bool AsSigned

llvm::Value* optimizeStringLength(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B,
    unsigned int CharSize,
    llvm::Value* Bound = nullptr)

Description

Shared code to optimize strlen+wcslen and strnlen+wcsnlen.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:241

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B
unsigned int CharSize
llvm::Value* Bound = nullptr

llvm::Value* optimizeStringMemoryLibCall(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:186

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeTan(llvm::CallInst* CI,
                         llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:198

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeToAscii(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:209

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

llvm::Value* optimizeWcslen(
    llvm::CallInst* CI,
    llvm::IRBuilderBase& B)

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:183

Parameters

llvm::CallInst* CI
llvm::IRBuilderBase& B

void replaceAllUsesWith(llvm::Instruction* I,
                        llvm::Value* With)

Description

Replace an instruction's uses with a value using our replacer.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:124

Parameters

llvm::Instruction* I
llvm::Value* With

static void replaceAllUsesWithDefault(
    llvm::Instruction* I,
    llvm::Value* With)

Description

Internal wrapper for RAUW that is the default implementation. Other users may provide an alternate function with this signature instead of this one.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:116

Parameters

llvm::Instruction* I
llvm::Value* With

llvm::Value* replacePowWithExp(
    llvm::CallInst* Pow,
    llvm::IRBuilderBase& B)

Description

Use exp{,2}(x * y) for pow(exp{,2}(x), y); ldexp(1.0, x) for pow(2.0, itofp(x)); exp2(n * x) for pow(2.0 ** n, x); exp10(x) for pow(10.0, x); exp2(log2(n) * x) for pow(n, x).

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:191

Parameters

llvm::CallInst* Pow
llvm::IRBuilderBase& B

llvm::Value* replacePowWithSqrt(
    llvm::CallInst* Pow,
    llvm::IRBuilderBase& B)

Description

Use square root in place of pow(x, +/-0.5).

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:192

Parameters

llvm::CallInst* Pow
llvm::IRBuilderBase& B

void substituteInParent(llvm::Instruction* I,
                        llvm::Value* With)

Description

Replace an instruction with a value and erase it from its parent.

Declared at: llvm/include/llvm/Transforms/Utils/SimplifyLibCalls.h:130

Parameters

llvm::Instruction* I
llvm::Value* With