LLVM 20.0.0git
|
#include "llvm/CodeGen/ComplexDeinterleavingPass.h"
#include "llvm/ADT/MapVector.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/Analysis/TargetLibraryInfo.h"
#include "llvm/Analysis/TargetTransformInfo.h"
#include "llvm/CodeGen/TargetLowering.h"
#include "llvm/CodeGen/TargetPassConfig.h"
#include "llvm/CodeGen/TargetSubtargetInfo.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/PatternMatch.h"
#include "llvm/InitializePasses.h"
#include "llvm/Target/TargetMachine.h"
#include "llvm/Transforms/Utils/Local.h"
#include <algorithm>
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "complex-deinterleaving" |
Functions | |
STATISTIC (NumComplexTransformations, "Amount of complex patterns transformed") | |
static bool | isInterleavingMask (ArrayRef< int > Mask) |
Checks the given mask, and determines whether said mask is interleaving. | |
static bool | isDeinterleavingMask (ArrayRef< int > Mask) |
Checks the given mask, and determines whether said mask is deinterleaving. | |
static bool | isNeg (Value *V) |
Returns true if the operation is a negation of V, and it works for both integers and floats. | |
static Value * | getNegOperand (Value *V) |
Returns the operand for negation operation. | |
INITIALIZE_PASS_BEGIN (ComplexDeinterleavingLegacyPass, DEBUG_TYPE, "Complex Deinterleaving", false, false) INITIALIZE_PASS_END(ComplexDeinterleavingLegacyPass | |
static bool | isInstructionPairAdd (Instruction *A, Instruction *B) |
static bool | isInstructionPairMul (Instruction *A, Instruction *B) |
static bool | isInstructionPotentiallySymmetric (Instruction *I) |
static Value * | replaceSymmetricNode (IRBuilderBase &B, unsigned Opcode, std::optional< FastMathFlags > Flags, Value *InputA, Value *InputB) |
Variables | |
static cl::opt< bool > | ComplexDeinterleavingEnabled ("enable-complex-deinterleaving", cl::desc("Enable generation of complex instructions"), cl::init(true), cl::Hidden) |
DEBUG_TYPE | |
Complex | Deinterleaving |
Complex | false |
#define DEBUG_TYPE "complex-deinterleaving" |
Definition at line 80 of file ComplexDeinterleavingPass.cpp.
Returns the operand for negation operation.
Definition at line 523 of file ComplexDeinterleavingPass.cpp.
INITIALIZE_PASS_BEGIN | ( | ComplexDeinterleavingLegacyPass | , |
DEBUG_TYPE | , | ||
"Complex Deinterleaving" | , | ||
false | , | ||
false | |||
) |
Checks the given mask, and determines whether said mask is deinterleaving.
To be deinterleaving, a mask must increment in steps of 2, and either start with 0 or 1. (e.g. an 8x vector deinterleaving mask would be either <0, 2, 4, 6> or <1, 3, 5, 7>).
Definition at line 507 of file ComplexDeinterleavingPass.cpp.
References Idx, and llvm::Offset.
|
static |
Definition at line 819 of file ComplexDeinterleavingPass.cpp.
|
static |
Definition at line 829 of file ComplexDeinterleavingPass.cpp.
References A, B, llvm::PatternMatch::m_BinOp(), llvm::PatternMatch::m_FMul(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
|
static |
Definition at line 836 of file ComplexDeinterleavingPass.cpp.
References I.
Checks the given mask, and determines whether said mask is interleaving.
To be interleaving, a mask must alternate between i
and i + (Length / 2)
, and must contain all numbers within the range of [0..Length)
(e.g. a 4x vector interleaving mask would be <0, 2, 1, 3>).
Definition at line 492 of file ComplexDeinterleavingPass.cpp.
References Idx.
Returns true if the operation is a negation of V, and it works for both integers and floats.
Definition at line 519 of file ComplexDeinterleavingPass.cpp.
References llvm::PatternMatch::m_FNeg(), llvm::PatternMatch::m_Neg(), llvm::PatternMatch::m_Value(), and llvm::PatternMatch::match().
Referenced by DecodeBFLabelOperand(), expandMOVImmSimple(), getNegOperand(), KnuthDiv(), llvm::APIntOps::RoundDoubleToAPInt(), and llvm::APInt::roundToDouble().
|
static |
Definition at line 1883 of file ComplexDeinterleavingPass.cpp.
References B, I, and llvm_unreachable.
STATISTIC | ( | NumComplexTransformations | , |
"Amount of complex patterns transformed" | |||
) |
|
static |
DEBUG_TYPE |
Definition at line 446 of file ComplexDeinterleavingPass.cpp.
Complex Deinterleaving |
Definition at line 447 of file ComplexDeinterleavingPass.cpp.
Complex false |
Definition at line 447 of file ComplexDeinterleavingPass.cpp.