LLVM API Documentation
#include "SPURegisterNames.h"#include "SPUISelLowering.h"#include "SPUTargetMachine.h"#include "SPUFrameInfo.h"#include "llvm/ADT/APInt.h"#include "llvm/ADT/VectorExtras.h"#include "llvm/CallingConv.h"#include "llvm/CodeGen/CallingConvLower.h"#include "llvm/CodeGen/MachineFrameInfo.h"#include "llvm/CodeGen/MachineFunction.h"#include "llvm/CodeGen/MachineInstrBuilder.h"#include "llvm/CodeGen/MachineRegisterInfo.h"#include "llvm/CodeGen/SelectionDAG.h"#include "llvm/Constants.h"#include "llvm/Function.h"#include "llvm/Intrinsics.h"#include "llvm/Support/Debug.h"#include "llvm/Support/MathExtras.h"#include "llvm/Target/TargetOptions.h"#include <map>#include "SPUGenCallingConv.inc"
Go to the source code of this file.
| SDValue @785::ExpandLibCall | ( | RTLIB::Libcall | LC, | |
| SDValue | Op, | |||
| SelectionDAG & | DAG, | |||
| bool | isSigned, | |||
| SDValue & | Hi, | |||
| SPUTargetLowering & | TLI | |||
| ) | [static] |
Expand a library call into an actual call DAG node.
Definition at line 91 of file SPUISelLowering.cpp.
References llvm::CallingConv::C, Entry, llvm::SDNode::getDebugLoc(), llvm::SelectionDAG::getEntryNode(), llvm::SelectionDAG::getExternalSymbol(), llvm::TargetLowering::getLibcallName(), llvm::SDValue::getNode(), llvm::SDValue::getNumOperands(), llvm::SDValue::getOperand(), llvm::TargetLowering::getPointerTy(), llvm::MVT::getTypeForMVT(), llvm::SDNode::getValueType(), llvm::SDValue::getValueType(), llvm::TargetLowering::ArgListEntry::isSExt, llvm::TargetLowering::ArgListEntry::isZExt, llvm::TargetLowering::LowerCallTo(), llvm::TargetLowering::ArgListEntry::Node, RetTy, and llvm::TargetLowering::ArgListEntry::Ty.
Referenced by LowerFP_TO_INT(), and LowerINT_TO_FP().
| static bool GetConstantBuildVectorBits | ( | SDNode * | BV, | |
| uint64_t | VectorBits[2], | |||
| uint64_t | UndefBits[2] | |||
| ) | [static] |
Definition at line 1468 of file SPUISelLowering.cpp.
References llvm::APFloat::convertToDouble(), llvm::APFloat::convertToFloat(), llvm::DoubleToBits(), llvm::MVT::f32, llvm::FloatToBits(), llvm::SDNode::getNumOperands(), llvm::SDValue::getOpcode(), llvm::SDNode::getOperand(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), and llvm::ISD::UNDEF.
Referenced by LowerBUILD_VECTOR(), and LowerByteImmed().
| const valtype_map_s* @785::getValueTypeMapEntry | ( | MVT | VT | ) | [static] |
Definition at line 61 of file SPUISelLowering.cpp.
References llvm::cerr(), llvm::MVT::getMVTString(), and valtype.
| static ConstantSDNode* getVecImm | ( | SDNode * | N | ) | [static] |
Definition at line 1318 of file SPUISelLowering.cpp.
References llvm::SDValue::getNode(), llvm::SDNode::getNumOperands(), llvm::SDValue::getOpcode(), llvm::SDNode::getOperand(), and llvm::ISD::UNDEF.
Referenced by llvm::SPU::get_ILHUvec_imm(), llvm::SPU::get_v2i64_imm(), llvm::SPU::get_v4i32_imm(), llvm::SPU::get_vec_i10imm(), llvm::SPU::get_vec_i16imm(), llvm::SPU::get_vec_i8imm(), and llvm::SPU::get_vec_u18imm().
| static bool isConstantSplat | ( | const uint64_t | Bits128[2], | |
| const uint64_t | Undef128[2], | |||
| int | MinSplatBits, | |||
| uint64_t & | SplatBits, | |||
| uint64_t & | SplatUndef, | |||
| int & | SplatSize | |||
| ) | [static] |
If this is a splat (repetition) of a value across the whole vector, return the smallest size that splats it. For example, "0x01010101010101..." is a splat of 0x01, 0x0101, and 0x01010101. We return SplatBits = 0x01 and SplatSize = 1 byte.
Definition at line 1509 of file SPUISelLowering.cpp.
Referenced by LowerBUILD_VECTOR(), and LowerByteImmed().
| static SDNode* isLSAAddress | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
isLSAAddress - Return the immediate to use if the specified value is representable as a LSA address.
Definition at line 1038 of file SPUISelLowering.cpp.
References llvm::CallingConv::C, llvm::dyn_cast(), llvm::SelectionDAG::getConstant(), llvm::ConstantSDNode::getZExtValue(), and llvm::MVT::i32.
Referenced by LowerCALL().
| SDValue LowerBUILD_VECTOR | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) |
Lower a BUILD_VECTOR instruction creatively:.
Definition at line 1572 of file SPUISelLowering.cpp.
References llvm::ISD::BIT_CONVERT, llvm::ISD::BUILD_VECTOR, llvm::cerr(), llvm::SelectionDAG::getConstant(), GetConstantBuildVectorBits(), llvm::MVT::getMVTString(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNode(), llvm::MVT::getSimpleVT(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::MVT::getVectorElementType(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, isConstantSplat(), llvm::SPU::LowerSplat_v2i64(), T, llvm::MVT::v16i8, llvm::MVT::v2f64, llvm::MVT::v2i32, llvm::MVT::v2i64, llvm::MVT::v4f32, llvm::MVT::v4i32, llvm::MVT::v8i16, and VT.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerByteImmed | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
Lower byte immediate operations for v16i8 vectors:.
Definition at line 2244 of file SPUISelLowering.cpp.
References Arg, llvm::ISD::BIT_CONVERT, llvm::ISD::BUILD_VECTOR, GetConstantBuildVectorBits(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::MVT::getSizeInBits(), llvm::SelectionDAG::getTargetConstant(), llvm::SDValue::getValueType(), llvm::MVT::getVectorElementType(), llvm::MVT::i8, isConstantSplat(), and VT.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerCALL | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const SPUSubtarget * | ST | |||
| ) | [static] |
Definition at line 1051 of file SPUISelLowering.cpp.
References llvm::ISD::ADD, llvm::SPUISD::AFormAddr, Arg, llvm::SPUISD::CALL, Dest, llvm::SmallVectorImpl< T >::empty(), llvm::MVT::f32, llvm::MVT::f64, first, llvm::MVT::Flag, G, llvm::CallSDNode::getArg(), llvm::SPURegisterInfo::getArgRegs(), llvm::CallSDNode::getCallee(), llvm::SelectionDAG::getCALLSEQ_END(), llvm::SelectionDAG::getCALLSEQ_START(), llvm::CallSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getIntPtrConstant(), llvm::SelectionDAG::getMergeValues(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNode(), llvm::SPURegisterInfo::getNumArgRegs(), llvm::CallSDNode::getNumArgs(), llvm::TargetLowering::getPointerTy(), llvm::SelectionDAG::getRegister(), llvm::SDValue::getResNo(), llvm::MVT::getSimpleVT(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTargetExternalSymbol(), llvm::SelectionDAG::getTargetGlobalAddress(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValue(), llvm::SDNode::getValueType(), llvm::SDValue::getValueType(), llvm::SelectionDAG::getVTList(), GV, llvm::MVT::i128, llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::SPUISD::IndirectAddr, llvm::GlobalValue::isDeclaration(), isLSAAddress(), llvm::SPUFrameInfo::minStackSize(), llvm::MVT::Other, llvm::SPUISD::PCRelAddr, llvm::SmallVectorImpl< T >::push_back(), second, llvm::SmallVectorImpl< T >::size(), llvm::SPUFrameInfo::stackSlotSize(), llvm::ISD::TokenFactor, llvm::SPUSubtarget::usingLargeMem(), llvm::MVT::v16i8, llvm::MVT::v2f64, llvm::MVT::v2i64, llvm::MVT::v4f32, llvm::MVT::v4i32, and llvm::MVT::v8i16.
Referenced by llvm::SPUTargetLowering::LowerOperation(), and llvm::SparcTargetLowering::LowerOperation().
| static SDValue LowerConstantFP | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
Custom lower double precision floating point constants.
Definition at line 901 of file SPUISelLowering.cpp.
References llvm::ISD::BIT_CONVERT, llvm::ISD::BUILD_VECTOR, llvm::APFloat::convertToDouble(), llvm::DoubleToBits(), llvm::MVT::f64, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNode(), llvm::ConstantFPSDNode::getValueAPF(), llvm::SDValue::getValueType(), llvm::MVT::i64, T, llvm::MVT::v2f64, llvm::MVT::v2i64, llvm::SPUISD::VEC2PREFSLOT, and VT.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| SDValue LowerConstantPool | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const SPUSubtarget * | ST | |||
| ) |
Generate the address of a constant pool entry.
Definition at line 818 of file SPUISelLowering.cpp.
References llvm::SPUISD::AFormAddr, llvm::CallingConv::C, CP, CPI, llvm::ConstantPoolSDNode::getAlignment(), llvm::SelectionDAG::getConstant(), llvm::ConstantPoolSDNode::getConstVal(), llvm::SelectionDAG::getNode(), llvm::TargetMachine::getRelocationModel(), llvm::SelectionDAG::getTarget(), llvm::SelectionDAG::getTargetConstantPool(), llvm::SDValue::getValueType(), llvm::SPUISD::Hi, llvm::SPISD::Hi, llvm::SPUISD::IndirectAddr, llvm::SPUISD::Lo, llvm::SPISD::Lo, llvm::Reloc::Static, TM, and llvm::SPUSubtarget::usingLargeMem().
| static SDValue LowerCTPOP | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
Custom lowering for CTPOP (count population).
Custom lowering code that counts the number ones in the input operand. SPU has such an instruction, but it counts the number of ones per byte, which then have to be accumulated.
Definition at line 2297 of file SPUISelLowering.cpp.
References llvm::ISD::ADD, llvm::ISD::AND, llvm::SPUISD::CNTB, llvm::MachineRegisterInfo::createVirtualRegister(), llvm::ISD::EXTRACT_VECTOR_ELT, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), llvm::MachineFunction::getRegInfo(), llvm::MVT::getSimpleVT(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::MVT::getVectorVT(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, MF, llvm::SPUISD::PREFSLOT2VEC, RegInfo, llvm::ISD::SRL, and VT.
| static SDValue LowerEXTRACT_VECTOR_ELT | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
Definition at line 1917 of file SPUISelLowering.cpp.
References llvm::ISD::BUILD_VECTOR, llvm::CallingConv::C, llvm::cerr(), llvm::MVT::f32, llvm::MVT::f64, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), llvm::MVT::getSimpleVT(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::MVT::getVectorNumElements(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::MVT::is128BitVector(), llvm::MVT::isSimple(), llvm::MVT::isVector(), llvm::APInt::logBase2(), llvm::ISD::SHL, llvm::SPUISD::SHLQUAD_L_BYTES, llvm::SPUISD::SHUFB, llvm::MVT::v4i32, llvm::SPUISD::VEC2PREFSLOT, VT, and llvm::ISD::ZERO_EXTEND.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerFORMAL_ARGUMENTS | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| int & | VarArgsFrameIndex | |||
| ) | [static] |
Definition at line 921 of file SPUISelLowering.cpp.
References llvm::MachineRegisterInfo::addLiveIn(), llvm::cerr(), llvm::MachineFrameInfo::CreateFixedObject(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::SmallVectorImpl< T >::empty(), llvm::MVT::f32, llvm::MVT::f64, FI, llvm::SPURegisterInfo::getArgRegs(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getFrameIndex(), llvm::MachineFunction::getFrameInfo(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), llvm::MVT::getMVTString(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNode(), llvm::SPURegisterInfo::getNumArgRegs(), llvm::SDNode::getNumValues(), llvm::SDValue::getOperand(), llvm::TargetLowering::getPointerTy(), llvm::MachineFunction::getRegInfo(), llvm::SelectionDAG::getRegister(), llvm::MVT::getSimpleVT(), llvm::MVT::getSizeInBits(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValue(), llvm::SDValue::getValueType(), llvm::SDNode::getVTList(), llvm::MVT::i128, llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::ISD::MERGE_VALUES, MF, MFI, llvm::SPUFrameInfo::minStackSize(), llvm::MVT::Other, llvm::SmallVectorImpl< T >::push_back(), RegInfo, Root, llvm::SmallVectorImpl< T >::size(), llvm::SPUFrameInfo::stackSlotSize(), llvm::SPII::Store, llvm::ISD::TokenFactor, llvm::MVT::v16i8, llvm::MVT::v2f64, llvm::MVT::v2i64, llvm::MVT::v4f32, llvm::MVT::v4i32, and llvm::MVT::v8i16.
| static SDValue LowerFP_TO_INT | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| SPUTargetLowering & | TLI | |||
| ) | [static] |
Lower ISD::FP_TO_SINT, ISD::FP_TO_UINT for i32.
f32->i32 passes through unchanged, whereas f64->i32 expands to a libcall. All conversions to i64 are expanded to a libcall.
Definition at line 2404 of file SPUISelLowering.cpp.
References llvm::PIC16ISD::Dummy, ExpandLibCall(), llvm::MVT::f64, llvm::ISD::FP_TO_SINT, llvm::RTLIB::getFPTOSINT(), llvm::RTLIB::getFPTOUINT(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getValueType(), llvm::MVT::i32, llvm::MVT::i64, and llvm::RTLIB::UNKNOWN_LIBCALL.
| static SDValue LowerGlobalAddress | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const SPUSubtarget * | ST | |||
| ) | [static] |
Definition at line 873 of file SPUISelLowering.cpp.
References llvm::SPUISD::AFormAddr, llvm::cerr(), llvm::SelectionDAG::getConstant(), llvm::GlobalAddressSDNode::getGlobal(), llvm::SelectionDAG::getNode(), llvm::GlobalAddressSDNode::getOffset(), llvm::TargetMachine::getRelocationModel(), llvm::SelectionDAG::getTarget(), llvm::SelectionDAG::getTargetGlobalAddress(), llvm::SDValue::getValueType(), GV, llvm::SPUISD::Hi, llvm::SPISD::Hi, llvm::SPUISD::IndirectAddr, llvm::SPUISD::Lo, llvm::SPISD::Lo, llvm::Reloc::Static, TM, and llvm::SPUSubtarget::usingLargeMem().
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerI8Math | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| unsigned | Opc, | |||
| const TargetLowering & | TLI | |||
| ) | [static] |
Definition at line 2103 of file SPUISelLowering.cpp.
References llvm::ISD::ADD, llvm::MVT::bitsLT(), llvm::ISD::Constant, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::TargetLowering::getShiftAmountTy(), llvm::SDValue::getValueType(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i8, llvm::ISD::MUL, llvm::ISD::OR, llvm::ISD::ROTL, llvm::ISD::ROTR, llvm::ISD::SHL, llvm::ISD::SIGN_EXTEND, llvm::ISD::SRA, llvm::ISD::SRL, llvm::ISD::SUB, llvm::ISD::TRUNCATE, and llvm::ISD::ZERO_EXTEND.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerINSERT_VECTOR_ELT | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
Definition at line 2078 of file SPUISelLowering.cpp.
References llvm::ISD::BIT_CONVERT, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), llvm::TargetLowering::getPointerTy(), llvm::SelectionDAG::getRegister(), llvm::ConstantSDNode::getSExtValue(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValueType(), llvm::SPUISD::IndirectAddr, llvm::ISD::SCALAR_TO_VECTOR, llvm::SPUISD::SHUFB, llvm::SPUISD::SHUFFLE_MASK, llvm::MVT::v4i32, and VT.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerINT_TO_FP | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| SPUTargetLowering & | TLI | |||
| ) | [static] |
Lower ISD::SINT_TO_FP, ISD::UINT_TO_FP for i32.
i32->f32 passes through unchanged, whereas i32->f64 is expanded to a libcall. All conversions from i64 are expanded to a libcall.
Definition at line 2430 of file SPUISelLowering.cpp.
References llvm::PIC16ISD::Dummy, ExpandLibCall(), llvm::MVT::f64, llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::RTLIB::getSINTTOFP(), llvm::RTLIB::getUINTTOFP(), llvm::SDValue::getValueType(), llvm::MVT::i32, llvm::MVT::i64, llvm::ISD::SINT_TO_FP, and llvm::RTLIB::UNKNOWN_LIBCALL.
| static SDValue LowerJumpTable | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const SPUSubtarget * | ST | |||
| ) | [static] |
Definition at line 850 of file SPUISelLowering.cpp.
References llvm::SPUISD::AFormAddr, llvm::SelectionDAG::getConstant(), llvm::JumpTableSDNode::getIndex(), llvm::SelectionDAG::getNode(), llvm::TargetMachine::getRelocationModel(), llvm::SelectionDAG::getTarget(), llvm::SelectionDAG::getTargetJumpTable(), llvm::SDValue::getValueType(), llvm::SPUISD::Hi, llvm::SPISD::Hi, llvm::SPUISD::IndirectAddr, JT, JTI, llvm::SPUISD::Lo, llvm::SPISD::Lo, llvm::Reloc::Static, TM, and llvm::SPUSubtarget::usingLargeMem().
| static SDValue LowerLOAD | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const SPUSubtarget * | ST | |||
| ) | [static] |
Custom lower loads for CellSPU.
All CellSPU loads and stores are aligned to 16-byte boundaries, so for elements within a 16-byte block, we have to rotate to extract the requested element.
For extending loads, we also want to ensure that the following sequence is emitted, e.g. for MVT::f32 extending load to MVT::f64:
%1 v16i8,ch = load %2 v16i8,ch = rotate %1 %3 v4f8, ch = bitconvert %2 %4 f32 = vec2perfslot %3 %5 f64 = fp_extend %4
Definition at line 501 of file SPUISelLowering.cpp.
References llvm::ISD::ADD, llvm::SPUISD::AFormAddr, llvm::ISD::ANY_EXTEND, llvm::ISD::BIT_CONVERT, llvm::cerr(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::dyn_cast(), llvm::ISD::EXTLOAD, llvm::ISD::FP_EXTEND, llvm::LSBaseSDNode::getAddressingMode(), llvm::MemSDNode::getAlignment(), llvm::LoadSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::LoadSDNode::getExtensionType(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), llvm::MemSDNode::getMemoryVT(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::TargetLowering::getPointerTy(), llvm::MachineFunction::getRegInfo(), llvm::MVT::getSizeInBits(), llvm::MemSDNode::getSrcValue(), llvm::MemSDNode::getSrcValueOffset(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValue(), llvm::SDValue::getValueType(), getValueTypeMapEntry(), llvm::MVT::getVectorVT(), llvm::SelectionDAG::getVTList(), llvm::SPUISD::Hi, llvm::MVT::i16, llvm::SPUISD::IndirectAddr, llvm::MVT::isFloatingPoint(), llvm::MemSDNode::isVolatile(), llvm::ISD::LAST_INDEXED_MODE, llvm::SPUISD::LDRESULT, llvm::SPUISD::Lo, MF, offset, llvm::MVT::Other, llvm::ISD::POST_DEC, llvm::ISD::POST_INC, llvm::ISD::PRE_DEC, llvm::ISD::PRE_INC, RegInfo, llvm::SPUISD::ROTBYTES_LEFT, llvm::ISD::SEXTLOAD, llvm::ISD::SIGN_EXTEND, llvm::ISD::UNINDEXED, llvm::MVT::v16i8, llvm::SPUISD::VEC2PREFSLOT, llvm::ISD::ZERO_EXTEND, and llvm::ISD::ZEXTLOAD.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerRET | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| TargetMachine & | TM | |||
| ) | [static] |
Definition at line 1281 of file SPUISelLowering.cpp.
References llvm::MachineRegisterInfo::addLiveOut(), llvm::CCState::AnalyzeReturn(), llvm::Function::getCallingConv(), llvm::SelectionDAG::getCopyToReg(), llvm::MachineFunction::getFunction(), llvm::CCValAssign::getLocReg(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNode(), llvm::SDValue::getOperand(), llvm::MachineFunction::getRegInfo(), llvm::SDValue::getValue(), llvm::CCValAssign::isRegLoc(), llvm::Function::isVarArg(), llvm::MachineRegisterInfo::liveout_empty(), llvm::MVT::Other, llvm::SPUISD::RET_FLAG, and llvm::SmallVectorImpl< T >::size().
| static SDValue LowerSCALAR_TO_VECTOR | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
Definition at line 1870 of file SPUISelLowering.cpp.
References llvm::ISD::BUILD_VECTOR, llvm::ISD::Constant, llvm::MVT::f32, llvm::MVT::f64, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::MVT::getSimpleVT(), llvm::SDValue::getValueType(), llvm::ConstantSDNode::getZExtValue(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::SPUISD::PREFSLOT2VEC, llvm::MVT::v16i8, llvm::MVT::v2f64, llvm::MVT::v2i64, llvm::MVT::v4f32, llvm::MVT::v4i32, llvm::MVT::v8i16, and VT.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerSELECT_CC | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const TargetLowering & | TLI | |||
| ) | [static] |
Lower ISD::SELECT_CC.
ISD::SELECT_CC can (generally) be implemented directly on the SPU using the SELB instruction.
Definition at line 2587 of file SPUISelLowering.cpp.
References compare(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), llvm::TargetLowering::getSetCCResultType(), llvm::SDValue::getValueType(), llvm::SPUISD::SELB, llvm::ISD::SETCC, and VT.
| static SDValue LowerSETCC | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const TargetLowering & | TLI | |||
| ) | [static] |
Lower ISD::SETCC.
This handles MVT::f64 (double floating point) condition lowering
Definition at line 2455 of file SPUISelLowering.cpp.
References llvm::ISD::AND, llvm::ISD::BIT_CONVERT, llvm::cerr(), llvm::dyn_cast(), llvm::MVT::f64, llvm::CondCodeSDNode::get(), llvm::APInt::getAllOnesValue(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getConstantFP(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), llvm::SelectionDAG::getSetCC(), llvm::TargetLowering::getSetCCResultType(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::MVT::i32, llvm::MVT::i64, llvm::ISD::SELECT, llvm::ISD::SETEQ, llvm::ISD::SETGE, llvm::ISD::SETGT, llvm::ISD::SETLE, llvm::ISD::SETLT, llvm::ISD::SETNE, llvm::ISD::SETO, llvm::ISD::SETOEQ, llvm::ISD::SETOGE, llvm::ISD::SETOGT, llvm::ISD::SETOLE, llvm::ISD::SETOLT, llvm::ISD::SETONE, llvm::ISD::SETUEQ, llvm::ISD::SETUGE, llvm::ISD::SETUGT, llvm::ISD::SETULE, llvm::ISD::SETULT, llvm::ISD::SETUNE, llvm::ISD::SETUO, llvm::ISD::SRA, llvm::ISD::SRL, llvm::ISD::SUB, llvm::ISD::TRUNCATE, and llvm::ISD::XOR.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerSTORE | ( | SDValue | Op, | |
| SelectionDAG & | DAG, | |||
| const SPUSubtarget * | ST | |||
| ) | [static] |
Custom lower stores for CellSPU.
All CellSPU stores are aligned to 16-byte boundaries, so for elements within a 16-byte block, we have to generate a shuffle to insert the requested element into its place, then store the resulting block.
Definition at line 660 of file SPUISelLowering.cpp.
References llvm::ISD::ADD, llvm::ISD::AssertSext, llvm::ISD::AssertZext, llvm::ISD::BIT_CONVERT, llvm::cerr(), llvm::MachineRegisterInfo::createVirtualRegister(), DEBUG_TYPE, llvm::DebugFlag, llvm::SelectionDAG::dump(), llvm::SDNode::dump(), llvm::dyn_cast(), llvm::LSBaseSDNode::getAddressingMode(), llvm::MemSDNode::getAlignment(), llvm::StoreSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), llvm::MemSDNode::getMemoryVT(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::TargetLowering::getPointerTy(), llvm::MachineFunction::getRegInfo(), llvm::SelectionDAG::getRoot(), llvm::MVT::getSizeInBits(), llvm::MemSDNode::getSrcValue(), llvm::MemSDNode::getSrcValueOffset(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValue(), llvm::StoreSDNode::getValue(), llvm::MVT::getVectorVT(), llvm::SPUISD::IndirectAddr, llvm::isCurrentDebugType(), llvm::StoreSDNode::isTruncatingStore(), llvm::MemSDNode::isVolatile(), llvm::ISD::LAST_INDEXED_MODE, MF, offset, llvm::ISD::POST_DEC, llvm::ISD::POST_INC, llvm::ISD::PRE_DEC, llvm::ISD::PRE_INC, RegInfo, llvm::ISD::SCALAR_TO_VECTOR, llvm::SelectionDAG::setRoot(), llvm::SPUISD::SHUFB, llvm::SPUISD::SHUFFLE_MASK, llvm::ISD::UNINDEXED, llvm::MVT::v16i8, llvm::MVT::v4i32, and VT.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerTRUNCATE | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
Custom lower ISD::TRUNCATE.
Definition at line 2614 of file SPUISelLowering.cpp.
References llvm::ISD::BIT_CONVERT, llvm::ISD::BUILD_VECTOR, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), llvm::MVT::getSimpleVT(), llvm::MVT::getSizeInBits(), llvm::SDValue::getValueType(), llvm::MVT::getVectorVT(), llvm::MVT::i128, llvm::MVT::i32, llvm::MVT::i64, llvm::SPUISD::PREFSLOT2VEC, llvm::SPUISD::SHUFB, llvm::MVT::v4i32, llvm::SPUISD::VEC2PREFSLOT, and VT.
Referenced by llvm::SPUTargetLowering::LowerOperation().
| static SDValue LowerVECTOR_SHUFFLE | ( | SDValue | Op, | |
| SelectionDAG & | DAG | |||
| ) | [static] |
LowerVECTOR_SHUFFLE - Lower a vector shuffle (V1, V2, V3) to something on which the Cell can operate. The code inspects V3 to ascertain whether the permutation vector, V3, is monotonically increasing with one "exception" element, e.g., (0, 1, _, 3). If this is the case, then generate a SHUFFLE_MASK synthetic instruction. Otherwise, spill V3 to the constant pool. In either case, the net result is going to eventually invoke SHUFB to permute/shuffle the bytes from V1 and V2.
SPUISD::SHUFB is eventually selected as Cell's shufb instructions.
Definition at line 1754 of file SPUISelLowering.cpp.
References llvm::ISD::BUILD_VECTOR, llvm::MachineRegisterInfo::createVirtualRegister(), llvm::MVT::f32, llvm::MVT::f64, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getEntryNode(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getNode(), llvm::SDValue::getNumOperands(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::TargetLowering::getPointerTy(), llvm::MachineFunction::getRegInfo(), llvm::MVT::getSizeInBits(), llvm::SelectionDAG::getTargetConstant(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValueType(), llvm::MVT::getVectorElementType(), llvm::MVT::getVectorNumElements(), llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, MF, llvm::SmallVectorImpl< T >::push_back(), RegInfo, llvm::SPUISD::ROTBYTES_LEFT, llvm::SPUISD::SHUFB, llvm::SPUISD::SHUFFLE_MASK, llvm::SmallVectorImpl< T >::size(), llvm::ISD::UNDEF, V1, llvm::MVT::v16i8, and llvm::MVT::v4i32.
Referenced by llvm::SPUTargetLowering::LowerOperation().
const size_t n_valtype_map = sizeof(valtype_map) / sizeof(valtype_map[0]) [static] |
Definition at line 59 of file SPUISelLowering.cpp.
std::map<unsigned, const char *> node_names [static] |
Definition at line 40 of file SPUISelLowering.cpp.
| const int prefslot_byte |
Definition at line 45 of file SPUISelLowering.cpp.
const valtype_map_s valtype_map[] [static] |
Initial value:
{
{ MVT::i1, 3 },
{ MVT::i8, 3 },
{ MVT::i16, 2 },
{ MVT::i32, 0 },
{ MVT::f32, 0 },
{ MVT::i64, 0 },
{ MVT::f64, 0 },
{ MVT::i128, 0 }
}
Definition at line 48 of file SPUISelLowering.cpp.