LLVM 24.0.0git
SLPCompatibilityAnalysis.cpp File Reference
#include "SLPCompatibilityAnalysis.h"
#include "SLPUtils.h"
#include "llvm/ADT/APInt.h"
#include "llvm/ADT/ArrayRef.h"
#include "llvm/ADT/STLExtras.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/ADT/SmallVector.h"
#include "llvm/ADT/SmallVectorExtras.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/InstrTypes.h"
#include "llvm/IR/Instruction.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/IR/Value.h"
#include "llvm/Support/Casting.h"
#include "llvm/Support/ErrorHandling.h"
#include <algorithm>
#include <array>
#include <cassert>
#include <utility>

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
namespace  llvm::slpvectorizer
 A private "module" namespace for types and utilities used by this pass.

Functions

bool llvm::slpvectorizer::isValidForAlternation (unsigned Opcode)
bool llvm::slpvectorizer::isAbsorbableFMulOrFAdd (ArrayRef< Value * > VL, Value *V)
 Checks if V is a single-use fmul/fadd with operands outside VL.
bool llvm::slpvectorizer::isAbsorbableCopyableFMulOrFAdd (const InstructionsState &S, Value *V)
 Checks if V is a copyable single-use fmul/fadd, absorbable as fmuladd(a, b, -0.0) or fmuladd(1.0, a, b).
bool llvm::slpvectorizer::hasOnlyAbsorbableCopyableFMulOrFAdds (ArrayRef< Value * > VL)
 Checks if every copyable in VL is an absorbable fmul/fadd: the binops die instead of being computed and gathered.
static Instructionllvm::slpvectorizer::findInstructionWithOpcode (ArrayRef< Value * > VL, unsigned Opcode)
 Find an instruction with a specific opcode in VL.
static bool llvm::slpvectorizer::areCompatibleCmpOps (Value *BaseOp0, Value *BaseOp1, Value *Op0, Value *Op1, const TargetLibraryInfo &TLI)
 Checks if the provided operands of 2 cmp instructions are compatible, i.e.
static bool llvm::slpvectorizer::isCmpSameOrSwapped (const CmpInst *BaseCI, const CmpInst *CI, const TargetLibraryInfo &TLI)
InstructionsState llvm::slpvectorizer::getSameOpcode (ArrayRef< Value * > VL, const TargetLibraryInfo &TLI)
std::pair< Instruction *, SmallVector< Value * > > llvm::slpvectorizer::convertTo (Instruction *I, const InstructionsState &S)
bool llvm::slpvectorizer::isAlternateInstruction (Instruction *I, Instruction *MainOp, Instruction *AltOp, const TargetLibraryInfo &TLI)
 Checks if the specified instruction I is an alternate operation for the given MainOp and AltOp instructions.
SmallVector< SmallVector< Value * > > llvm::slpvectorizer::scanAltAssociativeOperands (const InstructionsState &S, const TargetLibraryInfo &TLI, ArrayRef< Value * > VL, ArrayRef< Value * > Op0, ArrayRef< Value * > Op1, SmallVectorImpl< Value * > &ReassocScalars, SmallBitVector &SubLanes)
 Peel the per-lane associative chains of an alternate node into operand columns.