LLVM  10.0.0svn
Classes | Macros | Functions | Variables
SystemZISelLowering.cpp File Reference
#include "SystemZISelLowering.h"
#include "SystemZCallingConv.h"
#include "SystemZConstantPoolValue.h"
#include "SystemZMachineFunctionInfo.h"
#include "SystemZTargetMachine.h"
#include "llvm/CodeGen/CallingConvLower.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/CodeGen/TargetLoweringObjectFileImpl.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/KnownBits.h"
#include <cctype>
#include "SystemZGenCallingConv.inc"
Include dependency graph for SystemZISelLowering.cpp:

Go to the source code of this file.

Classes

struct  AddressingMode
 

Macros

#define DEBUG_TYPE   "systemz-lower"
 
#define CONV(X)
 
#define OPCODE(NAME)   case SystemZISD::NAME: return "SystemZISD::" #NAME
 

Functions

static bool is32Bit (EVT VT)
 
static MachineOperand earlyUseOperand (MachineOperand Op)
 
static AddressingMode getLoadStoreAddrMode (bool HasVector, Type *Ty)
 
static AddressingMode supportedAddressingMode (Instruction *I, bool HasVector)
 
static std::pair< unsigned, const TargetRegisterClass * > parseRegisterNumber (StringRef Constraint, const TargetRegisterClass *RC, const unsigned *Map, unsigned Size)
 
static void VerifyVectorType (MVT VT, EVT ArgVT)
 
static void VerifyVectorTypes (const SmallVectorImpl< ISD::InputArg > &Ins)
 
static void VerifyVectorTypes (const SmallVectorImpl< ISD::OutputArg > &Outs)
 
static SDValue convertLocVTToValVT (SelectionDAG &DAG, const SDLoc &DL, CCValAssign &VA, SDValue Chain, SDValue Value)
 
static SDValue convertValVTToLocVT (SelectionDAG &DAG, const SDLoc &DL, CCValAssign &VA, SDValue Value)
 
static bool canUseSiblingCall (const CCState &ArgCCInfo, SmallVectorImpl< CCValAssign > &ArgLocs, SmallVectorImpl< ISD::OutputArg > &Outs)
 
static bool isIntrinsicWithCCAndChain (SDValue Op, unsigned &Opcode, unsigned &CCValid)
 
static bool isIntrinsicWithCC (SDValue Op, unsigned &Opcode, unsigned &CCValid)
 
static SDNodeemitIntrinsicWithCCAndChain (SelectionDAG &DAG, SDValue Op, unsigned Opcode)
 
static SDNodeemitIntrinsicWithCC (SelectionDAG &DAG, SDValue Op, unsigned Opcode)
 
static unsigned CCMaskForCondCode (ISD::CondCode CC)
 
static void adjustZeroCmp (SelectionDAG &DAG, const SDLoc &DL, Comparison &C)
 
static void adjustSubwordCmp (SelectionDAG &DAG, const SDLoc &DL, Comparison &C)
 
static bool isNaturalMemoryOperand (SDValue Op, unsigned ICmpType)
 
static bool shouldSwapCmpOperands (const Comparison &C)
 
static unsigned reverseCCMask (unsigned CCMask)
 
static void adjustForSubtraction (SelectionDAG &DAG, const SDLoc &DL, Comparison &C)
 
static void adjustForFNeg (Comparison &C)
 
static void adjustForLTGFR (Comparison &C)
 
static void adjustICmpTruncate (SelectionDAG &DAG, const SDLoc &DL, Comparison &C)
 
static bool isSimpleShift (SDValue N, unsigned &ShiftVal)
 
static unsigned getTestUnderMaskCond (unsigned BitSize, unsigned CCMask, uint64_t Mask, uint64_t CmpVal, unsigned ICmpType)
 
static void adjustForTestUnderMask (SelectionDAG &DAG, const SDLoc &DL, Comparison &C)
 
static void adjustForRedundantAnd (SelectionDAG &DAG, const SDLoc &DL, Comparison &C)
 
static Comparison getIntrinsicCmp (SelectionDAG &DAG, unsigned Opcode, SDValue Call, unsigned CCValid, uint64_t CC, ISD::CondCode Cond)
 
static Comparison getCmp (SelectionDAG &DAG, SDValue CmpOp0, SDValue CmpOp1, ISD::CondCode Cond, const SDLoc &DL)
 
static SDValue emitCmp (SelectionDAG &DAG, const SDLoc &DL, Comparison &C)
 
static void lowerMUL_LOHI32 (SelectionDAG &DAG, const SDLoc &DL, unsigned Extend, SDValue Op0, SDValue Op1, SDValue &Hi, SDValue &Lo)
 
static void lowerGR128Binary (SelectionDAG &DAG, const SDLoc &DL, EVT VT, unsigned Opcode, SDValue Op0, SDValue Op1, SDValue &Even, SDValue &Odd)
 
static SDValue emitSETCC (SelectionDAG &DAG, const SDLoc &DL, SDValue CCReg, unsigned CCValid, unsigned CCMask)
 
static unsigned getVectorComparison (ISD::CondCode CC, bool IsFP)
 
static unsigned getVectorComparisonOrInvert (ISD::CondCode CC, bool IsFP, bool &Invert)
 
static SDValue expandV4F32ToV2F64 (SelectionDAG &DAG, int Start, const SDLoc &DL, SDValue Op)
 
static bool isAbsolute (SDValue CmpOp, SDValue Pos, SDValue Neg)
 
static SDValue getAbsolute (SelectionDAG &DAG, const SDLoc &DL, SDValue Op, bool IsNegative)
 
static bool isAddCarryChain (SDValue Carry)
 
static bool isSubBorrowChain (SDValue Carry)
 
static SDValue getCCResult (SelectionDAG &DAG, SDValue CCReg)
 
static bool chooseShuffleOpNos (int *OpNos, unsigned &OpNo0, unsigned &OpNo1)
 
static bool matchPermute (const SmallVectorImpl< int > &Bytes, const Permute &P, unsigned &OpNo0, unsigned &OpNo1)
 
static const Permute * matchPermute (const SmallVectorImpl< int > &Bytes, unsigned &OpNo0, unsigned &OpNo1)
 
static bool matchDoublePermute (const SmallVectorImpl< int > &Bytes, const Permute &P, SmallVectorImpl< int > &Transform)
 
static const Permute * matchDoublePermute (const SmallVectorImpl< int > &Bytes, SmallVectorImpl< int > &Transform)
 
static bool getVPermMask (SDValue ShuffleOp, SmallVectorImpl< int > &Bytes)
 
static bool getShuffleInput (const SmallVectorImpl< int > &Bytes, unsigned Start, unsigned BytesPerElement, int &Base)
 
static bool isShlDoublePermute (const SmallVectorImpl< int > &Bytes, unsigned &StartIndex, unsigned &OpNo0, unsigned &OpNo1)
 
static SDValue getPermuteNode (SelectionDAG &DAG, const SDLoc &DL, const Permute &P, SDValue Op0, SDValue Op1)
 
static SDValue getGeneralPermuteNode (SelectionDAG &DAG, const SDLoc &DL, SDValue *Ops, const SmallVectorImpl< int > &Bytes)
 
static bool isScalarToVector (SDValue Op)
 
static SDValue buildScalarToVector (SelectionDAG &DAG, const SDLoc &DL, EVT VT, SDValue Value)
 
static SDValue buildMergeScalars (SelectionDAG &DAG, const SDLoc &DL, EVT VT, SDValue Op0, SDValue Op1)
 
static SDValue joinDwords (SelectionDAG &DAG, const SDLoc &DL, SDValue Op0, SDValue Op1)
 
static SDValue tryBuildVectorShuffle (SelectionDAG &DAG, BuildVectorSDNode *BVN)
 
static SDValue lowerI128ToGR128 (SelectionDAG &DAG, SDValue In)
 
static SDValue lowerGR128ToI128 (SelectionDAG &DAG, SDValue In)
 
static bool isVectorElementSwap (ArrayRef< int > M, EVT VT)
 
static bool combineCCMask (SDValue &CCReg, int &CCValid, int &CCMask)
 
static APInt getDemandedSrcElements (SDValue Op, const APInt &DemandedElts, unsigned OpNo)
 
static void computeKnownBitsBinOp (const SDValue Op, KnownBits &Known, const APInt &DemandedElts, const SelectionDAG &DAG, unsigned Depth, unsigned OpNo)
 
static unsigned computeNumSignBitsBinOp (SDValue Op, const APInt &DemandedElts, const SelectionDAG &DAG, unsigned Depth, unsigned OpNo)
 
static MachineBasicBlockemitBlockAfter (MachineBasicBlock *MBB)
 
static MachineBasicBlocksplitBlockAfter (MachineBasicBlock::iterator MI, MachineBasicBlock *MBB)
 
static MachineBasicBlocksplitBlockBefore (MachineBasicBlock::iterator MI, MachineBasicBlock *MBB)
 
static Register forceReg (MachineInstr &MI, MachineOperand &Base, const SystemZInstrInfo *TII)
 
static bool checkCCKill (MachineInstr &MI, MachineBasicBlock *MBB)
 
static bool isSelectPseudo (MachineInstr &MI)
 
static void createPHIsForSelects (MachineBasicBlock::iterator MIItBegin, MachineBasicBlock::iterator MIItEnd, MachineBasicBlock *TrueMBB, MachineBasicBlock *FalseMBB, MachineBasicBlock *SinkMBB)
 

Variables

static const Permute PermuteForms []
 

Macro Definition Documentation

◆ CONV

#define CONV (   X)
Value:
case ISD::SET##X: return SystemZ::CCMASK_CMP_##X; \
case ISD::SETO##X: return SystemZ::CCMASK_CMP_##X; \
case ISD::SETU##X: return SystemZ::CCMASK_CMP_UO | SystemZ::CCMASK_CMP_##X
static GCMetadataPrinterRegistry::Add< ErlangGCPrinter > X("erlang", "erlang-compatible garbage collector")
#define SET(n)
Definition: MD5.cpp:68
const unsigned CCMASK_CMP_UO
Definition: SystemZ.h:42

Referenced by CCMaskForCondCode().

◆ DEBUG_TYPE

#define DEBUG_TYPE   "systemz-lower"

Definition at line 30 of file SystemZISelLowering.cpp.

◆ OPCODE

#define OPCODE (   NAME)    case SystemZISD::NAME: return "SystemZISD::" #NAME

Function Documentation

◆ adjustForFNeg()

static void adjustForFNeg ( Comparison &  C)
static

◆ adjustForLTGFR()

static void adjustForLTGFR ( Comparison &  C)
static

◆ adjustForRedundantAnd()

static void adjustForRedundantAnd ( SelectionDAG DAG,
const SDLoc DL,
Comparison &  C 
)
static

◆ adjustForSubtraction()

static void adjustForSubtraction ( SelectionDAG DAG,
const SDLoc DL,
Comparison &  C 
)
static

◆ adjustForTestUnderMask()

static void adjustForTestUnderMask ( SelectionDAG DAG,
const SDLoc DL,
Comparison &  C 
)
static

◆ adjustICmpTruncate()

static void adjustICmpTruncate ( SelectionDAG DAG,
const SDLoc DL,
Comparison &  C 
)
static

◆ adjustSubwordCmp()

static void adjustSubwordCmp ( SelectionDAG DAG,
const SDLoc DL,
Comparison &  C 
)
static

◆ adjustZeroCmp()

static void adjustZeroCmp ( SelectionDAG DAG,
const SDLoc DL,
Comparison &  C 
)
static

◆ buildMergeScalars()

static SDValue buildMergeScalars ( SelectionDAG DAG,
const SDLoc DL,
EVT  VT,
SDValue  Op0,
SDValue  Op1 
)
static

◆ buildScalarToVector()

static SDValue buildScalarToVector ( SelectionDAG DAG,
const SDLoc DL,
EVT  VT,
SDValue  Value 
)
static

◆ canUseSiblingCall()

static bool canUseSiblingCall ( const CCState ArgCCInfo,
SmallVectorImpl< CCValAssign > &  ArgLocs,
SmallVectorImpl< ISD::OutputArg > &  Outs 
)
static

◆ CCMaskForCondCode()

static unsigned CCMaskForCondCode ( ISD::CondCode  CC)
static

◆ checkCCKill()

static bool checkCCKill ( MachineInstr MI,
MachineBasicBlock MBB 
)
static

◆ chooseShuffleOpNos()

static bool chooseShuffleOpNos ( int *  OpNos,
unsigned OpNo0,
unsigned OpNo1 
)
static

Definition at line 4057 of file SystemZISelLowering.cpp.

Referenced by isShlDoublePermute(), and matchPermute().

◆ combineCCMask()

static bool combineCCMask ( SDValue CCReg,
int &  CCValid,
int &  CCMask 
)
static

◆ computeKnownBitsBinOp()

static void computeKnownBitsBinOp ( const SDValue  Op,
KnownBits Known,
const APInt DemandedElts,
const SelectionDAG DAG,
unsigned  Depth,
unsigned  OpNo 
)
static

◆ computeNumSignBitsBinOp()

static unsigned computeNumSignBitsBinOp ( SDValue  Op,
const APInt DemandedElts,
const SelectionDAG DAG,
unsigned  Depth,
unsigned  OpNo 
)
static

◆ convertLocVTToValVT()

static SDValue convertLocVTToValVT ( SelectionDAG DAG,
const SDLoc DL,
CCValAssign VA,
SDValue  Chain,
SDValue  Value 
)
static

◆ convertValVTToLocVT()

static SDValue convertValVTToLocVT ( SelectionDAG DAG,
const SDLoc DL,
CCValAssign VA,
SDValue  Value 
)
static

◆ createPHIsForSelects()

static void createPHIsForSelects ( MachineBasicBlock::iterator  MIItBegin,
MachineBasicBlock::iterator  MIItEnd,
MachineBasicBlock TrueMBB,
MachineBasicBlock FalseMBB,
MachineBasicBlock SinkMBB 
)
static

Definition at line 6568 of file SystemZISelLowering.cpp.

References add(), llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addImm(), llvm::MachineBasicBlock::addLiveIn(), llvm::MachineInstrBuilder::addMBB(), llvm::MachineInstrBuilder::addMemOperand(), llvm::MachineInstr::addOperand(), llvm::MachineInstrBuilder::addReg(), llvm::MachineBasicBlock::addSuccessor(), assert(), llvm::MachineBasicBlock::begin(), llvm::BuildMI(), llvm::SystemZ::CCMASK_3, llvm::SystemZ::CCMASK_ANY, llvm::SystemZ::CCMASK_CMP_NE, llvm::SystemZ::CCMASK_CS, llvm::SystemZ::CCMASK_CS_NE, llvm::SystemZ::CCMASK_ICMP, checkCCKill(), llvm::SystemZISD::CLC, llvm::MachineOperand::CreateReg(), llvm::MachineRegisterInfo::createVirtualRegister(), llvm::RegState::Define, earlyUseOperand(), emitBlockAfter(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::MachineBasicBlock::end(), llvm::MachineBasicBlock::erase(), llvm::MachineInstr::eraseFromParent(), llvm::DenseMapBase< DenseMap< KeyT, ValueT, KeyInfoT, BucketT >, KeyT, ValueT, KeyInfoT, BucketT >::find(), first, forceReg(), llvm::SystemZMC::FP64Regs, llvm::MCInstrInfo::get(), llvm::MachineInstr::getDebugLoc(), llvm::MachineOperand::getImm(), llvm::TargetSubtargetInfo::getInstrInfo(), llvm::MachineInstr::getNumExplicitOperands(), llvm::SystemZInstrInfo::getOpcodeForOffset(), llvm::MachineInstr::getOperand(), llvm::MachineBasicBlock::getParent(), llvm::MachineFunction::getProperties(), llvm::MachineOperand::getReg(), llvm::MachineRegisterInfo::getRegClass(), llvm::MachineFunction::getRegInfo(), llvm::MachineFunction::getSubtarget(), llvm::SystemZMC::GR64Regs, llvm::TargetFrameLowering::hasFP(), llvm::MipsISD::Hi, I, llvm::MachineOperand::isIdenticalTo(), isSelectPseudo(), llvm::MachineInstr::killsRegister(), llvm::MipsISD::Lo, llvm::MachineInstr::memoperands(), MI, MRI, llvm::SystemZISD::MVC, llvm::MachineFunctionProperties::NoPHIs, llvm::SystemZ::PFD_WRITE, Reg, Register, llvm::MachineInstr::registerDefIsDead(), llvm::MachineFunctionProperties::reset(), second, llvm::MachineInstr::setDesc(), llvm::MachineOperand::setImm(), llvm::skipDebugInstructionsForward(), splitBlockAfter(), splitBlockBefore(), std::swap(), TII, and llvm::SystemZMC::VR128Regs.

◆ earlyUseOperand()

static MachineOperand earlyUseOperand ( MachineOperand  Op)
static

◆ emitBlockAfter()

static MachineBasicBlock* emitBlockAfter ( MachineBasicBlock MBB)
static

◆ emitCmp()

static SDValue emitCmp ( SelectionDAG DAG,
const SDLoc DL,
Comparison &  C 
)
static

Definition at line 2536 of file SystemZISelLowering.cpp.

Referenced by CC_MipsO32_FP64(), getAbsolute(), getCompareCC(), and isMulPowOf2().

◆ emitIntrinsicWithCC()

static SDNode* emitIntrinsicWithCC ( SelectionDAG DAG,
SDValue  Op,
unsigned  Opcode 
)
static

◆ emitIntrinsicWithCCAndChain()

static SDNode* emitIntrinsicWithCCAndChain ( SelectionDAG DAG,
SDValue  Op,
unsigned  Opcode 
)
static

◆ emitSETCC()

static SDValue emitSETCC ( SelectionDAG DAG,
const SDLoc DL,
SDValue  CCReg,
unsigned  CCValid,
unsigned  CCMask 
)
static

◆ expandV4F32ToV2F64()

static SDValue expandV4F32ToV2F64 ( SelectionDAG DAG,
int  Start,
const SDLoc DL,
SDValue  Op 
)
static

Definition at line 2649 of file SystemZISelLowering.cpp.

◆ forceReg()

static Register forceReg ( MachineInstr MI,
MachineOperand Base,
const SystemZInstrInfo TII 
)
static

◆ getAbsolute()

static SDValue getAbsolute ( SelectionDAG DAG,
const SDLoc DL,
SDValue  Op,
bool  IsNegative 
)
static

◆ getCCResult()

static SDValue getCCResult ( SelectionDAG DAG,
SDValue  CCReg 
)
static

◆ getCmp()

static Comparison getCmp ( SelectionDAG DAG,
SDValue  CmpOp0,
SDValue  CmpOp1,
ISD::CondCode  Cond,
const SDLoc DL 
)
static

Definition at line 2481 of file SystemZISelLowering.cpp.

Referenced by getAbsolute(), and INITIALIZE_PASS().

◆ getDemandedSrcElements()

static APInt getDemandedSrcElements ( SDValue  Op,
const APInt DemandedElts,
unsigned  OpNo 
)
static

◆ getGeneralPermuteNode()

static SDValue getGeneralPermuteNode ( SelectionDAG DAG,
const SDLoc DL,
SDValue Ops,
const SmallVectorImpl< int > &  Bytes 
)
static

◆ getIntrinsicCmp()

static Comparison getIntrinsicCmp ( SelectionDAG DAG,
unsigned  Opcode,
SDValue  Call,
unsigned  CCValid,
uint64_t  CC,
ISD::CondCode  Cond 
)
static

Definition at line 2448 of file SystemZISelLowering.cpp.

◆ getLoadStoreAddrMode()

static AddressingMode getLoadStoreAddrMode ( bool  HasVector,
Type Ty 
)
static

Definition at line 822 of file SystemZISelLowering.cpp.

References llvm::Type::isIntegerTy(), and llvm::SystemZISD::MVC.

Referenced by supportedAddressingMode().

◆ getPermuteNode()

static SDValue getPermuteNode ( SelectionDAG DAG,
const SDLoc DL,
const Permute &  P,
SDValue  Op0,
SDValue  Op1 
)
static

◆ getShuffleInput()

static bool getShuffleInput ( const SmallVectorImpl< int > &  Bytes,
unsigned  Start,
unsigned  BytesPerElement,
int &  Base 
)
static

◆ getTestUnderMaskCond()

static unsigned getTestUnderMaskCond ( unsigned  BitSize,
unsigned  CCMask,
uint64_t  Mask,
uint64_t  CmpVal,
unsigned  ICmpType 
)
static

◆ getVectorComparison()

static unsigned getVectorComparison ( ISD::CondCode  CC,
bool  IsFP 
)
static

◆ getVectorComparisonOrInvert()

static unsigned getVectorComparisonOrInvert ( ISD::CondCode  CC,
bool  IsFP,
bool Invert 
)
static

◆ getVPermMask()

static bool getVPermMask ( SDValue  ShuffleOp,
SmallVectorImpl< int > &  Bytes 
)
static

◆ is32Bit()

static bool is32Bit ( EVT  VT)
static

◆ isAbsolute()

static bool isAbsolute ( SDValue  CmpOp,
SDValue  Pos,
SDValue  Neg 
)
static

◆ isAddCarryChain()

static bool isAddCarryChain ( SDValue  Carry)
static

◆ isIntrinsicWithCC()

static bool isIntrinsicWithCC ( SDValue  Op,
unsigned Opcode,
unsigned CCValid 
)
static

◆ isIntrinsicWithCCAndChain()

static bool isIntrinsicWithCCAndChain ( SDValue  Op,
unsigned Opcode,
unsigned CCValid 
)
static

◆ isNaturalMemoryOperand()

static bool isNaturalMemoryOperand ( SDValue  Op,
unsigned  ICmpType 
)
static

◆ isScalarToVector()

static bool isScalarToVector ( SDValue  Op)
static

◆ isSelectPseudo()

static bool isSelectPseudo ( MachineInstr MI)
static

Definition at line 6547 of file SystemZISelLowering.cpp.

References llvm::MachineInstr::getOpcode().

Referenced by createPHIsForSelects().

◆ isShlDoublePermute()

static bool isShlDoublePermute ( const SmallVectorImpl< int > &  Bytes,
unsigned StartIndex,
unsigned OpNo0,
unsigned OpNo1 
)
static

Definition at line 4204 of file SystemZISelLowering.cpp.

References chooseShuffleOpNos(), I, and llvm::SystemZ::VectorBytes.

Referenced by getGeneralPermuteNode().

◆ isSimpleShift()

static bool isSimpleShift ( SDValue  N,
unsigned ShiftVal 
)
static

◆ isSubBorrowChain()

static bool isSubBorrowChain ( SDValue  Carry)
static

Definition at line 3486 of file SystemZISelLowering.cpp.

References llvm::ISD::ADD, llvm::SystemZISD::ADDCARRY, llvm::ISD::ADDCARRY, llvm::ISD::AND, llvm::ISD::ANY_EXTEND, assert(), llvm::SystemZISD::ATOMIC_CMP_SWAP, llvm::SystemZISD::ATOMIC_CMP_SWAPW, llvm::ISD::ATOMIC_LOAD_ADD, llvm::SystemZISD::ATOMIC_LOADW_ADD, llvm::SystemZISD::ATOMIC_LOADW_AND, llvm::SystemZISD::ATOMIC_LOADW_NAND, llvm::SystemZISD::ATOMIC_LOADW_SUB, llvm::SystemZISD::ATOMIC_SWAPW, llvm::ISD::BITCAST, llvm::SystemZ::CCMASK_CMP_EQ, llvm::SystemZ::CCMASK_CS, llvm::SystemZ::CCMASK_CS_EQ, llvm::SystemZ::CCMASK_ICMP, llvm::SystemZ::CCMASK_LOGICAL, llvm::SystemZ::CCMASK_LOGICAL_BORROW, llvm::SystemZ::CCMASK_LOGICAL_CARRY, llvm::SelectionDAG::computeKnownBits(), emitSETCC(), llvm::ISD::EXTLOAD, llvm::SystemZISD::GET_CCMASK, llvm::SelectionDAG::getAtomic(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getExtLoad(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getInfo(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), llvm::SelectionDAG::getMachineNode(), llvm::SelectionDAG::getMemIntrinsicNode(), llvm::SelectionDAG::getMergeValues(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::EVT::getScalarSizeInBits(), llvm::SDNode::getSimpleValueType(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getSplatBuildVector(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTargetConstant(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SelectionDAG::getTruncStore(), llvm::SDValue::getValue(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::SelectionDAG::getVTList(), llvm::SDNode::getVTList(), llvm::Function::hasFnAttribute(), I, llvm::MVT::i1, llvm::MVT::i32, llvm::MVT::i64, isAddCarryChain(), llvm::isInt< 32 >(), llvm::TargetLoweringBase::isTypeLegal(), llvm::EVT::isVector(), llvm_unreachable, llvm::Log2_32_Ceil(), llvm::SystemZISD::MEMBARRIER, llvm::ISD::MERGE_VALUES, llvm::MachineMemOperand::MONone, llvm::MachineMemOperand::MOVolatile, N, llvm::ISD::OR, llvm::MVT::Other, llvm::SystemZ::PFD_READ, llvm::SystemZ::PFD_WRITE, llvm::SystemZISD::POPCNT, llvm::SystemZISD::PREFETCH, llvm::SelectionDAG::ReplaceAllUsesOfValueWith(), llvm::ISD::ROTL, llvm::SequentiallyConsistent, llvm::ISD::SHL, SI, llvm::ISD::SRL, llvm::ISD::SUB, llvm::SystemZISD::SUBCARRY, llvm::ISD::SUBCARRY, Success, llvm::SyncScope::System, llvm::ISD::TRUNCATE, llvm::ISD::USUBO, llvm::MVT::v16i8, llvm::MVT::v4i32, llvm::SystemZISD::VSHL_BY_SCALAR, llvm::SystemZISD::VSRL_BY_SCALAR, llvm::SystemZISD::VSUM, and llvm::KnownBits::Zero.

◆ isVectorElementSwap()

static bool isVectorElementSwap ( ArrayRef< int >  M,
EVT  VT 
)
static

Definition at line 5568 of file SystemZISelLowering.cpp.

References llvm::ISD::ANY_EXTEND, llvm::ISD::BITCAST, llvm::ISD::BSWAP, llvm::ISD::Constant, llvm::dyn_cast(), llvm::ISD::EXTRACT_VECTOR_ELT, llvm::MVT::f32, llvm::MVT::f64, llvm::ISD::FP_EXTEND, llvm::ISD::FP_ROUND, llvm::LoadSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::ShuffleVectorSDNode::getMask(), llvm::SelectionDAG::getMemIntrinsicNode(), llvm::MemSDNode::getMemOperand(), llvm::MemSDNode::getMemoryVT(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::EVT::getScalarSizeInBits(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTruncStore(), llvm::SDValue::getValue(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::EVT::getVectorElementType(), llvm::EVT::getVectorNumElements(), llvm::SelectionDAG::getVectorShuffle(), llvm::SelectionDAG::getVTList(), llvm::SDValue::hasOneUse(), llvm::SDNode::hasOneUse(), llvm::MVT::i16, llvm::MVT::i32, llvm::ISD::INSERT_VECTOR_ELT, llvm::SelectionDAG::isConstantIntBuildVectorOrConstantInt(), llvm::EVT::isInteger(), llvm::ISD::isNON_EXTLoad(), llvm::EVT::isSimple(), llvm::SDValue::isUndef(), llvm::EVT::isVector(), llvm::ARM_MB::LD, llvm::SPII::Load, llvm::SystemZISD::LRV, N, llvm::MVT::Other, llvm::SelectionDAG::ReplaceAllUsesOfValueWith(), llvm::SystemZISD::REPLICATE, llvm::SystemZISD::STRV, llvm::ISD::TRUNCATE, llvm::SDNode::uses(), llvm::MVT::v2f64, llvm::MVT::v4f32, llvm::ISD::VECTOR_SHUFFLE, llvm::SystemZISD::VEXTEND, llvm::SystemZISD::VLER, llvm::SystemZISD::VROUND, and llvm::SystemZISD::VSTER.

◆ joinDwords()

static SDValue joinDwords ( SelectionDAG DAG,
const SDLoc DL,
SDValue  Op0,
SDValue  Op1 
)
static

◆ lowerGR128Binary()

static void lowerGR128Binary ( SelectionDAG DAG,
const SDLoc DL,
EVT  VT,
unsigned  Opcode,
SDValue  Op0,
SDValue  Op1,
SDValue Even,
SDValue Odd 
)
static

◆ lowerGR128ToI128()

static SDValue lowerGR128ToI128 ( SelectionDAG DAG,
SDValue  In 
)
static

◆ lowerI128ToGR128()

static SDValue lowerI128ToGR128 ( SelectionDAG DAG,
SDValue  In 
)
static

◆ lowerMUL_LOHI32()

static void lowerMUL_LOHI32 ( SelectionDAG DAG,
const SDLoc DL,
unsigned  Extend,
SDValue  Op0,
SDValue  Op1,
SDValue Hi,
SDValue Lo 
)
static

◆ matchDoublePermute() [1/2]

static bool matchDoublePermute ( const SmallVectorImpl< int > &  Bytes,
const Permute &  P,
SmallVectorImpl< int > &  Transform 
)
static

Definition at line 4117 of file SystemZISelLowering.cpp.

References From, and llvm::SystemZ::VectorBytes.

Referenced by getGeneralPermuteNode(), and matchDoublePermute().

◆ matchDoublePermute() [2/2]

static const Permute* matchDoublePermute ( const SmallVectorImpl< int > &  Bytes,
SmallVectorImpl< int > &  Transform 
)
static

Definition at line 4139 of file SystemZISelLowering.cpp.

References matchDoublePermute(), and P.

◆ matchPermute() [1/2]

static bool matchPermute ( const SmallVectorImpl< int > &  Bytes,
const Permute &  P,
unsigned OpNo0,
unsigned OpNo1 
)
static

Definition at line 4080 of file SystemZISelLowering.cpp.

References chooseShuffleOpNos(), I, and llvm::SystemZ::VectorBytes.

Referenced by getGeneralPermuteNode(), and matchPermute().

◆ matchPermute() [2/2]

static const Permute* matchPermute ( const SmallVectorImpl< int > &  Bytes,
unsigned OpNo0,
unsigned OpNo1 
)
static

Definition at line 4104 of file SystemZISelLowering.cpp.

References matchPermute(), and P.

◆ parseRegisterNumber()

static std::pair<unsigned, const TargetRegisterClass *> parseRegisterNumber ( StringRef  Constraint,
const TargetRegisterClass RC,
const unsigned Map,
unsigned  Size 
)
static

◆ reverseCCMask()

static unsigned reverseCCMask ( unsigned  CCMask)
static

◆ shouldSwapCmpOperands()

static bool shouldSwapCmpOperands ( const Comparison &  C)
static

◆ splitBlockAfter()

static MachineBasicBlock* splitBlockAfter ( MachineBasicBlock::iterator  MI,
MachineBasicBlock MBB 
)
static

◆ splitBlockBefore()

static MachineBasicBlock* splitBlockBefore ( MachineBasicBlock::iterator  MI,
MachineBasicBlock MBB 
)
static

◆ supportedAddressingMode()

static AddressingMode supportedAddressingMode ( Instruction I,
bool  HasVector 
)
static

◆ tryBuildVectorShuffle()

static SDValue tryBuildVectorShuffle ( SelectionDAG DAG,
BuildVectorSDNode BVN 
)
static

◆ VerifyVectorType()

static void VerifyVectorType ( MVT  VT,
EVT  ArgVT 
)
static

◆ VerifyVectorTypes() [1/2]

static void VerifyVectorTypes ( const SmallVectorImpl< ISD::InputArg > &  Ins)
static

◆ VerifyVectorTypes() [2/2]

static void VerifyVectorTypes ( const SmallVectorImpl< ISD::OutputArg > &  Outs)
static

Definition at line 1232 of file SystemZISelLowering.cpp.

References llvm::SmallVectorBase::size(), and VerifyVectorType().

Variable Documentation

◆ PermuteForms

const Permute PermuteForms[]
static

Definition at line 4008 of file SystemZISelLowering.cpp.