LLVM API Documentation
#include "MipsSEISelLowering.h"
#include "MipsRegisterInfo.h"
#include "MipsTargetMachine.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetInstrInfo.h"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "mips-isel" |
Variables | |
static cl::opt< bool > | EnableMipsTailCalls ("enable-mips-tail-calls", cl::Hidden, cl::desc("MIPS: Enable tail calls."), cl::init(false)) |
static cl::opt< bool > | NoDPLoadStore ("mno-ldc1-sdc1", cl::init(false), cl::desc("Expand double precision loads and ""stores to their single precision ""counterparts")) |
#define DEBUG_TYPE "mips-isel" |
Definition at line 13 of file MipsSEISelLowering.cpp.
|
static |
Definition at line 1184 of file MipsSEISelLowering.cpp.
References llvm::ISD::BUILD_PAIR, llvm::SelectionDAG::getNode(), llvm::MVT::i32, llvm::MVT::i64, llvm::MipsISD::MFHI, and llvm::MipsISD::MFLO.
Referenced by lowerDSPIntr().
|
static |
Definition at line 697 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADD, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::EVT::getSizeInBits(), llvm::isPowerOf2_64(), llvm::Log2_64(), llvm::Log2_64_Ceil(), llvm::ISD::SHL, llvm::ISD::SUB, and llvm::X.
Referenced by performMULCombine().
|
static |
Definition at line 1297 of file MipsSEISelLowering.cpp.
References llvm::ISD::BITCAST, llvm::ISD::BUILD_VECTOR, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::EVT::getVectorNumElements(), llvm::MVT::i32, llvm::MVT::i64, llvm::ISD::SRL, std::swap(), llvm::ISD::TRUNCATE, llvm::MVT::v2i64, and llvm::MVT::v4i32.
Referenced by lowerMSABinaryBitImmIntr().
|
static |
Definition at line 1176 of file MipsSEISelLowering.cpp.
References llvm::ISD::EXTRACT_ELEMENT, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::MVT::i32, llvm::MipsISD::MTLOHI, and llvm::MVT::Untyped.
Referenced by lowerDSPIntr().
Definition at line 545 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), isVectorAllOnes(), and llvm::ISD::XOR.
Referenced by performORCombine().
Definition at line 2162 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getOpcode(), and llvm::ISD::UNDEF.
Referenced by isConstantOrUndefBUILD_VECTOR().
|
static |
Definition at line 2172 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getNumOperands(), llvm::SDNode::getOperand(), and isConstantOrUndef().
|
static |
Definition at line 852 of file MipsSEISelLowering.cpp.
References llvm::ISD::SETEQ, llvm::ISD::SETGE, llvm::ISD::SETGT, llvm::ISD::SETLE, llvm::ISD::SETLT, llvm::ISD::SETNE, llvm::ISD::SETUGE, llvm::ISD::SETUGT, llvm::ISD::SETULE, llvm::ISD::SETULT, and llvm::MVT::v2i16.
Referenced by performSETCCCombine().
|
static |
Check if the given BuildVectorSDNode is a splat. This method currently relies on DAG nodes being reused when equivalent, so it's possible for this to return false even when isConstantSplat returns true.
Definition at line 2121 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getNumOperands(), and llvm::SDNode::getOperand().
Definition at line 521 of file MipsSEISelLowering.cpp.
References llvm::ISD::BITCAST, llvm::dyn_cast(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::APInt::isAllOnesValue(), llvm::BuildVectorSDNode::isConstantSplat(), and N.
Referenced by isBitwiseInverse().
Definition at line 501 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::SDValue::getNode(), and llvm::BuildVectorSDNode::isConstantSplat().
Referenced by performORCombine().
|
static |
Definition at line 1202 of file MipsSEISelLowering.cpp.
References extractLOHI(), llvm::SelectionDAG::getMergeValues(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getNumOperands(), llvm::SDValue::getOpcode(), llvm::SDNode::getOperand(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), I, llvm::MVT::i64, initAccumulator(), llvm::MVT::Other, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::ISD::TargetConstant, llvm::MVT::Untyped, llvm::SDNode::value_begin(), and llvm::SDNode::value_end().
|
static |
Definition at line 1333 of file MipsSEISelLowering.cpp.
References llvm::ISD::BITCAST, llvm::ISD::BUILD_VECTOR, getBuildVectorSplat(), llvm::SelectionDAG::getConstant(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::MVT::i32, llvm::MVT::i64, llvm::APInt::lshr(), llvm::ISD::SHL, std::swap(), llvm::APInt::trunc(), llvm::MVT::v2i64, llvm::MVT::v4i32, and llvm::ISD::ZERO_EXTEND.
|
static |
Definition at line 1376 of file MipsSEISelLowering.cpp.
References llvm::ISD::AND, llvm::tgtok::Bit, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SelectionDAG::getNOT(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), and llvm::ISD::SHL.
|
static |
Definition at line 1386 of file MipsSEISelLowering.cpp.
References llvm::ISD::AND, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDNode::getValueType(), and llvm::EVT::getVectorElementType().
|
static |
Definition at line 1251 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SelectionDAG::getValueType(), llvm::SDNode::getValueType(), and llvm::EVT::getVectorElementType().
|
static |
Definition at line 2021 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADD, llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), and llvm::SDNode::getValueType().
|
static |
Definition at line 1293 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getConstant(), llvm::SDNode::getConstantOperandVal(), and llvm::SDNode::getValueType().
|
static |
Definition at line 1264 of file MipsSEISelLowering.cpp.
References llvm::ISD::BITCAST, llvm::ISD::BUILD_VECTOR, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::EVT::getVectorNumElements(), llvm::MVT::i32, llvm::MVT::v2i64, and llvm::MVT::v4i32.
|
static |
Definition at line 2089 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADD, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SelectionDAG::getStore(), and llvm::SDNode::getValueType().
|
static |
Definition at line 2345 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getVectorNumElements(), llvm::MipsISD::ILVEV, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2405 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getVectorNumElements(), llvm::MipsISD::ILVL, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2375 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getVectorNumElements(), llvm::MipsISD::ILVOD, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2435 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getVectorNumElements(), llvm::MipsISD::ILVR, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2466 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::PCKEV, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2492 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::PCKOD, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2287 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MVT::i32, llvm::MipsISD::SHF, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2516 of file MipsSEISelLowering.cpp.
References llvm::SmallVectorTemplateCommon< T >::begin(), llvm::ISD::BUILD_VECTOR, llvm::EVT::changeVectorElementTypeToInteger(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SelectionDAG::getTargetConstant(), llvm::EVT::getVectorElementType(), llvm::EVT::getVectorNumElements(), I, llvm_unreachable, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorTemplateCommon< T >::size(), and llvm::MipsISD::VSHF.
|
static |
Definition at line 429 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getValueType(), llvm::MipsSubtarget::hasMips32(), llvm::MVT::i32, llvm::TargetLowering::DAGCombinerInfo::isBeforeLegalize(), and selectMADD().
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 449 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::ConstantSDNode::getAPIntValue(), llvm::SDValue::getNode(), llvm::SDNode::getNumOperands(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDNode::getVTList(), llvm::MipsSubtarget::hasMSA(), llvm::SelectionDAG::MorphNodeTo(), llvm::MipsISD::VEXTRACT_SEXT_ELT, and llvm::MipsISD::VEXTRACT_ZEXT_ELT.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 748 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::EVT::getVectorElementType(), llvm::APInt::getZExtValue(), llvm::MipsSubtarget::hasDSP(), llvm::MVT::i32, llvm::BuildVectorSDNode::isConstantSplat(), and llvm::MipsSubtarget::isLittle().
Referenced by performSHLCombine(), performSRACombine(), and performSRLCombine().
|
static |
Definition at line 735 of file MipsSEISelLowering.cpp.
References llvm::CallingConv::C, genConstMult(), llvm::SDNode::getOperand(), llvm::MipsTargetLowering::getScalarShiftAmountTy(), llvm::SDNode::getValueType(), and llvm::EVT::isVector().
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 564 of file MipsSEISelLowering.cpp.
References llvm::ISD::AND, llvm::APInt::getBitWidth(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::MipsSubtarget::hasMSA(), llvm::EVT::is128BitVector(), llvm::APInt::isAllOnesValue(), isBitwiseInverse(), llvm::MipsSubtarget::isLittle(), isVSplat(), and llvm::ISD::VSELECT.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 870 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), isLegalDSPCondCode(), llvm::MipsISD::SETCC_DSP, llvm::MVT::v2i16, and llvm::MVT::v4i8.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 772 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getValueType(), performDSPShiftCombine(), llvm::MipsISD::SHLL_DSP, llvm::MVT::v2i16, and llvm::MVT::v4i8.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 795 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::SDValue::getNode(), llvm::SDNode::getNumOperands(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDNode::getValueType(), llvm::SDNode::getVTList(), llvm::ConstantSDNode::getZExtValue(), llvm::MipsSubtarget::hasDSPR2(), llvm::MipsSubtarget::hasMSA(), llvm::SelectionDAG::MorphNodeTo(), performDSPShiftCombine(), llvm::ISD::SHL, llvm::MipsISD::SHRA_DSP, llvm::MVT::v2i16, llvm::MVT::v4i8, llvm::MipsISD::VEXTRACT_SEXT_ELT, and llvm::MipsISD::VEXTRACT_ZEXT_ELT.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 841 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getValueType(), llvm::MipsSubtarget::hasDSPR2(), performDSPShiftCombine(), llvm::MipsISD::SHRL_DSP, llvm::MVT::v2i16, and llvm::MVT::v4i8.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 684 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getValueType(), llvm::MipsSubtarget::hasMips32(), llvm::MVT::i32, llvm::TargetLowering::DAGCombinerInfo::isBeforeLegalize(), and selectMSUB().
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 883 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::EVT::is128BitVector(), llvm::EVT::isInteger(), llvm::MipsISD::SELECT_CC_DSP, llvm::ISD::SETCC, llvm::MipsISD::SETCC_DSP, llvm::ISD::SETLE, llvm::ISD::SETLT, llvm::ISD::SETULE, llvm::ISD::SETULT, llvm::NVPTX::PTXLdStInstCode::Signed, llvm::MVT::v2i16, llvm::MVT::v4i8, llvm::MipsISD::VSMAX, llvm::MipsISD::VSMIN, llvm::MipsISD::VUMAX, and llvm::MipsISD::VUMIN.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 939 of file MipsSEISelLowering.cpp.
References llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::MipsSubtarget::hasMSA(), llvm::EVT::is128BitVector(), llvm::ISD::isBuildVectorAllOnes(), llvm::EVT::isInteger(), llvm::ISD::OR, and llvm::MipsISD::VNOR.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 293 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADDC, llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::SDValue::getResNo(), llvm::SDValue::hasOneUse(), llvm::MVT::i32, llvm::MipsISD::MAdd, llvm::MipsISD::MAddu, llvm::MipsISD::MFHI, llvm::MipsISD::MFLO, llvm::MipsISD::MTLOHI, llvm::SelectionDAG::ReplaceAllUsesOfValueWith(), llvm::ISD::SMUL_LOHI, llvm::ISD::UMUL_LOHI, llvm::MVT::Untyped, and llvm::SDValue::use_empty().
Referenced by performADDECombine().
|
static |
Definition at line 365 of file MipsSEISelLowering.cpp.
References llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::SDValue::getResNo(), llvm::MVT::Glue, llvm::SDValue::hasOneUse(), llvm::MVT::i32, llvm::MipsISD::MFHI, llvm::MipsISD::MFLO, llvm::MipsISD::MSub, llvm::MipsISD::MSubu, llvm::MipsISD::MTLOHI, llvm::SelectionDAG::ReplaceAllUsesOfValueWith(), llvm::ISD::SMUL_LOHI, llvm::ISD::SUBC, llvm::ISD::UMUL_LOHI, llvm::MVT::Untyped, and llvm::SDValue::use_empty().
Referenced by performSUBECombine().
|
static |
|
static |
Referenced by llvm::MipsSETargetLowering::MipsSETargetLowering().