LLVM 22.0.0git
HexagonCommonGEP.cpp File Reference
#include "Hexagon.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/FoldingSet.h"
#include "llvm/ADT/GraphTraits.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/StringRef.h"
#include "llvm/Analysis/LoopInfo.h"
#include "llvm/Analysis/PostDominators.h"
#include "llvm/IR/BasicBlock.h"
#include "llvm/IR/Constant.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Dominators.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Use.h"
#include "llvm/IR/User.h"
#include "llvm/IR/Value.h"
#include "llvm/IR/Verifier.h"
#include "llvm/InitializePasses.h"
#include "llvm/Pass.h"
#include "llvm/Support/Allocator.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Compiler.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Transforms/Utils/Local.h"
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <iterator>
#include <map>
#include <set>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

struct  false::GepNode
struct  false::in_set

Namespaces

namespace  false
namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.

Macros

#define DEBUG_TYPE   "commgep"

Functions

 INITIALIZE_PASS_BEGIN (HexagonCommonGEP, "hcommgep", "Hexagon Common GEP", false, false) INITIALIZE_PASS_END(HexagonCommonGEP
raw_ostreamfalse::operator<< (raw_ostream &OS, const GepNode &GN)
template<typename NodeContainer>
void false::dump_node_container (raw_ostream &OS, const NodeContainer &S)
raw_ostreamfalse::operator<< (raw_ostream &OS, const NodeVect &S) LLVM_ATTRIBUTE_UNUSED
raw_ostreamfalse::operator<< (raw_ostream &OS, const NodeToUsesMap &M) LLVM_ATTRIBUTE_UNUSED
void * operator new (size_t, SpecificBumpPtrAllocator< GepNode > &A)
static void invert_find_roots (const NodeVect &Nodes, NodeChildrenMap &NCM, NodeVect &Roots)
static void nodes_for_root (GepNode *Root, NodeChildrenMap &NCM, NodeSet &Nodes)
static const NodeSetnode_class (GepNode *N, NodeSymRel &Rel)
static NodePair node_pair (GepNode *N1, GepNode *N2)
static unsigned node_hash (GepNode *N)
static bool node_eq (GepNode *N1, GepNode *N2, NodePairSet &Eq, NodePairSet &Ne)
template<typename T>
static BasicBlocknearest_common_dominator (DominatorTree *DT, T &Blocks)
template<typename T>
static BasicBlocknearest_common_dominatee (DominatorTree *DT, T &Blocks)
template<typename T>
static BasicBlock::iterator first_use_of_in_block (T &Values, BasicBlock *B)
static bool is_empty (const BasicBlock *B)
static BasicBlockpreheader (DominatorTree *DT, Loop *L)
FunctionPassllvm::createHexagonCommonGEP ()

Variables

static cl::opt< boolOptSpeculate ("commgep-speculate", cl::init(true), cl::Hidden)
static cl::opt< boolOptEnableInv ("commgep-inv", cl::init(true), cl::Hidden)
static cl::opt< boolOptEnableConst ("commgep-const", cl::init(true), cl::Hidden)
 hcommgep
Hexagon Common GEP
Hexagon Common false

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "commgep"

Definition at line 51 of file HexagonCommonGEP.cpp.

Function Documentation

◆ first_use_of_in_block()

template<typename T>
BasicBlock::iterator first_use_of_in_block ( T & Values,
BasicBlock * B )
static

Definition at line 710 of file HexagonCommonGEP.cpp.

References B(), llvm::cast(), E(), I, llvm::isa(), and T.

◆ INITIALIZE_PASS_BEGIN()

INITIALIZE_PASS_BEGIN ( HexagonCommonGEP ,
"hcommgep" ,
"Hexagon Common GEP" ,
false ,
false  )

◆ invert_find_roots()

void invert_find_roots ( const NodeVect & Nodes,
NodeChildrenMap & NCM,
NodeVect & Roots )
static

Definition at line 424 of file HexagonCommonGEP.cpp.

References N.

◆ is_empty()

bool is_empty ( const BasicBlock * B)
static

Definition at line 736 of file HexagonCommonGEP.cpp.

References B().

◆ nearest_common_dominatee()

template<typename T>
BasicBlock * nearest_common_dominatee ( DominatorTree * DT,
T & Blocks )
static

◆ nearest_common_dominator()

template<typename T>
BasicBlock * nearest_common_dominator ( DominatorTree * DT,
T & Blocks )
static

◆ node_class()

const NodeSet * node_class ( GepNode * N,
NodeSymRel & Rel )
static

Definition at line 462 of file HexagonCommonGEP.cpp.

References N.

◆ node_eq()

bool node_eq ( GepNode * N1,
GepNode * N2,
NodePairSet & Eq,
NodePairSet & Ne )
static

Definition at line 488 of file HexagonCommonGEP.cpp.

References node_eq(), node_hash(), node_pair(), and P.

Referenced by node_eq().

◆ node_hash()

unsigned node_hash ( GepNode * N)
static

Definition at line 480 of file HexagonCommonGEP.cpp.

References N.

Referenced by node_eq().

◆ node_pair()

NodePair node_pair ( GepNode * N1,
GepNode * N2 )
static

Definition at line 472 of file HexagonCommonGEP.cpp.

Referenced by node_eq().

◆ nodes_for_root()

void nodes_for_root ( GepNode * Root,
NodeChildrenMap & NCM,
NodeSet & Nodes )
static

Definition at line 436 of file HexagonCommonGEP.cpp.

References llvm::append_range(), llvm::First, llvm::NodeSet::insert(), and N.

◆ operator new()

void * operator new ( size_t ,
SpecificBumpPtrAllocator< GepNode > & A )
inline

Definition at line 313 of file HexagonCommonGEP.cpp.

References A().

◆ preheader()

Variable Documentation

◆ false

Hexagon Common false

Definition at line 165 of file HexagonCommonGEP.cpp.

◆ GEP

Hexagon Common GEP

Definition at line 164 of file HexagonCommonGEP.cpp.

Referenced by llvm::SystemZTTIImpl::adjustInliningThreshold(), allZeroIndices(), llvm::PoisonFlags::apply(), aspaceWrapValue(), calculateGEPOffset(), calculateVectorIndex(), llvm::FastISel::canFoldAddIntoGEP(), canonicalizeGEPOfConstGEPI8(), canRewriteGEPAsOffset(), llvm::slpvectorizer::BoUpSLP::canVectorizeLoads(), chainToBasePointerCost(), checkOverflow(), CleanupConstantGlobalUsers(), collectOffsets(), collectSRATypes(), combineAndLoadToBZHI(), combineConstantOffsets(), llvm::CommonPointerBase::compute(), llvm::ConstantFoldCastOperand(), llvm::ConstantFoldExtractElementInstruction(), convertToParamAS(), convertToRelLookupTable(), copyArrayElemsForMemCpy(), llvm::MachineInstr::copyFlagsFromInstruction(), countNumMemAccesses(), llvm::GetElementPtrInst::Create(), decompose(), decomposeGEP(), llvm::decomposeLinearExpression(), DoFlattenLoopPair(), dynamicallyLoadArray(), llvm::emitGEPOffset(), llvm::VPWidenGEPRecipe::execute(), fillCommonArgs(), llvm::findAllocaForValue(), findArgParts(), findBaseDefiningValue(), findBaseDefiningValueOfVector(), findForkedSCEVs(), llvm::findHistogram(), findLoadCallsAtConstantOffset(), findRematerializableChainToBasePointer(), FindSingleUseIdentifiedObject(), fixI8UseChain(), llvm::InstCombinerImpl::foldCmpLoadFromIndexedGlobal(), foldDependentIVs(), foldGEPChainAsStructAccess(), foldGEPChainAsU8Access(), foldGEPOfPhi(), llvm::InstCombinerImpl::foldICmpAndConstant(), llvm::InstCombinerImpl::foldICmpCommutative(), llvm::InstCombinerImpl::foldICmpInstWithConstantNotInt(), llvm::InstCombinerImpl::foldPHIArgGEPIntoPHI(), llvm::InstCombinerImpl::foldPtrToIntOfGEP(), foldSelectGEP(), llvm::InstCombinerImpl::foldVectorSelect(), llvm::gep_type_begin(), llvm::gep_type_begin(), llvm::gep_type_end(), llvm::gep_type_end(), GEPSequentialConstIndexed(), GEPToVectorIndex(), llvm::ConstantExpr::getAlignOf(), getBaseType(), getConstraintFromMemoryAccess(), llvm::ARMTTIImpl::getGatherScatterOpCost(), llvm::ScalarEvolution::getGEPExpr(), getGEPSmallConstantIntOffsetV(), llvm::getIndexExpressionsFromGEP(), llvm::TargetTransformInfoImplCRTPBase< T >::getInstructionCost(), getLoopVariantGEPOperand(), llvm::X86TTIImpl::getMemoryOpCost(), getOffloadingArrayType(), getOptimizationFlags(), llvm::RISCVTTIImpl::getPointersChainCost(), llvm::TargetTransformInfoImplCRTPBase< T >::getPointersChainCost(), getSalvageOpsForGEP(), llvm::ConstantExpr::getSizeOf(), getStrideAndModOffsetOfGEP(), llvm::getUnderlyingObject(), getUniformBase(), llvm::AMDGPUTTIImpl::getUnrollingPreferences(), HasAddressTaken(), hasOnlyOneNonZeroIndex(), llvm::Operator::hasPoisonGeneratingFlags(), hoistGEP(), insertSpills(), llvm::IRSimilarity::isClose(), llvm::IsConstantOffsetFromGlobal(), isDereferenceableAndAlignedPointer(), llvm::CommonPointerBase::isExpensive(), isFoldableInLoop(), isGEPFoldable(), isGEPFoldable(), isGEPKnownNonNull(), isKnownTypeIdMember(), isNoWrap(), isOnlyCopiedFromConstantMemory(), isPointerOperand(), IsPtrInBounds(), isSafeAndProfitableToSinkLoad(), IsSafeComputationToRemove(), legalizeScalarLoadStoreOnArrays(), LLVM_ATTRIBUTE_C_DEPRECATED(), LLVMGEPGetNoWrapFlags(), LLVMGEPSetNoWrapFlags(), LLVMGetGEPSourceElementType(), LLVMGetNumIndices(), LLVMIsInBounds(), LLVMSetIsInBounds(), llvm::lowerGlobalIFuncUsersAsGlobalCtor(), makeGEPAndLoad(), makeGEPAndStore(), llvm::PatternMatch::PtrAdd_match< PointerOpTy, OffsetOpTy >::match(), llvm::InstModificationIRStrategy::mutate(), parseJumpTable(), passingValueIsAlwaysUndefined(), llvm::PoisonFlags::PoisonFlags(), reconstructCommon(), reconstructGEP(), llvm::BPFPreserveStaticOffsetPass::reconstructLoad(), llvm::BPFPreserveStaticOffsetPass::reconstructStore(), llvm::refineInstruction(), removePAICalls(), replaceAccess(), replaceWithGEP(), rewriteAccessChain(), rewriteGEPAsOffset(), rsrcPartRoot(), llvm::JumpTableToSwitchPass::run(), llvm::TypeFinder::run(), llvm::salvageDebugInfoImpl(), shouldCanonicalizeGEPToPtrAdd(), shouldConvertToRelLookupTable(), shouldMergeGEPs(), shouldSinkVectorOfPtrs(), llvm::InstCombinerImpl::SimplifyDemandedUseBits(), llvm::InstCombinerImpl::SimplifyDemandedVectorElts(), splitGlobal(), StripPointerGEPsAndCasts(), llvm::VPlanTransforms::tryToConvertVPInstructionsToVPRecipes(), llvm::VPRecipeBuilder::tryToCreateWidenRecipe(), tryToFoldLiveIns(), tryToRecognizeTableBasedCttz(), unrollGEPLoad(), unrollGEPStore(), upcastI8AllocasAndUses(), llvm::dxil::ValueEnumerator::ValueEnumerator(), llvm::ValueEnumerator::ValueEnumerator(), llvm::InstCombinerImpl::visitExtractElementInst(), llvm::InstCombinerImpl::visitExtractValueInst(), llvm::InstCombinerImpl::visitFCmpInst(), llvm::InstCombinerImpl::visitGEPOfGEP(), llvm::ObjectSizeOffsetEvaluator::visitGEPOperator(), llvm::InstCombinerImpl::visitGetElementPtrInst(), llvm::InstCombinerImpl::visitSelectInst(), llvm::InstCombinerImpl::visitStoreInst(), llvm::InstCombinerImpl::visitSub(), llvm::VPIRFlags::VPIRFlags(), llvm::VPWidenGEPRecipe::VPWidenGEPRecipe(), WriteConstantInternal(), and WriteOptimizationInfo().

◆ hcommgep

hcommgep

Definition at line 164 of file HexagonCommonGEP.cpp.

◆ OptEnableConst

cl::opt< bool > OptEnableConst("commgep-const", cl::init(true), cl::Hidden) ( "commgep-const" ,
cl::init(true) ,
cl::Hidden  )
static

◆ OptEnableInv

cl::opt< bool > OptEnableInv("commgep-inv", cl::init(true), cl::Hidden) ( "commgep-inv" ,
cl::init(true) ,
cl::Hidden  )
static

◆ OptSpeculate

cl::opt< bool > OptSpeculate("commgep-speculate", cl::init(true), cl::Hidden) ( "commgep-speculate" ,
cl::init(true) ,
cl::Hidden  )
static

Referenced by preheader().