LLVM: lib/Target/VE/VEISelLowering.cpp File Reference (original) (raw)

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)

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 )

ADD_REDUCE_VVP_OP [2/3]

#define ADD_REDUCE_VVP_OP ( OPC,
SDNAME )

ADD_REDUCE_VVP_OP [3/3]

#define ADD_REDUCE_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 )

ADD_VVP_OP [3/3]

#define ADD_VVP_OP ( VVP_NAME,
... )

DEBUG_TYPE

#define DEBUG_TYPE "ve-lower"

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 )

decideComp()

decideCompType()

EVT decideCompType ( EVT SrcVT) static

finalizeTS1AM()

generateComparison()

getParamCC()

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

getReturnCC()

CCAssignFn * getReturnCC ( CallingConv::ID CallConv )

getSplatValue()

getUniqueInsertion()

isI32Insn()

Definition at line 2840 of file VEISelLowering.cpp.

References llvm::ISD::ADD, llvm::ISD::AND, llvm::ISD::BSWAP, llvm::ISD::CopyToReg, llvm::User::getOperand(), llvm::isa(), isI32InsnAllUses(), llvm::isIntVECondCode(), llvm::ISD::MUL, N, llvm::ISD::OR, llvm::ISD::SDIV, llvm::ISD::SELECT, llvm::ISD::SELECT_CC, llvm::ISD::SETCC, llvm::ISD::SHL, llvm::ISD::SINT_TO_FP, llvm::ISD::SMAX, llvm::ISD::SMIN, llvm::ISD::SRA, llvm::ISD::SRL, llvm::ISD::SUB, llvm::ISD::UDIV, llvm::ISD::UINT_TO_FP, and llvm::ISD::XOR.

Referenced by llvm::VETargetLowering::combineTRUNCATE(), and isI32InsnAllUses().

isI32InsnAllUses()

isMImm()

isSimm7()

lowerFRAMEADDR()

Definition at line 1673 of file VEISelLowering.cpp.

References llvm::Depth, DL, llvm::SelectionDAG::getCopyFromReg(), llvm::MachineFunction::getDataLayout(), llvm::SelectionDAG::getEntryNode(), llvm::MachineFunction::getFrameInfo(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), llvm::TargetLoweringBase::getPointerTy(), llvm::VESubtarget::getRegisterInfo(), and llvm::MachineFrameInfo::setFrameAddressIsTaken().

Referenced by llvm::VETargetLowering::LowerOperation(), and lowerRETURNADDR().

lowerLoadF128()

Definition at line 1275 of file VEISelLowering.cpp.

References AbstractManglingParser< Derived, Alloc >::Ops, llvm::ISD::ADD, assert(), DL, llvm::dyn_cast(), llvm::MemSDNode::getAlign(), llvm::LoadSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineNode(), llvm::SelectionDAG::getMergeValues(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::LoadSDNode::getOffset(), llvm::MemSDNode::getPointerInfo(), llvm::SelectionDAG::getTargetConstant(), llvm::SDValue::getValueType(), llvm::SDValue::isUndef(), llvm::MemSDNode::isVolatile(), llvm::MachineMemOperand::MONone, llvm::MachineMemOperand::MOVolatile, SDValue(), and llvm::ISD::TokenFactor.

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

lowerLoadI1()

Definition at line 1320 of file VEISelLowering.cpp.

References AbstractManglingParser< Derived, Alloc >::Ops, llvm::ISD::ADD, assert(), DL, llvm::dyn_cast(), llvm::MemSDNode::getAlign(), llvm::LoadSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineNode(), llvm::MemSDNode::getMemoryVT(), llvm::SelectionDAG::getMergeValues(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::LoadSDNode::getOffset(), llvm::MemSDNode::getPointerInfo(), llvm::SelectionDAG::getTargetConstant(), llvm::SDValue::isUndef(), llvm::MemSDNode::isVolatile(), llvm::MachineMemOperand::MONone, llvm::MachineMemOperand::MOVolatile, SDValue(), and llvm::ISD::TokenFactor.

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

lowerRETURNADDR()

Definition at line 1694 of file VEISelLowering.cpp.

References llvm::ISD::ADD, DL, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getEntryNode(), llvm::MachineFunction::getFrameInfo(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getNode(), lowerFRAMEADDR(), llvm::Offset, and llvm::MachineFrameInfo::setReturnAddressIsTaken().

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

lowerStoreF128()

Definition at line 1404 of file VEISelLowering.cpp.

References llvm::ISD::ADD, assert(), DL, llvm::dyn_cast(), llvm::MemSDNode::getAlign(), llvm::StoreSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getMachineNode(), llvm::SelectionDAG::getNode(), llvm::StoreSDNode::getOffset(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTargetConstant(), llvm::StoreSDNode::getValue(), llvm::SDValue::getValueType(), llvm::SDValue::isUndef(), llvm::MemSDNode::isVolatile(), llvm::MachineMemOperand::MONone, llvm::MachineMemOperand::MOVolatile, and llvm::ISD::TokenFactor.

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

lowerStoreI1()

Definition at line 1445 of file VEISelLowering.cpp.

References llvm::ISD::ADD, assert(), DL, llvm::dyn_cast(), llvm::MemSDNode::getAlign(), llvm::StoreSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getMachineNode(), llvm::MemSDNode::getMemoryVT(), llvm::SelectionDAG::getNode(), llvm::StoreSDNode::getOffset(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTargetConstant(), llvm::StoreSDNode::getValue(), llvm::SDValue::isUndef(), llvm::MemSDNode::isVolatile(), llvm::MachineMemOperand::MONone, llvm::MachineMemOperand::MOVolatile, SDValue(), and llvm::ISD::TokenFactor.

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

prepareTS1AM()

safeWithoutCompWithNull()

AllMaskVTs

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

AllPackedVTs

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

AllVectorVTs

Initial value:

= {MVT::v256i32, MVT::v512i32, MVT::v256i64,

MVT::v256f32, MVT::v512f32, MVT::v256f64}

Definition at line 77 of file VEISelLowering.cpp.