LLVM 23.0.0git
SVEIntrinsicOpts.cpp File Reference
#include "AArch64.h"
#include "Utils/AArch64BaseInfo.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/IntrinsicsAArch64.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/InitializePasses.h"
#include <optional>

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "aarch64-sve-intrinsic-opts"

Functions

 INITIALIZE_PASS_DEPENDENCY (DominatorTreeWrapperPass)
static bool isPTruePromoted (IntrinsicInst *PTrue)
 Checks if a ptrue intrinsic call is promoted.

Variables

static const charname = "SVE intrinsics optimizations"

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "aarch64-sve-intrinsic-opts"

Definition at line 42 of file SVEIntrinsicOpts.cpp.

Function Documentation

◆ INITIALIZE_PASS_DEPENDENCY()

INITIALIZE_PASS_DEPENDENCY ( DominatorTreeWrapperPass )

◆ isPTruePromoted()

bool isPTruePromoted ( IntrinsicInst * PTrue)
static

Checks if a ptrue intrinsic call is promoted.

The act of promoting a ptrue will introduce zeroing. For example:

%1 = <vscale x 4 x i1> call @llvm.aarch64.sve.ptrue.nxv4i1(i32 31)
%2 = <vscale x 16 x i1> call @llvm.aarch64.sve.convert.to.svbool.nxv4i1(<vscale x 4 x i1> %1)
%3 = <vscale x 8 x i1> call @llvm.aarch64.sve.convert.from.svbool.nxv8i1(<vscale x 16 x i1> %2)

%1 is promoted, because it is converted:

<vscale x 4 x i1> => <vscale x 16 x i1> => <vscale x 8 x i1>

via a sequence of the SVE reinterpret intrinsics convert.{to,from}.svbool.

Definition at line 94 of file SVEIntrinsicOpts.cpp.

References llvm::cast(), llvm::dyn_cast(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::Value::getType(), llvm::PatternMatch::m_Intrinsic(), llvm::PatternMatch::match(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::Value::users().

Variable Documentation

◆ name

const char* name = "SVE intrinsics optimizations"
static

Definition at line 73 of file SVEIntrinsicOpts.cpp.

Referenced by _rpmalloc_set_name(), llvm::object::applyNameType(), llvm::LTOCodeGenerator::compileOptimized(), llvm::pdb::DIARawSymbol::dump(), llvm::OutputCategoryAggregator::EnumerateDetailedResultsFor(), llvm::gsym::OutputAggregator::EnumerateResults(), llvm::OutputCategoryAggregator::EnumerateResults(), llvm::Mips16HardFloatInfo::findFuncSignature(), llvm::object::Archive::findSym(), llvm::cl::generic_parser_base::GenericOptionInfo::GenericOptionInfo(), get_amd_kernel_code_t_FieldIndex(), llvm::sys::Process::GetEnv(), llvm::object::COFFImportFile::getExportName(), llvm::orc::GetGnuHashSection(), INITIALIZE_PASS_DEPENDENCY(), is64Bit(), llvm::MCAsmBackend::isDarwinCanonicalPersonality(), llvm::XtensaTargetLowering::LowerCall(), lto_codegen_compile_to_file(), llvm::LTOModule::makeBuffer(), llvm::sys::fs::mapped_file_region::mapped_file_region(), llvm::MCGenDwarfLabelEntry::MCGenDwarfLabelEntry(), llvm::gsym::OutputAggregator::Merge(), llvm::NVPTXScopes::operator[](), llvm::cl::parser< DataType >::OptionInfo::OptionInfo(), llvm::orc::parseMachODeps(), llvm::AArch64::parsePercentSpecifierName(), llvm::LoongArch::parseSpecifier(), llvm::Sparc::parseSpecifier(), llvm::Xtensa::parseSpecifier(), llvm::RISCV::parseSpecifierName(), llvm::ELFCompactAttrParser::parseStringAttribute(), llvm::PassInfo::PassInfo(), llvm::LiveDebugValuesPass::printPipeline(), llvm::MachineBlockPlacementPass::printPipeline(), llvm::MachineSinkingPass::printPipeline(), llvm::ReadyQueue::ReadyQueue(), llvm::SectionEntry::SectionEntry(), thinlto_codegen_add_cross_referenced_symbol(), thinlto_codegen_add_must_preserve_symbol(), llvm::dwarf::toDW_LANG(), and llvm::LTOModule::~LTOModule().