LLVM 22.0.0git
HexagonISelDAGToDAGHVX.cpp File Reference
#include "HexagonISelDAGToDAG.h"
#include "HexagonISelLowering.h"
#include "llvm/ADT/BitVector.h"
#include "llvm/ADT/SetVector.h"
#include "llvm/CodeGen/SelectionDAGISel.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicsHexagon.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>

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 30 of file HexagonISelDAGToDAGHVX.cpp.

Function Documentation

◆ findStrip()

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

Definition at line 1015 of file HexagonISelDAGToDAGHVX.cpp.

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

◆ getHexagonLowering()

const HexagonTargetLowering & getHexagonLowering ( SelectionDAG & G)
static

Definition at line 910 of file HexagonISelDAGToDAGHVX.cpp.

References G.

Referenced by llvm::HvxSelector::HvxSelector().

◆ getHexagonSubtarget()

const HexagonSubtarget & getHexagonSubtarget ( SelectionDAG & G)
static

Definition at line 913 of file HexagonISelDAGToDAGHVX.cpp.

References G.

Referenced by llvm::HvxSelector::HvxSelector().

◆ getInputSegmentList()

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

◆ getOutputSegmentMap()

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

Definition at line 1070 of file HexagonISelDAGToDAGHVX.cpp.

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

◆ isIdentity()

bool isIdentity ( ArrayRef< int > Mask)
static

Definition at line 1035 of file HexagonISelDAGToDAGHVX.cpp.

References E(), and I.

◆ isLowHalfOnly()

bool isLowHalfOnly ( ArrayRef< int > Mask)
static

Definition at line 1044 of file HexagonISelDAGToDAGHVX.cpp.

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

◆ isUndef()

bool isUndef ( ArrayRef< int > Mask)
static

Definition at line 1028 of file HexagonISelDAGToDAGHVX.cpp.

◆ packSegmentMask()

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

◆ splitMask()

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

Definition at line 997 of file HexagonISelDAGToDAGHVX.cpp.

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