|
LLVM 22.0.0git
|
#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/IntrinsicInst.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`") | |
| Function * | getTLIFunction (Module *M, FunctionType *VectorFTy, const StringRef TLIName, Function *ScalarFunc=nullptr) |
Returns a vector Function that it adds to the Module M. | |
| static void | replaceWithTLIFunction (IntrinsicInst *II, VFInfo &Info, Function *TLIVecFunc) |
Replace the intrinsic call II to TLIVecFunc, which is the corresponding function from the vector library. | |
| static bool | replaceWithCallToVeclib (const TargetLibraryInfo &TLI, IntrinsicInst *II) |
Returns true when successfully replaced II, which is a call to a vectorized intrinsic, with a suitable function taking vector arguments, based on available mappings in the TLI. | |
| 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 |
| #define DEBUG_TYPE "replace-with-veclib" |
Definition at line 34 of file ReplaceWithVeclib.cpp.
| 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::ExternalLinkage, llvm::Function::getFunction(), llvm::GlobalValue::getType(), and LLVM_DEBUG.
Referenced by replaceWithCallToVeclib().
| INITIALIZE_PASS_BEGIN | ( | ReplaceWithVeclibLegacy | , |
| DEBUG_TYPE | , | ||
| "Replace intrinsics with calls to vector library" | , | ||
| false | , | ||
| false | ) |
References DEBUG_TYPE, and INITIALIZE_PASS_DEPENDENCY.
|
static |
Returns true when successfully replaced II, which is a call to a vectorized intrinsic, with a suitable function taking vector arguments, based on available mappings in the TLI.
Definition at line 100 of file ReplaceWithVeclib.cpp.
References assert(), llvm::VFABI::createFunctionType(), llvm::dbgs(), DEBUG_TYPE, llvm::dyn_cast(), llvm::enumerate(), llvm::FunctionType::get(), llvm::ElementCount::getFixed(), llvm::Intrinsic::getName(), llvm::Value::getName(), llvm::Type::getScalarType(), getTLIFunction(), llvm::VecDesc::getVectorFnName(), llvm::VecDesc::getVectorFunctionABIVariantString(), llvm::TargetLibraryInfo::getVectorMappingInfo(), llvm::GlobalPredicate, II, llvm::Intrinsic::isOverloaded(), llvm::isVectorIntrinsicWithOverloadTypeAtArg(), llvm::isVectorIntrinsicWithScalarOpAtArg(), llvm::Type::isVectorTy(), llvm::Type::isVoidTy(), LLVM_DEBUG, llvm::SmallVectorTemplateBase< T, bool >::push_back(), replaceWithTLIFunction(), llvm::StringRef::str(), llvm::VFABI::tryDemangleForVFABI(), and llvm::Vector.
Referenced by runImpl().
|
static |
Replace the intrinsic call II to TLIVecFunc, which is the corresponding function from the vector library.
Definition at line 75 of file ReplaceWithVeclib.cpp.
References llvm::IRBuilderBase::CreateCall(), llvm::VectorType::get(), llvm::Constant::getAllOnesValue(), llvm::Type::getInt1Ty(), II, Info, llvm::IRBuilder(), and llvm::isa().
Referenced by replaceWithCallToVeclib().
|
static |
Definition at line 206 of file ReplaceWithVeclib.cpp.
References llvm::dyn_cast(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), F, I, II, instructions, llvm::Intrinsic::not_intrinsic, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and replaceWithCallToVeclib().
| STATISTIC | ( | NumCallsReplaced | , |
| "Number of calls to intrinsics that have been replaced." | ) |
| STATISTIC | ( | NumFuncUsedAdded | , |
| "Number of functions added to `llvm.compiler.used`" | ) |
| DEBUG_TYPE |
Definition at line 279 of file ReplaceWithVeclib.cpp.
| Replace intrinsics with calls to vector false |
Definition at line 280 of file ReplaceWithVeclib.cpp.
| Replace intrinsics with calls to vector library |
Definition at line 280 of file ReplaceWithVeclib.cpp.