Thanks to visit codestin.com
Credit goes to llvm.org

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 TARGET_NODE_CASE(NAME)
#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, ...)
#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/4]

#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/4]

#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/4]

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

◆ ADD_BINARY_VVP_OP [4/4]

#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/4]

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

◆ ADD_BINARY_VVP_OP_COMPACT [2/4]

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

◆ ADD_BINARY_VVP_OP_COMPACT [3/4]

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

◆ ADD_BINARY_VVP_OP_COMPACT [4/4]

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

◆ ADD_REDUCE_VVP_OP [1/4]

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

◆ ADD_REDUCE_VVP_OP [2/4]

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

◆ ADD_REDUCE_VVP_OP [3/4]

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

◆ ADD_REDUCE_VVP_OP [4/4]

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

◆ ADD_TERNARY_VVP_OP [1/4]

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

◆ ADD_TERNARY_VVP_OP [2/4]

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

◆ ADD_TERNARY_VVP_OP [3/4]

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

◆ ADD_TERNARY_VVP_OP [4/4]

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

◆ ADD_UNARY_VVP_OP [1/4]

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

◆ ADD_UNARY_VVP_OP [2/4]

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

◆ ADD_UNARY_VVP_OP [3/4]

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

◆ ADD_UNARY_VVP_OP [4/4]

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

◆ ADD_VVP_OP [1/4]

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

◆ ADD_VVP_OP [2/4]

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

◆ ADD_VVP_OP [3/4]

#define ADD_VVP_OP ( VVP_NAME,
... )
Value:
#define TARGET_NODE_CASE(NAME)

◆ ADD_VVP_OP [4/4]

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

◆ DEBUG_TYPE

#define DEBUG_TYPE   "ve-lower"

Definition at line 38 of file VEISelLowering.cpp.

◆ HANDLE_VP_TO_VVP [1/4]

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

◆ HANDLE_VP_TO_VVP [2/4]

#define HANDLE_VP_TO_VVP ( VPOPC,
VVPOPC )

◆ HANDLE_VP_TO_VVP [3/4]

#define HANDLE_VP_TO_VVP ( VPOPC,
VVPOPC )

◆ HANDLE_VP_TO_VVP [4/4]

#define HANDLE_VP_TO_VVP ( VPOPC,
VVPOPC )

◆ HANDLE_VVP_REDUCE_TO_SCALAR [1/4]

#define HANDLE_VVP_REDUCE_TO_SCALAR ( VVP_RED_ISD,
REDUCE_ISD )

◆ HANDLE_VVP_REDUCE_TO_SCALAR [2/4]

#define HANDLE_VVP_REDUCE_TO_SCALAR ( VVP_RED_ISD,
REDUCE_ISD )

◆ HANDLE_VVP_REDUCE_TO_SCALAR [3/4]

#define HANDLE_VVP_REDUCE_TO_SCALAR ( VVP_RED_ISD,
REDUCE_ISD )

◆ HANDLE_VVP_REDUCE_TO_SCALAR [4/4]

#define HANDLE_VVP_REDUCE_TO_SCALAR ( VVP_RED_ISD,
REDUCE_ISD )

◆ HELPER_REDUCTION [1/4]

#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/4]

#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/4]

#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 [4/4]

#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/4]

#define REGISTER_PACKED ( OPC)

◆ REGISTER_PACKED [2/4]

#define REGISTER_PACKED ( OPC)

◆ REGISTER_PACKED [3/4]

#define REGISTER_PACKED ( OPC)

◆ REGISTER_PACKED [4/4]

#define REGISTER_PACKED ( OPC)

◆ TARGET_NODE_CASE

#define TARGET_NODE_CASE ( NAME)
Value:
case VEISD::NAME: \
return "VEISD::" #NAME;

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

Function Documentation

◆ decideComp()

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

◆ decideCompType()

EVT decideCompType ( EVT SrcVT)
static

Definition at line 2724 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 1805 of file VEISelLowering.cpp.

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

◆ getUniqueInsertion()

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

Definition at line 1779 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 2730 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 79 of file VEISelLowering.cpp.

◆ AllPackedVTs

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

Definition at line 81 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 76 of file VEISelLowering.cpp.