LLVM
15.0.0git
|
#include "VPlan.h"
#include "VPlanValue.h"
#include "llvm/ADT/DenseMap.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Type.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/raw_ostream.h"
#include <algorithm>
#include <cassert>
#include <utility>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "vplan-slp" |
Functions | |
static SmallVector< VPValue *, 4 > | getOperands (ArrayRef< VPValue * > Values, unsigned OperandIndex) |
static bool | areCommutative (ArrayRef< VPValue * > Values) |
static SmallVector< SmallVector< VPValue *, 4 >, 4 > | getOperands (ArrayRef< VPValue * > Values) |
static Optional< unsigned > | getOpcode (ArrayRef< VPValue * > Values) |
Returns the opcode of Values or ~0 if they do not all agree. More... | |
static bool | areConsecutiveOrMatch (VPInstruction *A, VPInstruction *B, VPInterleavedAccessInfo &IAI) |
Returns true if A and B access sequential memory if they are loads or stores or if they have identical opcodes otherwise. More... | |
static unsigned | getLAScore (VPValue *V1, VPValue *V2, unsigned MaxLevel, VPInterleavedAccessInfo &IAI) |
Implements getLAScore from Listing 7 in the paper. More... | |
Variables | |
static unsigned | LookaheadMaxDepth = 5 |
#define DEBUG_TYPE "vplan-slp" |
Definition at line 36 of file VPlanSLP.cpp.
Definition at line 164 of file VPlanSLP.cpp.
References getOpcode(), and llvm::Instruction::isCommutative().
Referenced by llvm::VPlanSlp::buildGraph().
|
static |
Returns true if A and B access sequential memory if they are loads or stores or if they have identical opcodes otherwise.
Definition at line 201 of file VPlanSLP.cpp.
References B, llvm::VPInterleavedAccessInfo::getInterleaveGroup(), llvm::SPII::Load, and llvm::SPII::Store.
Referenced by getLAScore().
|
static |
Implements getLAScore from Listing 7 in the paper.
Traverses and compares operands of V1 and V2 to MaxLevel.
Definition at line 217 of file VPlanSLP.cpp.
References areConsecutiveOrMatch(), I, I1, and llvm::NVPTX::PTXLdStInstCode::V2.
Returns the opcode of Values or ~0 if they do not all agree.
Definition at line 190 of file VPlanSLP.cpp.
References llvm::any_of(), and llvm::None.
Referenced by llvm::R600InstrInfo::analyzeBranch(), areCommutative(), areCompatibleCmpOps(), llvm::CanonicalLoopInfo::assertOK(), llvm::VPlanSlp::buildGraph(), buildNew(), canVectorizeLoads(), llvm::ConstantFoldBinaryInstruction(), FoldBUILD_VECTOR(), llvm::SelectionDAG::FoldConstantArithmetic(), foldOperationIntoSelectOperand(), getAdjustedPtr(), llvm::RecurrenceDescriptor::getReductionOpChain(), isSignedMinMaxClamp(), LinearizeExprTree(), LLVMGetConstOpcode(), lowerV8I16Shuffle(), llvm::VPReplicateRecipe::print(), ReorganizeVector(), StripPointerGEPsAndCasts(), llvm::InstCombinerImpl::visitCallInst(), llvm::InstCombinerImpl::visitExtractElementInst(), and llvm::InstCombinerImpl::visitShl().
|
static |
Definition at line 170 of file VPlanSLP.cpp.
References getOperands(), I, llvm_unreachable, llvm::SPII::Load, and llvm::SPII::Store.
|
static |
Definition at line 153 of file VPlanSLP.cpp.
References Operands.
Referenced by llvm::VPlanSlp::buildGraph(), getInvertibleOperands(), and getOperands().
|
static |
Definition at line 39 of file VPlanSLP.cpp.