LLVM 22.0.0git
VEISelLowering.cpp File Reference

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "ve-lower"
#define HANDLE_VP_TO_VVP(VP_OPC, VVP_NAME)
#define ADD_VVP_OP(VVP_NAME, ISD_NAME)
#define ADD_UNARY_VVP_OP(VVPNAME, SDNAME)
#define ADD_BINARY_VVP_OP(VVPNAME, VPNAME, SDNAME)
#define ADD_TERNARY_VVP_OP(VVPNAME, SDNAME)
#define ADD_BINARY_VVP_OP_COMPACT(NAME)
#define REGISTER_PACKED(OPC)
#define ADD_REDUCE_VVP_OP(OPC, SDNAME)
#define HANDLE_VVP_REDUCE_TO_SCALAR(VVP_RED_ISD, REDUCE_ISD)
#define HELPER_REDUCTION(OPC, SCALAR_OPC)
#define ADD_VVP_OP(VVP_NAME, ...)
#define HANDLE_VP_TO_VVP(VPOPC, VVPOPC)
#define ADD_UNARY_VVP_OP(VVPNAME, SDNAME)
#define ADD_BINARY_VVP_OP(VVPNAME, VPNAME, SDNAME)
#define ADD_TERNARY_VVP_OP(VVPNAME, SDNAME)
#define ADD_BINARY_VVP_OP_COMPACT(NAME)
#define REGISTER_PACKED(OPC)
#define ADD_REDUCE_VVP_OP(OPC, SDNAME)
#define HANDLE_VVP_REDUCE_TO_SCALAR(VVP_RED_ISD, REDUCE_ISD)
#define HELPER_REDUCTION(OPC, SCALAR_OPC)
#define ADD_VVP_OP(VVP_NAME, ISD_NAME)
#define HANDLE_VP_TO_VVP(VPOPC, VVPOPC)
#define ADD_UNARY_VVP_OP(VVPNAME, SDNAME)
#define ADD_BINARY_VVP_OP(VVPNAME, VPNAME, SDNAME)
#define ADD_TERNARY_VVP_OP(VVPNAME, SDNAME)
#define ADD_BINARY_VVP_OP_COMPACT(NAME)
#define REGISTER_PACKED(OPC)
#define ADD_REDUCE_VVP_OP(OPC, SDNAME)
#define HANDLE_VVP_REDUCE_TO_SCALAR(VVP_RED_ISD, REDUCE_ISD)
#define HELPER_REDUCTION(OPC, SCALAR_OPC)

Functions

CCAssignFn * getReturnCC (CallingConv::ID CallConv)
CCAssignFn * getParamCC (CallingConv::ID CallConv, bool IsVarArg)
static SDValue prepareTS1AM (SDValue Op, SelectionDAG &DAG, SDValue &Flag, SDValue &Bits)
static SDValue finalizeTS1AM (SDValue Op, SelectionDAG &DAG, SDValue Data, SDValue Bits)
static SDValue lowerLoadF128 (SDValue Op, SelectionDAG &DAG)
static SDValue lowerLoadI1 (SDValue Op, SelectionDAG &DAG)
static SDValue lowerStoreF128 (SDValue Op, SelectionDAG &DAG)
static SDValue lowerStoreI1 (SDValue Op, SelectionDAG &DAG)
static SDValue lowerFRAMEADDR (SDValue Op, SelectionDAG &DAG, const VETargetLowering &TLI, const VESubtarget *Subtarget)
static SDValue lowerRETURNADDR (SDValue Op, SelectionDAG &DAG, const VETargetLowering &TLI, const VESubtarget *Subtarget)
static bool getUniqueInsertion (SDNode *N, unsigned &UniqueIdx)
static SDValue getSplatValue (SDNode *N)
static bool isSimm7 (SDValue V)
static bool isMImm (SDValue V)
static unsigned decideComp (EVT SrcVT, ISD::CondCode CC)
static EVT decideCompType (EVT SrcVT)
static bool safeWithoutCompWithNull (EVT SrcVT, ISD::CondCode CC, bool WithCMov)
static SDValue generateComparison (EVT VT, SDValue LHS, SDValue RHS, ISD::CondCode CC, bool WithCMov, const SDLoc &DL, SelectionDAG &DAG)
static bool isI32InsnAllUses (const SDNode *User, const SDNode *N)
static bool isI32Insn (const SDNode *User, const SDNode *N)

Variables

static const MVT AllVectorVTs []
static const MVT AllMaskVTs [] = {MVT::v256i1, MVT::v512i1}
static const MVT AllPackedVTs [] = {MVT::v512i32, MVT::v512f32}

Macro Definition Documentation

◆ ADD_BINARY_VVP_OP [1/3]

#define ADD_BINARY_VVP_OP ( VVPNAME,
VPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME) \
HANDLE_VP_TO_VVP(VPNAME, VVPNAME)

◆ ADD_BINARY_VVP_OP [2/3]

#define ADD_BINARY_VVP_OP ( VVPNAME,
VPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME) \
HANDLE_VP_TO_VVP(VPNAME, VVPNAME)

◆ ADD_BINARY_VVP_OP [3/3]

#define ADD_BINARY_VVP_OP ( VVPNAME,
VPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME) \
HANDLE_VP_TO_VVP(VPNAME, VVPNAME)

◆ ADD_BINARY_VVP_OP_COMPACT [1/3]

#define ADD_BINARY_VVP_OP_COMPACT ( NAME)
Value:
ADD_BINARY_VVP_OP(VVP_##NAME,VP_##NAME,NAME)

◆ ADD_BINARY_VVP_OP_COMPACT [2/3]

#define ADD_BINARY_VVP_OP_COMPACT ( NAME)
Value:
ADD_BINARY_VVP_OP(VVP_##NAME,VP_##NAME,NAME)

◆ ADD_BINARY_VVP_OP_COMPACT [3/3]

#define ADD_BINARY_VVP_OP_COMPACT ( NAME)
Value:
ADD_BINARY_VVP_OP(VVP_##NAME,VP_##NAME,NAME)

◆ ADD_REDUCE_VVP_OP [1/3]

#define ADD_REDUCE_VVP_OP ( OPC,
SDNAME )
Value:
ADD_VVP_OP(OPC, SDNAME)

◆ ADD_REDUCE_VVP_OP [2/3]

#define ADD_REDUCE_VVP_OP ( OPC,
SDNAME )
Value:
ADD_VVP_OP(OPC, SDNAME)

◆ ADD_REDUCE_VVP_OP [3/3]

#define ADD_REDUCE_VVP_OP ( OPC,
SDNAME )
Value:
ADD_VVP_OP(OPC, SDNAME)

◆ ADD_TERNARY_VVP_OP [1/3]

#define ADD_TERNARY_VVP_OP ( VVPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME)

◆ ADD_TERNARY_VVP_OP [2/3]

#define ADD_TERNARY_VVP_OP ( VVPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME)

◆ ADD_TERNARY_VVP_OP [3/3]

#define ADD_TERNARY_VVP_OP ( VVPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME)

◆ ADD_UNARY_VVP_OP [1/3]

#define ADD_UNARY_VVP_OP ( VVPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME)

◆ ADD_UNARY_VVP_OP [2/3]

#define ADD_UNARY_VVP_OP ( VVPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME)

◆ ADD_UNARY_VVP_OP [3/3]

#define ADD_UNARY_VVP_OP ( VVPNAME,
SDNAME )
Value:
ADD_VVP_OP(VVPNAME,SDNAME)

◆ ADD_VVP_OP [1/3]

#define ADD_VVP_OP ( VVP_NAME,
ISD_NAME )
Value:
setOperationAction(ISD::ISD_NAME, LegalVecVT, Custom);

◆ ADD_VVP_OP [2/3]

#define ADD_VVP_OP ( VVP_NAME,
ISD_NAME )
Value:
case ISD::ISD_NAME:

◆ ADD_VVP_OP [3/3]

#define ADD_VVP_OP ( VVP_NAME,
... )
Value:
case VEISD::VVP_NAME:

◆ DEBUG_TYPE

#define DEBUG_TYPE   "ve-lower"

Definition at line 39 of file VEISelLowering.cpp.

◆ HANDLE_VP_TO_VVP [1/3]

#define HANDLE_VP_TO_VVP ( VP_OPC,
VVP_NAME )
Value:
setOperationAction(ISD::VP_OPC, LegalVecVT, Custom);

◆ HANDLE_VP_TO_VVP [2/3]

#define HANDLE_VP_TO_VVP ( VPOPC,
VVPOPC )

◆ HANDLE_VP_TO_VVP [3/3]

#define HANDLE_VP_TO_VVP ( VPOPC,
VVPOPC )

◆ HANDLE_VVP_REDUCE_TO_SCALAR [1/3]

#define HANDLE_VVP_REDUCE_TO_SCALAR ( VVP_RED_ISD,
REDUCE_ISD )

◆ HANDLE_VVP_REDUCE_TO_SCALAR [2/3]

#define HANDLE_VVP_REDUCE_TO_SCALAR ( VVP_RED_ISD,
REDUCE_ISD )

◆ HANDLE_VVP_REDUCE_TO_SCALAR [3/3]

#define HANDLE_VVP_REDUCE_TO_SCALAR ( VVP_RED_ISD,
REDUCE_ISD )

◆ HELPER_REDUCTION [1/3]

#define HELPER_REDUCTION ( OPC,
SCALAR_OPC )
Value:
ADD_REDUCE_VVP_OP(VVP_REDUCE_##OPC,VECREDUCE_##OPC) \
HANDLE_VP_TO_VVP(VP_REDUCE_##OPC, VVP_REDUCE_##OPC) \
HANDLE_VVP_REDUCE_TO_SCALAR(VVP_REDUCE_##OPC, SCALAR_OPC)

◆ HELPER_REDUCTION [2/3]

#define HELPER_REDUCTION ( OPC,
SCALAR_OPC )
Value:
ADD_REDUCE_VVP_OP(VVP_REDUCE_##OPC,VECREDUCE_##OPC) \
HANDLE_VP_TO_VVP(VP_REDUCE_##OPC, VVP_REDUCE_##OPC) \
HANDLE_VVP_REDUCE_TO_SCALAR(VVP_REDUCE_##OPC, SCALAR_OPC)

◆ HELPER_REDUCTION [3/3]

#define HELPER_REDUCTION ( OPC,
SCALAR_OPC )
Value:
ADD_REDUCE_VVP_OP(VVP_REDUCE_##OPC,VECREDUCE_##OPC) \
HANDLE_VP_TO_VVP(VP_REDUCE_##OPC, VVP_REDUCE_##OPC) \
HANDLE_VVP_REDUCE_TO_SCALAR(VVP_REDUCE_##OPC, SCALAR_OPC)

◆ REGISTER_PACKED [1/3]

#define REGISTER_PACKED ( OPC)

◆ REGISTER_PACKED [2/3]

#define REGISTER_PACKED ( OPC)

◆ REGISTER_PACKED [3/3]

#define REGISTER_PACKED ( OPC)

Function Documentation

◆ decideComp()

unsigned decideComp ( EVT SrcVT,
ISD::CondCode CC )
static

Definition at line 2677 of file VEISelLowering.cpp.

References llvm::EVT::isFloatingPoint().

Referenced by generateComparison().

◆ decideCompType()

EVT decideCompType ( EVT SrcVT)
static

Definition at line 2686 of file VEISelLowering.cpp.

Referenced by generateComparison().

◆ finalizeTS1AM()

◆ generateComparison()

◆ getParamCC()

CCAssignFn * getParamCC ( CallingConv::ID CallConv,
bool IsVarArg )

◆ getReturnCC()

CCAssignFn * getReturnCC ( CallingConv::ID CallConv)

◆ getSplatValue()

SDValue getSplatValue ( SDNode * N)
static

Definition at line 1767 of file VEISelLowering.cpp.

References llvm::dyn_cast(), N, and SDValue().

◆ getUniqueInsertion()

bool getUniqueInsertion ( SDNode * N,
unsigned & UniqueIdx )
static

Definition at line 1741 of file VEISelLowering.cpp.

References llvm::cast(), llvm::isa(), and N.

Referenced by llvm::VETargetLowering::lowerBUILD_VECTOR().

◆ isI32Insn()

◆ isI32InsnAllUses()

◆ isMImm()

◆ isSimm7()

◆ lowerFRAMEADDR()

◆ lowerLoadF128()

◆ lowerLoadI1()

◆ lowerRETURNADDR()

◆ lowerStoreF128()

◆ lowerStoreI1()

◆ prepareTS1AM()

◆ safeWithoutCompWithNull()

bool safeWithoutCompWithNull ( EVT SrcVT,
ISD::CondCode CC,
bool WithCMov )
static

Definition at line 2692 of file VEISelLowering.cpp.

References llvm::EVT::isFloatingPoint().

Referenced by generateComparison().

Variable Documentation

◆ AllMaskVTs

const MVT AllMaskVTs[] = {MVT::v256i1, MVT::v512i1}
static

Definition at line 80 of file VEISelLowering.cpp.

◆ AllPackedVTs

const MVT AllPackedVTs[] = {MVT::v512i32, MVT::v512f32}
static

Definition at line 82 of file VEISelLowering.cpp.

◆ AllVectorVTs

const MVT AllVectorVTs[]
static
Initial value:
= {MVT::v256i32, MVT::v512i32, MVT::v256i64,
MVT::v256f32, MVT::v512f32, MVT::v256f64}

Definition at line 77 of file VEISelLowering.cpp.