LLVM 17.0.0git
Classes | Namespaces | Macros | Typedefs | Functions
HexagonISelDAGToDAGHVX.cpp File Reference
#include "Hexagon.h"
#include "HexagonISelDAGToDAG.h"
#include "HexagonISelLowering.h"
#include "HexagonTargetMachine.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsHexagon.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/MathExtras.h"
#include <algorithm>
#include <cmath>
#include <deque>
#include <functional>
#include <map>
#include <optional>
#include <set>
#include <unordered_map>
#include <utility>
#include <vector>
Include dependency graph for HexagonISelDAGToDAGHVX.cpp:

Go to the source code of this file.

Classes

struct  llvm::HvxSelector
 
struct  std::hash< SDValue >
 

Namespaces

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

Macros

#define DEBUG_TYPE   "hexagon-isel"
 

Typedefs

using shuffles::MaskT = SmallVector< int, 128 >
 

Functions

ArrayRef< int > shuffles::lo (ArrayRef< int > Vuu)
 
ArrayRef< int > shuffles::hi (ArrayRef< int > Vuu)
 
MaskT shuffles::vshuffvdd (ArrayRef< int > Vu, ArrayRef< int > Vv, unsigned Rt)
 
MaskT shuffles::vdealvdd (ArrayRef< int > Vu, ArrayRef< int > Vv, unsigned Rt)
 
MaskT shuffles::vpack (ArrayRef< int > Vu, ArrayRef< int > Vv, unsigned Size, bool TakeOdd)
 
MaskT shuffles::vshuff (ArrayRef< int > Vu, ArrayRef< int > Vv, unsigned Size, bool TakeOdd)
 
MaskT shuffles::vdeal (ArrayRef< int > Vu, ArrayRef< int > Vv, unsigned Size, bool TakeOdd)
 
MaskT shuffles::vdealb4w (ArrayRef< int > Vu, ArrayRef< int > Vv)
 
template<typename ShuffFunc , typename... OptArgs>
auto shuffles::mask (ShuffFunc S, unsigned Length, OptArgs... args) -> MaskT
 
static const HexagonTargetLoweringgetHexagonLowering (SelectionDAG &G)
 
static const HexagonSubtargetgetHexagonSubtarget (SelectionDAG &G)
 
static void splitMask (ArrayRef< int > Mask, MutableArrayRef< int > MaskL, MutableArrayRef< int > MaskR)
 
static std::pair< int, unsignedfindStrip (ArrayRef< int > A, int Inc, unsigned MaxLen)
 
static bool isUndef (ArrayRef< int > Mask)
 
static bool isIdentity (ArrayRef< int > Mask)
 
static bool isLowHalfOnly (ArrayRef< int > Mask)
 
static SmallVector< unsigned, 4 > getInputSegmentList (ShuffleMask SM, unsigned SegLen)
 
static SmallVector< unsigned, 4 > getOutputSegmentMap (ShuffleMask SM, unsigned SegLen)
 
static void packSegmentMask (ArrayRef< int > Mask, ArrayRef< unsigned > OutSegMap, unsigned SegLen, MutableArrayRef< int > PackedMask)
 

Macro Definition Documentation

◆ DEBUG_TYPE

#define DEBUG_TYPE   "hexagon-isel"

Definition at line 34 of file HexagonISelDAGToDAGHVX.cpp.

Function Documentation

◆ findStrip()

static std::pair< int, unsigned > findStrip ( ArrayRef< int >  A,
int  Inc,
unsigned  MaxLen 
)
static

Definition at line 1019 of file HexagonISelDAGToDAGHVX.cpp.

References A, assert(), E, F, and I.

◆ getHexagonLowering()

static const HexagonTargetLowering & getHexagonLowering ( SelectionDAG G)
static

Definition at line 915 of file HexagonISelDAGToDAGHVX.cpp.

References G.

◆ getHexagonSubtarget()

static const HexagonSubtarget & getHexagonSubtarget ( SelectionDAG G)
static

Definition at line 918 of file HexagonISelDAGToDAGHVX.cpp.

References G.

◆ getInputSegmentList()

static SmallVector< unsigned, 4 > getInputSegmentList ( ShuffleMask  SM,
unsigned  SegLen 
)
static

◆ getOutputSegmentMap()

static SmallVector< unsigned, 4 > getOutputSegmentMap ( ShuffleMask  SM,
unsigned  SegLen 
)
static

Definition at line 1075 of file HexagonISelDAGToDAGHVX.cpp.

References assert(), E, G, I, Idx, and llvm::SmallVectorBase< Size_T >::size().

◆ isIdentity()

static bool isIdentity ( ArrayRef< int >  Mask)
static

Definition at line 1039 of file HexagonISelDAGToDAGHVX.cpp.

References E, and I.

◆ isLowHalfOnly()

static bool isLowHalfOnly ( ArrayRef< int >  Mask)
static

Definition at line 1048 of file HexagonISelDAGToDAGHVX.cpp.

References llvm::all_of(), and assert().

◆ isUndef()

static bool isUndef ( ArrayRef< int >  Mask)
static

◆ packSegmentMask()

static void packSegmentMask ( ArrayRef< int >  Mask,
ArrayRef< unsigned OutSegMap,
unsigned  SegLen,
MutableArrayRef< int >  PackedMask 
)
static

◆ splitMask()

static void splitMask ( ArrayRef< int >  Mask,
MutableArrayRef< int >  MaskL,
MutableArrayRef< int >  MaskR 
)
static

Definition at line 1001 of file HexagonISelDAGToDAGHVX.cpp.

References assert(), I, and llvm::ArrayRef< T >::size().