|
LLVM
4.0.0
|
#include "MipsSEISelLowering.h"#include "MipsMachineFunction.h"#include "MipsRegisterInfo.h"#include "MipsTargetMachine.h"#include "llvm/ADT/APInt.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/ErrorHandling.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 > | UseMipsTailCalls ("mips-tail-calls", cl::Hidden, cl::desc("MIPS: permit 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 29 of file MipsSEISelLowering.cpp.
|
static |
Definition at line 1352 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 2660 of file MipsSEISelLowering.cpp.
References llvm::WebAssembly::End, and I.
|
static |
Definition at line 836 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 1469 of file MipsSEISelLowering.cpp.
References llvm::ISD::BITCAST, llvm::SelectionDAG::getBuildVector(), 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.
|
static |
Definition at line 1344 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 684 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), isVectorAllOnes(), and llvm::ISD::XOR.
Referenced by performORCombine().
Definition at line 2482 of file MipsSEISelLowering.cpp.
References llvm::SDNode::isUndef().
Referenced by isConstantOrUndefBUILD_VECTOR().
|
static |
Definition at line 2492 of file MipsSEISelLowering.cpp.
References llvm::SDNode::getNumOperands(), llvm::SDNode::getOperand(), i, and isConstantOrUndef().
|
static |
Definition at line 993 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 2441 of file MipsSEISelLowering.cpp.
References assert(), llvm::SDNode::getNumOperands(), llvm::SDNode::getOperand(), and i.
|
static |
Definition at line 2687 of file MipsSEISelLowering.cpp.
References assert(), and llvm::SmallVectorTemplateCommon< T >::size().
Definition at line 660 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 640 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::SDValue::getNode(), and llvm::BuildVectorSDNode::isConstantSplat().
Referenced by performORCombine().
|
static |
Definition at line 1370 of file MipsSEISelLowering.cpp.
References assert(), E, 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 1505 of file MipsSEISelLowering.cpp.
References llvm::ISD::BITCAST, llvm::SelectionDAG::getBuildVector(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getValueType(), llvm::MVT::i32, llvm::APInt::lshr(), std::swap(), llvm::APInt::trunc(), llvm::MVT::v2i64, and llvm::MVT::v4i32.
|
static |
Definition at line 1549 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 1559 of file MipsSEISelLowering.cpp.
References llvm::ISD::AND, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getScalarSizeInBits(), and llvm::SDNode::getValueType().
|
static |
Definition at line 1419 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 2328 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADD, llvm::dwarf::syntax::Address, llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SDNode::getValueType(), llvm::MipsSubtarget::isABI_N64(), Offset, and llvm::ISD::SIGN_EXTEND.
|
static |
Definition at line 1461 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getConstant(), llvm::SDNode::getConstantOperandVal(), llvm::EVT::getScalarType(), llvm::EVT::getSizeInBits(), and llvm::SDNode::getValueType().
|
static |
Definition at line 1432 of file MipsSEISelLowering.cpp.
References llvm::ISD::BITCAST, llvm::SelectionDAG::getBuildVector(), 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 2402 of file MipsSEISelLowering.cpp.
References llvm::ISD::ADD, llvm::dwarf::syntax::Address, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SelectionDAG::getStore(), llvm::SDNode::getValueType(), llvm::MipsSubtarget::isABI_N64(), Offset, and llvm::ISD::SIGN_EXTEND.
|
static |
Definition at line 2719 of file MipsSEISelLowering.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::WebAssembly::End, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::ILVEV, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2859 of file MipsSEISelLowering.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::WebAssembly::End, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::ILVL, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2765 of file MipsSEISelLowering.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::WebAssembly::End, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::ILVOD, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2812 of file MipsSEISelLowering.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::WebAssembly::End, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::ILVR, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2907 of file MipsSEISelLowering.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::WebAssembly::End, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::PCKEV, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2950 of file MipsSEISelLowering.cpp.
References assert(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::WebAssembly::End, llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::MipsISD::PCKOD, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2607 of file MipsSEISelLowering.cpp.
References llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), i, llvm::MVT::i32, llvm::MipsISD::SHF, and llvm::SmallVectorTemplateCommon< T >::size().
|
static |
Definition at line 2986 of file MipsSEISelLowering.cpp.
References llvm::SmallVectorTemplateCommon< T >::begin(), llvm::EVT::changeVectorElementTypeToInteger(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::SelectionDAG::getBuildVector(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SelectionDAG::getTargetConstant(), llvm::EVT::getVectorElementType(), llvm::EVT::getVectorNumElements(), I, i, llvm_unreachable, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), and llvm::MipsISD::VSHF.
|
static |
Definition at line 568 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 588 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::BitmaskEnumDetail::Mask(), llvm::MipsISD::VEXTRACT_SEXT_ELT, and llvm::MipsISD::VEXTRACT_ZEXT_ELT.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 888 of file MipsSEISelLowering.cpp.
References llvm::dyn_cast(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::EVT::getScalarSizeInBits(), 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 874 of file MipsSEISelLowering.cpp.
References C, 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 703 of file MipsSEISelLowering.cpp.
References llvm::ISD::AND, assert(), 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(), llvm::BitmaskEnumDetail::Mask(), and llvm::ISD::VSELECT.
Referenced by llvm::MipsSETargetLowering::PerformDAGCombine().
|
static |
Definition at line 1011 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 913 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 936 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 982 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 823 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 1024 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 1080 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 432 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 504 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 |
Referenced by llvm::MipsSETargetLowering::MipsSETargetLowering().
1.8.6