LLVM  8.0.1
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 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 bool tryBuildVectorByteMask (BuildVectorSDNode *BVN, uint64_t &Mask)
 
static SDValue tryBuildVectorReplicate (SelectionDAG &DAG, const SystemZInstrInfo *TII, const SDLoc &DL, EVT VT, uint64_t Value, unsigned BitsPerElement)
 
static SDValue tryBuildVectorShuffle (SelectionDAG &DAG, BuildVectorSDNode *BVN)
 
static SDValue buildVector (SelectionDAG &DAG, const SDLoc &DL, EVT VT, SmallVectorImpl< SDValue > &Elems)
 
static SDValue lowerI128ToGR128 (SelectionDAG &DAG, SDValue In)
 
static SDValue lowerGR128ToI128 (SelectionDAG &DAG, SDValue In)
 
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 unsigned 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:43

Referenced by CCMaskForCondCode().

◆ DEBUG_TYPE

#define DEBUG_TYPE   "systemz-lower"

Definition at line 31 of file SystemZISelLowering.cpp.

◆ OPCODE

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

Function Documentation

◆ adjustForFNeg()

static void adjustForFNeg ( Comparison &  C)
static

Definition at line 1948 of file SystemZISelLowering.cpp.

References llvm::dyn_cast(), E, llvm::ISD::FNEG, llvm::SDNode::getOpcode(), I, N, and reverseCCMask().

Referenced by getCmp().

◆ 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

◆ buildVector()

static SDValue buildVector ( SelectionDAG DAG,
const SDLoc DL,
EVT  VT,
SmallVectorImpl< SDValue > &  Elems 
)
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 3805 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 6235 of file SystemZISelLowering.cpp.

References llvm::ARM_AM::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::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::SystemZ::PFD_WRITE, Reg, llvm::MachineInstr::registerDefIsDead(), second, llvm::MachineInstr::setDesc(), llvm::MachineOperand::setImm(), 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 2321 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 2434 of file SystemZISelLowering.cpp.

◆ forceReg()

static unsigned 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

◆ getDemandedSrcElements()

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

Definition at line 5850 of file SystemZISelLowering.cpp.

References assert(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getValueType(), llvm::EVT::getVectorNumElements(), llvm::APInt::insertBits(), llvm::ISD::INTRINSIC_WO_CHAIN, llvm::EVT::isVector(), llvm::SystemZISD::JOIN_DWORDS, llvm_unreachable, llvm::APInt::lshr(), llvm::APInt::lshrInPlace(), llvm::BitmaskEnumDetail::Mask(), llvm::Intrinsic::s390_vpdi, llvm::Intrinsic::s390_vperm, llvm::Intrinsic::s390_vpklsf, llvm::Intrinsic::s390_vpklsfs, llvm::Intrinsic::s390_vpklsg, llvm::Intrinsic::s390_vpklsgs, llvm::Intrinsic::s390_vpklsh, llvm::Intrinsic::s390_vpklshs, llvm::Intrinsic::s390_vpksf, llvm::Intrinsic::s390_vpksfs, llvm::Intrinsic::s390_vpksg, llvm::Intrinsic::s390_vpksgs, llvm::Intrinsic::s390_vpksh, llvm::Intrinsic::s390_vpkshs, llvm::Intrinsic::s390_vsldb, llvm::Intrinsic::s390_vuphb, llvm::Intrinsic::s390_vuphf, llvm::Intrinsic::s390_vuphh, llvm::Intrinsic::s390_vuplb, llvm::Intrinsic::s390_vuplf, llvm::Intrinsic::s390_vuplhb, llvm::Intrinsic::s390_vuplhf, llvm::Intrinsic::s390_vuplhh, llvm::Intrinsic::s390_vuplhw, llvm::Intrinsic::s390_vupllb, llvm::Intrinsic::s390_vupllf, llvm::Intrinsic::s390_vupllh, llvm::SystemZISD::SELECT_CCMASK, llvm::APInt::setBit(), llvm::APInt::trunc(), and llvm::MVT::v16i8.

Referenced by computeKnownBitsBinOp(), llvm::SystemZTargetLowering::computeKnownBitsForTargetNode(), computeNumSignBitsBinOp(), and llvm::SystemZTargetLowering::ComputeNumSignBitsForTargetNode().

◆ 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

◆ getLoadStoreAddrMode()

static AddressingMode getLoadStoreAddrMode ( bool  HasVector,
Type Ty 
)
static

Definition at line 621 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

◆ isIntrinsicWithCC()

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

Definition at line 1536 of file SystemZISelLowering.cpp.

References llvm::SystemZ::CCMASK_0, llvm::SystemZ::CCMASK_3, llvm::SystemZ::CCMASK_ANY, llvm::SystemZ::CCMASK_TDC, llvm::SystemZ::CCMASK_VCMP, llvm::SDValue::getOperand(), llvm::SystemZISD::PACKLS_CC, llvm::SystemZISD::PACKS_CC, llvm::Intrinsic::s390_tdc, llvm::Intrinsic::s390_vceqbs, llvm::Intrinsic::s390_vceqfs, llvm::Intrinsic::s390_vceqgs, llvm::Intrinsic::s390_vceqhs, llvm::Intrinsic::s390_vchbs, llvm::Intrinsic::s390_vchfs, llvm::Intrinsic::s390_vchgs, llvm::Intrinsic::s390_vchhs, llvm::Intrinsic::s390_vchlbs, llvm::Intrinsic::s390_vchlfs, llvm::Intrinsic::s390_vchlgs, llvm::Intrinsic::s390_vchlhs, llvm::Intrinsic::s390_vfaebs, llvm::Intrinsic::s390_vfaefs, llvm::Intrinsic::s390_vfaehs, llvm::Intrinsic::s390_vfaezbs, llvm::Intrinsic::s390_vfaezfs, llvm::Intrinsic::s390_vfaezhs, llvm::Intrinsic::s390_vfcedbs, llvm::Intrinsic::s390_vfcesbs, llvm::Intrinsic::s390_vfchdbs, llvm::Intrinsic::s390_vfchedbs, llvm::Intrinsic::s390_vfchesbs, llvm::Intrinsic::s390_vfchsbs, llvm::Intrinsic::s390_vfeebs, llvm::Intrinsic::s390_vfeefs, llvm::Intrinsic::s390_vfeehs, llvm::Intrinsic::s390_vfeezbs, llvm::Intrinsic::s390_vfeezfs, llvm::Intrinsic::s390_vfeezhs, llvm::Intrinsic::s390_vfenebs, llvm::Intrinsic::s390_vfenefs, llvm::Intrinsic::s390_vfenehs, llvm::Intrinsic::s390_vfenezbs, llvm::Intrinsic::s390_vfenezfs, llvm::Intrinsic::s390_vfenezhs, llvm::Intrinsic::s390_vftcidb, llvm::Intrinsic::s390_vftcisb, llvm::Intrinsic::s390_vistrbs, llvm::Intrinsic::s390_vistrfs, llvm::Intrinsic::s390_vistrhs, llvm::Intrinsic::s390_vpklsfs, llvm::Intrinsic::s390_vpklsgs, llvm::Intrinsic::s390_vpklshs, llvm::Intrinsic::s390_vpksfs, llvm::Intrinsic::s390_vpksgs, llvm::Intrinsic::s390_vpkshs, llvm::Intrinsic::s390_vstrcbs, llvm::Intrinsic::s390_vstrcfs, llvm::Intrinsic::s390_vstrchs, llvm::Intrinsic::s390_vstrczbs, llvm::Intrinsic::s390_vstrczfs, llvm::Intrinsic::s390_vstrczhs, llvm::Intrinsic::s390_vtm, llvm::SystemZISD::TDC, llvm::SystemZISD::VFAE_CC, llvm::SystemZISD::VFAEZ_CC, llvm::SystemZISD::VFCMPES, llvm::SystemZISD::VFCMPHES, llvm::SystemZISD::VFCMPHS, llvm::SystemZISD::VFEE_CC, llvm::SystemZISD::VFEEZ_CC, llvm::SystemZISD::VFENE_CC, llvm::SystemZISD::VFENEZ_CC, llvm::SystemZISD::VFTCI, llvm::SystemZISD::VICMPES, llvm::SystemZISD::VICMPHLS, llvm::SystemZISD::VICMPHS, llvm::SystemZISD::VISTR_CC, llvm::SystemZISD::VSTRC_CC, llvm::SystemZISD::VSTRCZ_CC, and llvm::SystemZISD::VTM.

Referenced by llvm::SystemZTargetLowering::computeKnownBitsForTargetNode(), getCCResult(), and getCmp().

◆ 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 6214 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 3952 of file SystemZISelLowering.cpp.

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

Referenced by getGeneralPermuteNode().

◆ isSimpleShift()

static bool isSimpleShift ( SDValue  N,
unsigned ShiftVal 
)
static

◆ 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 3865 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 3887 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 3828 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 3852 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

◆ tryBuildVectorByteMask()

static bool tryBuildVectorByteMask ( BuildVectorSDNode BVN,
uint64_t &  Mask 
)
static

◆ tryBuildVectorReplicate()

static SDValue tryBuildVectorReplicate ( SelectionDAG DAG,
const SystemZInstrInfo TII,
const SDLoc DL,
EVT  VT,
uint64_t  Value,
unsigned  BitsPerElement 
)
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 1031 of file SystemZISelLowering.cpp.

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

Variable Documentation

◆ PermuteForms

const Permute PermuteForms[]
static

Definition at line 3756 of file SystemZISelLowering.cpp.