LLVM 22.0.0git
|
#include "VEISelLowering.h"
#include "MCTargetDesc/VEMCAsmInfo.h"
#include "VECustomDAG.h"
#include "VEInstrBuilder.h"
#include "VEMachineFunctionInfo.h"
#include "VERegisterInfo.h"
#include "VETargetMachine.h"
#include "llvm/ADT/StringSwitch.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/SelectionDAG.h"
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/Module.h"
#include "llvm/Support/ErrorHandling.h"
#include "VEGenCallingConv.inc"
#include "VVPNodes.def"
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) |
Variables | |
static const MVT | AllVectorVTs [] |
static const MVT | AllMaskVTs [] = {MVT::v256i1, MVT::v512i1} |
static const MVT | AllPackedVTs [] = {MVT::v512i32, MVT::v512f32} |
#define ADD_BINARY_VVP_OP | ( | VVPNAME, | |
VPNAME, | |||
SDNAME ) |
#define ADD_BINARY_VVP_OP | ( | VVPNAME, | |
VPNAME, | |||
SDNAME ) |
#define ADD_BINARY_VVP_OP | ( | VVPNAME, | |
VPNAME, | |||
SDNAME ) |
#define ADD_BINARY_VVP_OP | ( | VVPNAME, | |
VPNAME, | |||
SDNAME ) |
#define ADD_BINARY_VVP_OP_COMPACT | ( | NAME | ) |
#define ADD_BINARY_VVP_OP_COMPACT | ( | NAME | ) |
#define ADD_BINARY_VVP_OP_COMPACT | ( | NAME | ) |
#define ADD_BINARY_VVP_OP_COMPACT | ( | NAME | ) |
#define ADD_REDUCE_VVP_OP | ( | OPC, | |
SDNAME ) |
#define ADD_REDUCE_VVP_OP | ( | OPC, | |
SDNAME ) |
#define ADD_REDUCE_VVP_OP | ( | OPC, | |
SDNAME ) |
#define ADD_REDUCE_VVP_OP | ( | OPC, | |
SDNAME ) |
#define ADD_TERNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_TERNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_TERNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_TERNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_UNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_UNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_UNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_UNARY_VVP_OP | ( | VVPNAME, | |
SDNAME ) |
#define ADD_VVP_OP | ( | VVP_NAME, | |
ISD_NAME ) |
#define ADD_VVP_OP | ( | VVP_NAME, | |
ISD_NAME ) |
#define ADD_VVP_OP | ( | VVP_NAME, | |
... ) |
#define ADD_VVP_OP | ( | VVP_NAME, | |
... ) |
#define DEBUG_TYPE "ve-lower" |
Definition at line 38 of file VEISelLowering.cpp.
#define HANDLE_VP_TO_VVP | ( | VP_OPC, | |
VVP_NAME ) |
#define HANDLE_VP_TO_VVP | ( | VPOPC, | |
VVPOPC ) |
#define HANDLE_VP_TO_VVP | ( | VPOPC, | |
VVPOPC ) |
#define HANDLE_VP_TO_VVP | ( | VPOPC, | |
VVPOPC ) |
#define HANDLE_VVP_REDUCE_TO_SCALAR | ( | VVP_RED_ISD, | |
REDUCE_ISD ) |
#define HANDLE_VVP_REDUCE_TO_SCALAR | ( | VVP_RED_ISD, | |
REDUCE_ISD ) |
#define HANDLE_VVP_REDUCE_TO_SCALAR | ( | VVP_RED_ISD, | |
REDUCE_ISD ) |
#define HANDLE_VVP_REDUCE_TO_SCALAR | ( | VVP_RED_ISD, | |
REDUCE_ISD ) |
#define HELPER_REDUCTION | ( | OPC, | |
SCALAR_OPC ) |
#define HELPER_REDUCTION | ( | OPC, | |
SCALAR_OPC ) |
#define HELPER_REDUCTION | ( | OPC, | |
SCALAR_OPC ) |
#define HELPER_REDUCTION | ( | OPC, | |
SCALAR_OPC ) |
#define REGISTER_PACKED | ( | OPC | ) |
#define REGISTER_PACKED | ( | OPC | ) |
#define REGISTER_PACKED | ( | OPC | ) |
#define REGISTER_PACKED | ( | OPC | ) |
#define TARGET_NODE_CASE | ( | NAME | ) |
Referenced by llvm::VETargetLowering::getTargetNodeName().
|
static |
Definition at line 2715 of file VEISelLowering.cpp.
References llvm::VEISD::CMPF, llvm::VEISD::CMPI, llvm::VEISD::CMPQ, llvm::VEISD::CMPU, and llvm::EVT::isFloatingPoint().
Referenced by generateComparison().
Definition at line 2724 of file VEISelLowering.cpp.
Referenced by generateComparison().
|
static |
Definition at line 1168 of file VEISelLowering.cpp.
References llvm::ISD::AND, llvm::cast(), llvm::Data, DL, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), and llvm::ISD::SRL.
Referenced by llvm::VETargetLowering::lowerATOMIC_SWAP().
|
static |
Definition at line 2755 of file VEISelLowering.cpp.
References decideComp(), decideCompType(), DL, llvm::SelectionDAG::getNode(), llvm::isNullConstant(), llvm::isNullFPConstant(), LHS, RHS, and safeWithoutCompWithNull().
Referenced by llvm::VETargetLowering::combineSelectCC().
CCAssignFn * getParamCC | ( | CallingConv::ID | CallConv, |
bool | IsVarArg ) |
Definition at line 55 of file VEISelLowering.cpp.
References llvm::CallingConv::Fast.
Referenced by llvm::VETargetLowering::LowerCall(), and llvm::VETargetLowering::LowerFormalArguments().
CCAssignFn * getReturnCC | ( | CallingConv::ID | CallConv | ) |
Definition at line 46 of file VEISelLowering.cpp.
References llvm::CallingConv::Fast.
Referenced by llvm::VETargetLowering::CanLowerReturn(), llvm::VETargetLowering::LowerCall(), and llvm::VETargetLowering::LowerReturn().
Definition at line 1805 of file VEISelLowering.cpp.
References llvm::dyn_cast(), N, and SDValue().
Definition at line 1779 of file VEISelLowering.cpp.
References llvm::cast(), llvm::isa(), and N.
Referenced by llvm::VETargetLowering::lowerBUILD_VECTOR().
Definition at line 2878 of file VEISelLowering.cpp.
References llvm::ISD::ADD, llvm::ISD::AND, llvm::ISD::BSWAP, llvm::VEISD::CMOV, llvm::VEISD::CMPI, llvm::VEISD::CMPU, 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().
Definition at line 2935 of file VEISelLowering.cpp.
References llvm::ISD::ANY_EXTEND, assert(), llvm::VEISD::CMOV, isI32Insn(), N, llvm::ISD::SELECT, llvm::ISD::SELECT_CC, llvm::ISD::SIGN_EXTEND, llvm::Value::users(), and llvm::ISD::ZERO_EXTEND.
Referenced by isI32Insn().
Definition at line 2694 of file VEISelLowering.cpp.
References llvm::CallingConv::C, llvm::dyn_cast(), llvm::getFpImmVal(), llvm::getImmVal(), llvm::EVT::isFloatingPoint(), llvm::EVT::isInteger(), llvm::isMImm32Val(), llvm::isMImmVal(), and llvm::EVT::isVector().
Referenced by llvm::VETargetLowering::combineSelect(), and llvm::VETargetLowering::combineSelectCC().
Definition at line 2672 of file VEISelLowering.cpp.
References llvm::CallingConv::C, llvm::dyn_cast(), llvm::EVT::isFloatingPoint(), llvm::isInt(), llvm::EVT::isInteger(), and llvm::EVT::isVector().
Referenced by llvm::VETargetLowering::combineSelectCC().
|
static |
Definition at line 1711 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().
|
static |
Definition at line 1313 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().
|
static |
Definition at line 1358 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().
|
static |
Definition at line 1732 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().
|
static |
Definition at line 1442 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().
|
static |
Definition at line 1483 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().
|
static |
Definition at line 1146 of file VEISelLowering.cpp.
References llvm::ISD::AND, llvm::cast(), DL, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getValueType(), N, Ptr, and llvm::ISD::SHL.
Referenced by llvm::VETargetLowering::lowerATOMIC_SWAP().
|
static |
Definition at line 2730 of file VEISelLowering.cpp.
References llvm::EVT::isFloatingPoint().
Referenced by generateComparison().
Definition at line 79 of file VEISelLowering.cpp.
Definition at line 81 of file VEISelLowering.cpp.
Definition at line 76 of file VEISelLowering.cpp.