|
LLVM
3.7.0
|
#include "MipsSEISelLowering.h"#include "MipsMachineFunction.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 27 of file MipsSEISelLowering.cpp.
|
static |
Definition at line 1300 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 |
Determine whether a range fits a regular pattern of values.
This function accounts for the possibility of jumping over the End iterator.
Definition at line 2477 of file MipsSEISelLowering.cpp.
References I.
|
static |
Definition at line 796 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 X.
Referenced by performMULCombine().
|
static |
Definition at line 1414 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::makeArrayRef(), llvm::ISD::SRL, std::swap(), llvm::ISD::TRUNCATE, llvm::MVT::v2i64, and llvm::MVT::v4i32.
Referenced by lowerMSABinaryBitImmIntr().
|
static |
Definition at line 1292 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 644 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), isVectorAllOnes(), and llvm::ISD::XOR.
Referenced by performORCombine().
Definition at line 2299 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getOpcode(), and llvm::ISD::UNDEF.
Referenced by isConstantOrUndefBUILD_VECTOR().
|
static |
Definition at line 2309 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getNumOperands(), llvm::SDNode::getOperand(), and isConstantOrUndef().
|
static |
Definition at line 953 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 2258 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getNumOperands(), and llvm::SDNode::getOperand().
|
static |
Definition at line 2504 of file MipsSEISelLowering.cpp.
References llvm::SmallVectorTemplateCommon< T >::size().
Definition at line 620 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 600 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::SDValue::getNode(), and llvm::BuildVectorSDNode::isConstantSplat().
Referenced by performORCombine().
|
static |
Definition at line 1318 of file MipsSEISelLowering.cpp.
References llvm::DL, 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::ISD::TargetConstant, llvm::MVT::Untyped, llvm::SDNode::value_begin(), and llvm::SDNode::value_end().
|
static |
Definition at line 1450 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 1494 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(), One, and llvm::ISD::SHL.
|
static |
Definition at line 1504 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 1367 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 2158 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADD, llvm::dwarf::syntax::Address, llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), and llvm::SDNode::getValueType().
|
static |
Definition at line 1409 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getConstant(), llvm::SDNode::getConstantOperandVal(), and llvm::SDNode::getValueType().
|
static |
Definition at line 1380 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::makeArrayRef(), llvm::MVT::v2i64, and llvm::MVT::v4i32.
|
static |
Definition at line 2226 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADD, llvm::dwarf::syntax::Address, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SelectionDAG::getStore(), and llvm::SDNode::getValueType().
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
|
static |
Definition at line 2424 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 2803 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(), and llvm::MipsISD::VSHF.
|
static |
Definition at line 528 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getValueType(), llvm::MipsSubtarget::hasMips32(), llvm::MipsSubtarget::hasMips32r6(), llvm::MVT::i32, llvm::TargetLowering::DAGCombinerInfo::isBeforeLegalize(), and selectMADD().
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 548 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::ConstantSDNode::getAPIntValue(), llvm::SelectionDAG::getNode(), llvm::SDNode::getNumOperands(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::EVT::getSizeInBits(), llvm::SDNode::getVTList(), llvm::MipsSubtarget::hasMSA(), llvm::Log2(), llvm::makeArrayRef(), llvm::MipsISD::VEXTRACT_SEXT_ELT, and llvm::MipsISD::VEXTRACT_ZEXT_ELT.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 848 of file MipsSEISelLowering.cpp.
References llvm::DL, 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 834 of file MipsSEISelLowering.cpp.
References genConstMult(), llvm::SelectionDAG::getDataLayout(), llvm::SDNode::getOperand(), llvm::MipsTargetLowering::getScalarShiftAmountTy(), llvm::SDNode::getValueType(), and llvm::EVT::isVector().
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 663 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 971 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 873 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 896 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::SelectionDAG::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::makeArrayRef(), 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 942 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 783 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 984 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, 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 1040 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 392 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADDC, llvm::DL, 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 464 of file MipsSEISelLowering.cpp.
References llvm::DL, 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().
1.8.6