LLVM 19.0.0git
Macros | Functions | Variables
ReplaceWithVeclib.cpp File Reference
#include "llvm/CodeGen/ReplaceWithVeclib.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/DemandedBits.h"
#include "llvm/Analysis/GlobalsModRef.h"
#include "llvm/Analysis/OptimizationRemarkEmitter.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/CodeGen/Passes.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/InstIterator.h"
#include "llvm/IR/VFABIDemangler.h"
#include "llvm/Support/TypeSize.h"
#include "llvm/Transforms/Utils/ModuleUtils.h"

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "replace-with-veclib"
 

Functions

 STATISTIC (NumCallsReplaced, "Number of calls to intrinsics that have been replaced.")
 
 STATISTIC (NumTLIFuncDeclAdded, "Number of vector library function declarations added.")
 
 STATISTIC (NumFuncUsedAdded, "Number of functions added to `llvm.compiler.used`")
 
FunctiongetTLIFunction (Module *M, FunctionType *VectorFTy, const StringRef TLIName, Function *ScalarFunc=nullptr)
 Returns a vector Function that it adds to the Module M.
 
static void replaceWithTLIFunction (Instruction &I, VFInfo &Info, Function *TLIVecFunc)
 Replace the instruction I with a call to the corresponding function from the vector library (TLIVecFunc).
 
static bool replaceWithCallToVeclib (const TargetLibraryInfo &TLI, Instruction &I)
 Returns true when successfully replaced I with a suitable function taking vector arguments, based on available mappings in the TLI.
 
static bool isSupportedInstruction (Instruction *I)
 Supported instruction I must be a vectorized frem or a call to an intrinsic that returns either void or a vector.
 
static bool runImpl (const TargetLibraryInfo &TLI, Function &F)
 
 INITIALIZE_PASS_BEGIN (ReplaceWithVeclibLegacy, DEBUG_TYPE, "Replace intrinsics with calls to vector library", false, false) INITIALIZE_PASS_END(ReplaceWithVeclibLegacy
 

Variables

 DEBUG_TYPE
 
Replace intrinsics with calls to vector library
 
Replace intrinsics with calls to vector false
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "replace-with-veclib"

Definition at line 34 of file ReplaceWithVeclib.cpp.

Function Documentation

◆ getTLIFunction()

Function * getTLIFunction ( Module M,
FunctionType VectorFTy,
const StringRef  TLIName,
Function ScalarFunc = nullptr 
)

Returns a vector Function that it adds to the Module M.

When an ScalarFunc is not null, it copies its attributes to the newly created Function.

Definition at line 48 of file ReplaceWithVeclib.cpp.

References llvm::appendToCompilerUsed(), llvm::Function::copyAttributesFrom(), llvm::Function::Create(), llvm::dbgs(), DEBUG_TYPE, llvm::GlobalValue::getType(), and LLVM_DEBUG.

Referenced by replaceWithCallToVeclib().

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( ReplaceWithVeclibLegacy  ,
DEBUG_TYPE  ,
"Replace intrinsics with calls to vector library"  ,
false  ,
false   
)

◆ isSupportedInstruction()

static bool isSupportedInstruction ( Instruction I)
static

Supported instruction I must be a vectorized frem or a call to an intrinsic that returns either void or a vector.

Definition at line 212 of file ReplaceWithVeclib.cpp.

References I, llvm::Type::isVectorTy(), llvm::Type::isVoidTy(), and llvm::Intrinsic::not_intrinsic.

Referenced by runImpl().

◆ replaceWithCallToVeclib()

static bool replaceWithCallToVeclib ( const TargetLibraryInfo TLI,
Instruction I 
)
static

◆ replaceWithTLIFunction()

static void replaceWithTLIFunction ( Instruction I,
VFInfo Info,
Function TLIVecFunc 
)
static

Replace the instruction I with a call to the corresponding function from the vector library (TLIVecFunc).

Definition at line 75 of file ReplaceWithVeclib.cpp.

References llvm::IRBuilderBase::CreateCall(), llvm::Constant::getAllOnesValue(), llvm::Type::getInt1Ty(), I, and Info.

Referenced by replaceWithCallToVeclib().

◆ runImpl()

static bool runImpl ( const TargetLibraryInfo TLI,
Function F 
)
static

◆ STATISTIC() [1/3]

STATISTIC ( NumCallsReplaced  ,
"Number of calls to intrinsics that have been replaced."   
)

◆ STATISTIC() [2/3]

STATISTIC ( NumFuncUsedAdded  ,
"Number of functions added to `llvm.compiler.used`"   
)

◆ STATISTIC() [3/3]

STATISTIC ( NumTLIFuncDeclAdded  ,
"Number of vector library function declarations added."   
)

Variable Documentation

◆ DEBUG_TYPE

DEBUG_TYPE

Definition at line 294 of file ReplaceWithVeclib.cpp.

◆ false

Replace intrinsics with calls to vector false

Definition at line 295 of file ReplaceWithVeclib.cpp.

◆ library

Replace intrinsics with calls to vector library

Definition at line 295 of file ReplaceWithVeclib.cpp.