LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Macros | Enumerations | Functions
X86ISelLowering.cpp File Reference
#include "X86ISelLowering.h"
#include "Utils/X86ShuffleDecode.h"
#include "X86.h"
#include "X86CallingConv.h"
#include "X86InstrBuilder.h"
#include "X86TargetMachine.h"
#include "X86TargetObjectFile.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/ADT/VariadicFunction.h"
#include "llvm/CodeGen/IntrinsicLowering.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/CodeGen/MachineFunction.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineJumpTableInfo.h"
#include "llvm/CodeGen/MachineModuleInfo.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/IR/CallingConv.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/DerivedTypes.h"
#include "llvm/IR/Function.h"
#include "llvm/IR/GlobalAlias.h"
#include "llvm/IR/GlobalVariable.h"
#include "llvm/IR/Instructions.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/IR/LLVMContext.h"
#include "llvm/MC/MCAsmInfo.h"
#include "llvm/MC/MCContext.h"
#include "llvm/MC/MCExpr.h"
#include "llvm/MC/MCSymbol.h"
#include "llvm/Support/CallSite.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Target/TargetOptions.h"
#include <bitset>
#include <cctype>
#include "X86GenCallingConv.inc"
Include dependency graph for X86ISelLowering.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "x86-isel"
 

Enumerations

enum  StructReturnType { NotStructReturn, RegStructReturn, StackStructReturn }
 

Functions

 STATISTIC (NumTailCalls,"Number of tail calls")
 
static SDValue getMOVL (SelectionDAG &DAG, SDLoc dl, EVT VT, SDValue V1, SDValue V2)
 
static SDValue ExtractSubVector (SDValue Vec, unsigned IdxVal, SelectionDAG &DAG, SDLoc dl, unsigned vectorWidth)
 
static SDValue Extract128BitVector (SDValue Vec, unsigned IdxVal, SelectionDAG &DAG, SDLoc dl)
 
static SDValue Extract256BitVector (SDValue Vec, unsigned IdxVal, SelectionDAG &DAG, SDLoc dl)
 Generate a DAG to grab 256-bits from a 512-bit vector. More...
 
static SDValue InsertSubVector (SDValue Result, SDValue Vec, unsigned IdxVal, SelectionDAG &DAG, SDLoc dl, unsigned vectorWidth)
 
static SDValue Insert128BitVector (SDValue Result, SDValue Vec, unsigned IdxVal, SelectionDAG &DAG, SDLoc dl)
 
static SDValue Insert256BitVector (SDValue Result, SDValue Vec, unsigned IdxVal, SelectionDAG &DAG, SDLoc dl)
 
static SDValue Concat128BitVectors (SDValue V1, SDValue V2, EVT VT, unsigned NumElems, SelectionDAG &DAG, SDLoc dl)
 
static SDValue Concat256BitVectors (SDValue V1, SDValue V2, EVT VT, unsigned NumElems, SelectionDAG &DAG, SDLoc dl)
 
static TargetLoweringObjectFilecreateTLOF (X86TargetMachine &TM)
 
static void getMaxByValAlign (Type *Ty, unsigned &MaxAlign)
 
static StructReturnType callIsStructReturn (const SmallVectorImpl< ISD::OutputArg > &Outs)
 
static StructReturnType argsAreStructReturn (const SmallVectorImpl< ISD::InputArg > &Ins)
 
static SDValue CreateCopyOfByValArgument (SDValue Src, SDValue Dst, SDValue Chain, ISD::ArgFlagsTy Flags, SelectionDAG &DAG, SDLoc dl)
 
static bool IsTailCallConvention (CallingConv::ID CC)
 
static bool IsCCallConvention (CallingConv::ID CC)
 Return true if the calling convention is a C calling convention. More...
 
static bool FuncIsMadeTailCallSafe (CallingConv::ID CC, bool GuaranteedTailCallOpt)
 
static SDValue EmitTailCallStoreRetAddr (SelectionDAG &DAG, MachineFunction &MF, SDValue Chain, SDValue RetAddrFrIdx, EVT PtrVT, unsigned SlotSize, int FPDiff, SDLoc dl)
 
static bool MatchingStackOffset (SDValue Arg, unsigned Offset, ISD::ArgFlagsTy Flags, MachineFrameInfo *MFI, const MachineRegisterInfo *MRI, const X86InstrInfo *TII)
 
static bool MayFoldLoad (SDValue Op)
 
static bool MayFoldIntoStore (SDValue Op)
 
static bool isTargetShuffle (unsigned Opcode)
 
static SDValue getTargetShuffleNode (unsigned Opc, SDLoc dl, EVT VT, SDValue V1, SelectionDAG &DAG)
 
static SDValue getTargetShuffleNode (unsigned Opc, SDLoc dl, EVT VT, SDValue V1, unsigned TargetMask, SelectionDAG &DAG)
 
static SDValue getTargetShuffleNode (unsigned Opc, SDLoc dl, EVT VT, SDValue V1, SDValue V2, unsigned TargetMask, SelectionDAG &DAG)
 
static SDValue getTargetShuffleNode (unsigned Opc, SDLoc dl, EVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 
static unsigned TranslateX86CC (ISD::CondCode SetCCOpcode, bool isFP, SDValue &LHS, SDValue &RHS, SelectionDAG &DAG)
 
static bool hasFPCMov (unsigned X86CC)
 
static bool isUndefOrInRange (int Val, int Low, int Hi)
 
static bool isUndefOrEqual (int Val, int CmpVal)
 
static bool isSequentialOrUndefInRange (ArrayRef< int > Mask, unsigned Pos, unsigned Size, int Low)
 
static bool isPSHUFDMask (ArrayRef< int > Mask, MVT VT)
 
static bool isPSHUFHWMask (ArrayRef< int > Mask, MVT VT, bool HasInt256)
 
static bool isPSHUFLWMask (ArrayRef< int > Mask, MVT VT, bool HasInt256)
 
static bool isPALIGNRMask (ArrayRef< int > Mask, MVT VT, const X86Subtarget *Subtarget)
 
static void CommuteVectorShuffleMask (SmallVectorImpl< int > &Mask, unsigned NumElems)
 
static bool isSHUFPMask (ArrayRef< int > Mask, MVT VT, bool Commuted=false)
 
static bool isMOVHLPSMask (ArrayRef< int > Mask, MVT VT)
 
static bool isMOVHLPS_v_undef_Mask (ArrayRef< int > Mask, MVT VT)
 
static bool isMOVLPMask (ArrayRef< int > Mask, MVT VT)
 
static bool isMOVLHPSMask (ArrayRef< int > Mask, MVT VT)
 
static SDValue Compact8x32ShuffleNode (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG)
 
static bool isUNPCKLMask (ArrayRef< int > Mask, MVT VT, bool HasInt256, bool V2IsSplat=false)
 
static bool isUNPCKHMask (ArrayRef< int > Mask, MVT VT, bool HasInt256, bool V2IsSplat=false)
 
static bool isUNPCKL_v_undef_Mask (ArrayRef< int > Mask, MVT VT, bool HasInt256)
 
static bool isUNPCKH_v_undef_Mask (ArrayRef< int > Mask, MVT VT, bool HasInt256)
 
static bool isMOVLMask (ArrayRef< int > Mask, EVT VT)
 
static bool isVPERM2X128Mask (ArrayRef< int > Mask, MVT VT, bool HasFp256)
 
static unsigned getShuffleVPERM2X128Immediate (ShuffleVectorSDNode *SVOp)
 
static bool isPermImmMask (ArrayRef< int > Mask, MVT VT, unsigned &Imm8)
 
static bool isVPERMILPMask (ArrayRef< int > Mask, MVT VT)
 
static bool isCommutedMOVLMask (ArrayRef< int > Mask, MVT VT, bool V2IsSplat=false, bool V2IsUndef=false)
 
static bool isMOVSHDUPMask (ArrayRef< int > Mask, MVT VT, const X86Subtarget *Subtarget)
 
static bool isMOVSLDUPMask (ArrayRef< int > Mask, MVT VT, const X86Subtarget *Subtarget)
 
static bool isMOVDDUPYMask (ArrayRef< int > Mask, MVT VT, bool HasFp256)
 
static bool isMOVDDUPMask (ArrayRef< int > Mask, MVT VT)
 
static bool isVEXTRACTIndex (SDNode *N, unsigned vecWidth)
 
static bool isVINSERTIndex (SDNode *N, unsigned vecWidth)
 
static unsigned getShuffleSHUFImmediate (ShuffleVectorSDNode *N)
 
static unsigned getShufflePSHUFHWImmediate (ShuffleVectorSDNode *N)
 
static unsigned getShufflePSHUFLWImmediate (ShuffleVectorSDNode *N)
 
static unsigned getShufflePALIGNRImmediate (ShuffleVectorSDNode *SVOp)
 
static unsigned getExtractVEXTRACTImmediate (SDNode *N, unsigned vecWidth)
 
static unsigned getInsertVINSERTImmediate (SDNode *N, unsigned vecWidth)
 
static SDValue CommuteVectorShuffle (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG)
 
static bool ShouldXformToMOVHLPS (ArrayRef< int > Mask, MVT VT)
 
static bool isScalarLoadToVector (SDNode *N, LoadSDNode **LD=NULL)
 
static bool WillBeConstantPoolLoad (SDNode *N)
 
static bool ShouldXformToMOVLP (SDNode *V1, SDNode *V2, ArrayRef< int > Mask, MVT VT)
 
static bool isSplatVector (SDNode *N)
 
static bool isZeroShuffle (ShuffleVectorSDNode *N)
 
static SDValue getZeroVector (EVT VT, const X86Subtarget *Subtarget, SelectionDAG &DAG, SDLoc dl)
 
static SDValue getOnesVector (MVT VT, bool HasInt256, SelectionDAG &DAG, SDLoc dl)
 
static void NormalizeMask (SmallVectorImpl< int > &Mask, unsigned NumElems)
 
static SDValue getUnpackl (SelectionDAG &DAG, SDLoc dl, MVT VT, SDValue V1, SDValue V2)
 getUnpackl - Returns a vector_shuffle node for an unpackl operation. More...
 
static SDValue getUnpackh (SelectionDAG &DAG, SDLoc dl, MVT VT, SDValue V1, SDValue V2)
 getUnpackh - Returns a vector_shuffle node for an unpackh operation. More...
 
static SDValue PromoteSplati8i16 (SDValue V, SelectionDAG &DAG, int &EltNo)
 
static SDValue getLegalSplat (SelectionDAG &DAG, SDValue V, int EltNo)
 getLegalSplat - Generate a legal splat with supported x86 shuffles More...
 
static SDValue PromoteSplat (ShuffleVectorSDNode *SV, SelectionDAG &DAG)
 PromoteSplat - Splat is promoted to target supported vector shuffles. More...
 
static SDValue getShuffleVectorZeroOrUndef (SDValue V2, unsigned Idx, bool IsZero, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static bool getTargetShuffleMask (SDNode *N, MVT VT, SmallVectorImpl< int > &Mask, bool &IsUnary)
 
static SDValue getShuffleScalarElt (SDNode *N, unsigned Index, SelectionDAG &DAG, unsigned Depth)
 
static unsigned getNumOfConsecutiveZeros (ShuffleVectorSDNode *SVOp, unsigned NumElems, bool ZerosFromLeft, SelectionDAG &DAG, unsigned PreferredNum=-1U)
 
static bool isShuffleMaskConsecutive (ShuffleVectorSDNode *SVOp, unsigned MaskI, unsigned MaskE, unsigned OpIdx, unsigned NumElems, unsigned &OpNum)
 
static bool isVectorShiftRight (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG, bool &isLeft, SDValue &ShVal, unsigned &ShAmt)
 
static bool isVectorShiftLeft (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG, bool &isLeft, SDValue &ShVal, unsigned &ShAmt)
 
static bool isVectorShift (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG, bool &isLeft, SDValue &ShVal, unsigned &ShAmt)
 
static SDValue LowerBuildVectorv16i8 (SDValue Op, unsigned NonZeros, unsigned NumNonZero, unsigned NumZero, SelectionDAG &DAG, const X86Subtarget *Subtarget, const TargetLowering &TLI)
 
static SDValue LowerBuildVectorv8i16 (SDValue Op, unsigned NonZeros, unsigned NumNonZero, unsigned NumZero, SelectionDAG &DAG, const X86Subtarget *Subtarget, const TargetLowering &TLI)
 
static SDValue getVShift (bool isLeft, EVT VT, SDValue SrcOp, unsigned NumBits, SelectionDAG &DAG, const TargetLowering &TLI, SDLoc dl)
 
static SDValue LowerAsSplatVectorLoad (SDValue SrcOp, MVT VT, SDLoc dl, SelectionDAG &DAG)
 
static SDValue EltsFromConsecutiveLoads (EVT VT, SmallVectorImpl< SDValue > &Elts, SDLoc &DL, SelectionDAG &DAG)
 
static SDValue LowerVectorBroadcast (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue buildFromShuffleMostly (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerAVXCONCAT_VECTORS (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerCONCAT_VECTORS (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerVECTOR_SHUFFLEtoBlend (ShuffleVectorSDNode *SVOp, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerVECTOR_SHUFFLEv8i16 (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerVECTOR_SHUFFLEv16i8 (ShuffleVectorSDNode *SVOp, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerVECTOR_SHUFFLEv32i8 (ShuffleVectorSDNode *SVOp, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue RewriteAsNarrowerShuffle (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG)
 
static SDValue getVZextMovL (MVT VT, MVT OpVT, SDValue SrcOp, SelectionDAG &DAG, const X86Subtarget *Subtarget, SDLoc dl)
 
static SDValue LowerVECTOR_SHUFFLE_256 (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG)
 
static SDValue LowerVECTOR_SHUFFLE_128v4 (ShuffleVectorSDNode *SVOp, SelectionDAG &DAG)
 
static bool MayFoldVectorLoad (SDValue V)
 
static SDValue getMOVDDup (SDValue &Op, SDLoc &dl, SDValue V1, SelectionDAG &DAG)
 
static SDValue getMOVLowToHigh (SDValue &Op, SDLoc &dl, SelectionDAG &DAG, bool HasSSE2)
 
static SDValue getMOVHighToLow (SDValue &Op, SDLoc &dl, SelectionDAG &DAG)
 
static SDValue getMOVLP (SDValue &Op, SDLoc &dl, SelectionDAG &DAG, bool HasSSE2)
 
static SDValue LowerVectorIntExtend (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue NormalizeVectorShuffle (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerEXTRACT_VECTOR_ELT_SSE4 (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerINSERT_VECTOR_ELT_SSE4 (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerSCALAR_TO_VECTOR (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerEXTRACT_SUBVECTOR (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerINSERT_SUBVECTOR (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue GetTLSADDR (SelectionDAG &DAG, SDValue Chain, GlobalAddressSDNode *GA, SDValue *InFlag, const EVT PtrVT, unsigned ReturnReg, unsigned char OperandFlags, bool LocalDynamic=false)
 
static SDValue LowerToTLSGeneralDynamicModel32 (GlobalAddressSDNode *GA, SelectionDAG &DAG, const EVT PtrVT)
 
static SDValue LowerToTLSGeneralDynamicModel64 (GlobalAddressSDNode *GA, SelectionDAG &DAG, const EVT PtrVT)
 
static SDValue LowerToTLSLocalDynamicModel (GlobalAddressSDNode *GA, SelectionDAG &DAG, const EVT PtrVT, bool is64Bit)
 
static SDValue LowerToTLSExecModel (GlobalAddressSDNode *GA, SelectionDAG &DAG, const EVT PtrVT, TLSModel::Model model, bool is64Bit, bool isPIC)
 
static SDValue LowerAVXExtend (SDValue Op, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 
static SDValue LowerZERO_EXTEND_AVX512 (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerANY_EXTEND (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerZERO_EXTEND (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerFP_EXTEND (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerFGETSIGN (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerVectorAllZeroTest (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static bool isAllOnes (SDValue V)
 
static int translateX86FSETCC (ISD::CondCode SetCCOpcode, SDValue &Op0, SDValue &Op1)
 
  • Turns an ISD::CondCode into a value suitable for SSE floating point mask CMPs.
More...
 
static SDValue Lower256IntVSETCC (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerIntVSETCC_AVX512 (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerVSETCC (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static bool isX86LogicalCmp (SDValue Op)
 
static bool isZero (SDValue V)
 
static bool isTruncWithZeroHighBitsInput (SDValue V, SelectionDAG &DAG)
 
static SDValue LowerSIGN_EXTEND_AVX512 (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerSIGN_EXTEND (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static bool isAndOrOfSetCCs (SDValue Op, unsigned &Opc)
 
static bool isXor1OfSetCC (SDValue Op)
 
static SDValue LowerVACOPY (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue getTargetVShiftByConstNode (unsigned Opc, SDLoc dl, EVT VT, SDValue SrcOp, uint64_t ShiftAmt, SelectionDAG &DAG)
 
static SDValue getTargetVShiftNode (unsigned Opc, SDLoc dl, EVT VT, SDValue SrcOp, SDValue ShAmt, SelectionDAG &DAG)
 
static SDValue LowerINTRINSIC_WO_CHAIN (SDValue Op, SelectionDAG &DAG)
 
static SDValue getGatherNode (unsigned Opc, SDValue Op, SelectionDAG &DAG, SDValue Base, SDValue Index, SDValue ScaleOp, SDValue Chain, const X86Subtarget *Subtarget)
 
static SDValue getMGatherNode (unsigned Opc, SDValue Op, SelectionDAG &DAG, SDValue Src, SDValue Mask, SDValue Base, SDValue Index, SDValue ScaleOp, SDValue Chain, const X86Subtarget *Subtarget)
 
static SDValue getScatterNode (unsigned Opc, SDValue Op, SelectionDAG &DAG, SDValue Src, SDValue Base, SDValue Index, SDValue ScaleOp, SDValue Chain)
 
static SDValue getMScatterNode (unsigned Opc, SDValue Op, SelectionDAG &DAG, SDValue Src, SDValue Mask, SDValue Base, SDValue Index, SDValue ScaleOp, SDValue Chain)
 
static SDValue LowerINTRINSIC_W_CHAIN (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerADJUST_TRAMPOLINE (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerCTLZ (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerCTLZ_ZERO_UNDEF (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerCTTZ (SDValue Op, SelectionDAG &DAG)
 
static SDValue Lower256IntArith (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerADD (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerSUB (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerMUL (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerSDIV (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerScalarImmediateShift (SDValue Op, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 
static SDValue LowerScalarVariableShift (SDValue Op, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 
static SDValue LowerShift (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerXALUO (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerATOMIC_FENCE (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerCMP_SWAP (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerREADCYCLECOUNTER (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerBITCAST (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static SDValue LowerLOAD_SUB (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerATOMIC_STORE (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerADDC_ADDE_SUBC_SUBE (SDValue Op, SelectionDAG &DAG)
 
static SDValue LowerFSINCOS (SDValue Op, const X86Subtarget *Subtarget, SelectionDAG &DAG)
 
static void ReplaceATOMIC_LOAD (SDNode *Node, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG)
 
static void ReplaceATOMIC_BINARY_64 (SDNode *Node, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG, unsigned NewOp)
 
static MachineBasicBlockEmitXBegin (MachineInstr *MI, MachineBasicBlock *MBB, const TargetInstrInfo *TII)
 Utility function to emit xbegin specifying the start of an RTM region. More...
 
static unsigned getCmpXChgOpcode (EVT VT)
 
static unsigned getLoadOpcode (EVT VT)
 
static unsigned getNonAtomicOpcode (unsigned Opc)
 
static unsigned getNonAtomicOpcodeWithExtraOpc (unsigned Opc, unsigned &ExtraOpc)
 
static unsigned getNonAtomic6432Opcode (unsigned Opc, unsigned &HiOpc)
 
static unsigned getNonAtomic6432OpcodeWithExtraOpc (unsigned Opc, unsigned &HiOpc, unsigned &ExtraOpc)
 
static unsigned getPseudoCMOVOpc (EVT VT)
 
static MachineBasicBlockEmitPCMPSTRM (MachineInstr *MI, MachineBasicBlock *BB, const TargetInstrInfo *TII)
 
static MachineBasicBlockEmitPCMPSTRI (MachineInstr *MI, MachineBasicBlock *BB, const TargetInstrInfo *TII)
 
static MachineBasicBlockEmitMonitor (MachineInstr *MI, MachineBasicBlock *BB, const TargetInstrInfo *TII, const X86Subtarget *Subtarget)
 
static bool checkAndUpdateEFLAGSKill (MachineBasicBlock::iterator SelectItr, MachineBasicBlock *BB, const TargetRegisterInfo *TRI)
 
static bool isShuffleHigh128VectorInsertLow (ShuffleVectorSDNode *SVOp)
 
static bool isShuffleLow128VectorInsertHigh (ShuffleVectorSDNode *SVOp)
 
static SDValue PerformShuffleCombine256 (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 PerformShuffleCombine256 - Performs shuffle combines for 256-bit vectors. More...
 
static SDValue PerformShuffleCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 PerformShuffleCombine - Performs several different shuffle combines. More...
 
static SDValue PerformTruncateCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue XFormVExtractWithShuffleIntoLoad (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI)
 
static SDValue ExtractBitFromMaskVector (SDNode *N, SelectionDAG &DAG)
 
static SDValue PerformEXTRACT_VECTOR_ELTCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI)
 
static std::pair< unsigned, boolmatchIntegerMINMAX (SDValue Cond, EVT VT, SDValue LHS, SDValue RHS, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 Matches a VSELECT onto min/max or return 0 if the node doesn't match. More...
 
static SDValue PerformSELECTCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue checkBoolTestSetCCCombine (SDValue Cmp, X86::CondCode &CC)
 
static SDValue PerformCMOVCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 Optimize X86ISD::CMOV [LHS, RHS, CONDCODE (e.g. X86::COND_NE), CONDVAL]. More...
 
static SDValue PerformMulCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI)
 
static SDValue PerformSHLCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue performShiftToAllZeros (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 Returns a vector of 0s if the node in input is a vector logical shift by a constant amount which is known to be bigger than or equal to the vector element size in bits. More...
 
static SDValue PerformShiftCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 PerformShiftCombine - Combine shifts. More...
 
static SDValue CMPEQCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static bool CanFoldXORWithAllOnes (const SDNode *N)
 
static SDValue WidenMaskArithmetic (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue PerformAndCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue PerformOrCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue performIntegerAbsCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue PerformXorCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue PerformLOADCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 PerformLOADCombine - Do target-specific dag combines on LOAD nodes. More...
 
static SDValue PerformSTORECombine (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 PerformSTORECombine - Do target-specific dag combines on STORE nodes. More...
 
static bool isHorizontalBinOp (SDValue &LHS, SDValue &RHS, bool IsCommutative)
 
static SDValue PerformFADDCombine (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 PerformFADDCombine - Do target-specific dag combines on floating point adds. More...
 
static SDValue PerformFSUBCombine (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 PerformFSUBCombine - Do target-specific dag combines on floating point subs. More...
 
static SDValue PerformFORCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue PerformFMinFMaxCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue PerformFANDCombine (SDNode *N, SelectionDAG &DAG)
 PerformFANDCombine - Do target-specific dag combines on X86ISD::FAND nodes. More...
 
static SDValue PerformFANDNCombine (SDNode *N, SelectionDAG &DAG)
 PerformFANDNCombine - Do target-specific dag combines on X86ISD::FANDN nodes. More...
 
static SDValue PerformBTCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI)
 
static SDValue PerformVZEXT_MOVLCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue PerformSIGN_EXTEND_INREGCombine (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 
static SDValue PerformSExtCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue PerformFMACombine (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 
static SDValue PerformZExtCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue PerformISDSETCCCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue MaterializeSETB (SDLoc DL, SDValue EFLAGS, SelectionDAG &DAG)
 
static SDValue PerformSETCCCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue PerformBrCondCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 
static SDValue PerformSINT_TO_FPCombine (SDNode *N, SelectionDAG &DAG, const X86TargetLowering *XTLI)
 
static SDValue PerformADCCombine (SDNode *N, SelectionDAG &DAG, X86TargetLowering::DAGCombinerInfo &DCI)
 
static SDValue OptimizeConditionalInDecrement (SDNode *N, SelectionDAG &DAG)
 
static SDValue PerformAddCombine (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 PerformADDCombine - Do target-specific dag combines on integer adds. More...
 
static SDValue PerformSubCombine (SDNode *N, SelectionDAG &DAG, const X86Subtarget *Subtarget)
 
static SDValue performVZEXTCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const X86Subtarget *Subtarget)
 performVZEXTCombine - Performs build vector combines More...
 
static bool clobbersFlagRegisters (const SmallVector< StringRef, 4 > &AsmPieces)
 

Macro Definition Documentation

#define DEBUG_TYPE   "x86-isel"

Definition at line 15 of file X86ISelLowering.cpp.

Enumeration Type Documentation

CallIsStructReturn - Determines whether a call uses struct return semantics.

Enumerator
NotStructReturn 
RegStructReturn 
StackStructReturn 

Definition at line 2037 of file X86ISelLowering.cpp.

Function Documentation

static StructReturnType argsAreStructReturn ( const SmallVectorImpl< ISD::InputArg > &  Ins)
static

ArgsAreStructReturn - Determines whether a function uses struct return semantics.

Definition at line 2058 of file X86ISelLowering.cpp.

References llvm::SmallVectorBase::empty(), llvm::ISD::ArgFlagsTy::isInReg(), llvm::ISD::ArgFlagsTy::isSRet(), NotStructReturn, RegStructReturn, and StackStructReturn.

static SDValue buildFromShuffleMostly ( SDValue  Op,
SelectionDAG DAG 
)
static
static StructReturnType callIsStructReturn ( const SmallVectorImpl< ISD::OutputArg > &  Outs)
static
static bool CanFoldXORWithAllOnes ( const SDNode N)
static
static bool checkAndUpdateEFLAGSKill ( MachineBasicBlock::iterator  SelectItr,
MachineBasicBlock BB,
const TargetRegisterInfo TRI 
)
static
static SDValue checkBoolTestSetCCCombine ( SDValue  Cmp,
X86::CondCode CC 
)
static
static bool clobbersFlagRegisters ( const SmallVector< StringRef, 4 > &  AsmPieces)
static
static SDValue CMPEQCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue CommuteVectorShuffle ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG 
)
static
static void CommuteVectorShuffleMask ( SmallVectorImpl< int > &  Mask,
unsigned  NumElems 
)
static

CommuteVectorShuffleMask - Change values in a shuffle permute mask assuming the two vector operands have swapped position.

Definition at line 3703 of file X86ISelLowering.cpp.

Referenced by isHorizontalBinOp(), LowerVECTOR_SHUFFLE_128v4(), and LowerVECTOR_SHUFFLEv32i8().

static SDValue Compact8x32ShuffleNode ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG 
)
static
static SDValue Concat128BitVectors ( SDValue  V1,
SDValue  V2,
EVT  VT,
unsigned  NumElems,
SelectionDAG DAG,
SDLoc  dl 
)
static

Concat two 128-bit vectors into a 256 bit vector using VINSERTF128 instructions. This is used because creating CONCAT_VECTOR nodes of BUILD_VECTORS returns a larger BUILD_VECTOR while we're trying to lower large BUILD_VECTORS.

Definition at line 165 of file X86ISelLowering.cpp.

References llvm::SelectionDAG::getUNDEF(), and Insert128BitVector().

Referenced by getOnesVector(), and LowerAVXCONCAT_VECTORS().

static SDValue Concat256BitVectors ( SDValue  V1,
SDValue  V2,
EVT  VT,
unsigned  NumElems,
SelectionDAG DAG,
SDLoc  dl 
)
static

Definition at line 172 of file X86ISelLowering.cpp.

References llvm::SelectionDAG::getUNDEF(), and Insert256BitVector().

Referenced by LowerAVXCONCAT_VECTORS().

static SDValue CreateCopyOfByValArgument ( SDValue  Src,
SDValue  Dst,
SDValue  Chain,
ISD::ArgFlagsTy  Flags,
SelectionDAG DAG,
SDLoc  dl 
)
static

CreateCopyOfByValArgument - Make a copy of an aggregate at address specified by "Src" to address "Dst" with size and alignment information specified by the specific parameter attribute. The copy will be passed as a byval function parameter.

Definition at line 2075 of file X86ISelLowering.cpp.

References llvm::ISD::ArgFlagsTy::getByValAlign(), llvm::ISD::ArgFlagsTy::getByValSize(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getMemcpy(), and llvm::MVT::i32.

static TargetLoweringObjectFile* createTLOF ( X86TargetMachine TM)
static
static SDValue EltsFromConsecutiveLoads ( EVT  VT,
SmallVectorImpl< SDValue > &  Elts,
SDLoc DL,
SelectionDAG DAG 
)
static

EltsFromConsecutiveLoads - Given the initializing elements 'Elts' of a vector of type 'VT', see if the elements can be replaced by a single large load which has the same value as a build_vector whose operands are 'elts'.

Example: <load i32 *a, load i32 *a+4, undef, undef> -> zextload a

FIXME: we'd also like to handle the case where the last elements are zero rather than undef via VZEXT_LOAD, but we do not detect that case today. There's even a handy isZeroNode for that purpose.

Definition at line 5397 of file X86ISelLowering.cpp.

References llvm::array_lengthof(), llvm::ISD::BITCAST, llvm::MemSDNode::getAlignment(), llvm::LoadSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMemIntrinsicNode(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::MemSDNode::getPointerInfo(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::EVT::getVectorElementType(), llvm::SelectionDAG::getVTList(), llvm::SDNode::hasAnyUseOfValue(), llvm::MVT::i64, llvm::SelectionDAG::InferPtrAlignment(), llvm::SelectionDAG::isConsecutiveLoad(), llvm::MemSDNode::isInvariant(), llvm::ISD::isNON_EXTLoad(), llvm::MemSDNode::isNonTemporal(), llvm::TargetLoweringBase::isTypeLegal(), llvm::MemSDNode::isVolatile(), llvm::A64DB::LD, llvm::MVT::Other, llvm::SelectionDAG::ReplaceAllUsesOfValueWith(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::ISD::TokenFactor, llvm::ISD::UNDEF, llvm::SelectionDAG::UpdateNodeOperands(), llvm::MVT::v2i64, and llvm::X86ISD::VZEXT_LOAD.

Referenced by PerformShuffleCombine().

static MachineBasicBlock* EmitMonitor ( MachineInstr MI,
MachineBasicBlock BB,
const TargetInstrInfo TII,
const X86Subtarget Subtarget 
)
static
static MachineBasicBlock* EmitPCMPSTRI ( MachineInstr MI,
MachineBasicBlock BB,
const TargetInstrInfo TII 
)
static
static MachineBasicBlock* EmitPCMPSTRM ( MachineInstr MI,
MachineBasicBlock BB,
const TargetInstrInfo TII 
)
static
static SDValue EmitTailCallStoreRetAddr ( SelectionDAG DAG,
MachineFunction MF,
SDValue  Chain,
SDValue  RetAddrFrIdx,
EVT  PtrVT,
unsigned  SlotSize,
int  FPDiff,
SDLoc  dl 
)
static

EmitTailCallStoreRetAddr - Emit a store of the return address if tail call optimization is performed and it is required (FPDiff!=0).

Definition at line 2479 of file X86ISelLowering.cpp.

References llvm::MachineFrameInfo::CreateFixedObject(), llvm::MachinePointerInfo::getFixedStack(), llvm::SelectionDAG::getFrameIndex(), llvm::MachineFunction::getFrameInfo(), and llvm::SelectionDAG::getStore().

static MachineBasicBlock* EmitXBegin ( MachineInstr MI,
MachineBasicBlock MBB,
const TargetInstrInfo TII 
)
static
static SDValue Extract128BitVector ( SDValue  Vec,
unsigned  IdxVal,
SelectionDAG DAG,
SDLoc  dl 
)
static

Generate a DAG to grab 128-bits from a vector > 128 bits. This sets things up to match to an AVX VEXTRACTF128 / VEXTRACTI128 or AVX-512 VEXTRACTF32x4 / VEXTRACTI32x4 instructions or a simple subregister reference. Idx is an index in the 128 bits we want. It need not be aligned to a 128-bit bounday. That makes lowering EXTRACT_VECTOR_ELT operations easier.

Definition at line 103 of file X86ISelLowering.cpp.

References ExtractSubVector(), llvm::SDValue::getValueType(), llvm::EVT::is256BitVector(), and llvm::EVT::is512BitVector().

Referenced by Lower256IntArith(), Lower256IntVSETCC(), LowerEXTRACT_SUBVECTOR(), LowerShift(), LowerVECTOR_SHUFFLE_256(), LowerVectorBroadcast(), PerformSELECTCombine(), PerformShuffleCombine256(), PerformSTORECombine(), and PromoteSplat().

static SDValue Extract256BitVector ( SDValue  Vec,
unsigned  IdxVal,
SelectionDAG DAG,
SDLoc  dl 
)
static

Generate a DAG to grab 256-bits from a 512-bit vector.

Definition at line 111 of file X86ISelLowering.cpp.

References ExtractSubVector(), llvm::SDValue::getValueType(), and llvm::EVT::is512BitVector().

Referenced by LowerEXTRACT_SUBVECTOR().

static SDValue ExtractBitFromMaskVector ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue ExtractSubVector ( SDValue  Vec,
unsigned  IdxVal,
SelectionDAG DAG,
SDLoc  dl,
unsigned  vectorWidth 
)
static
static bool FuncIsMadeTailCallSafe ( CallingConv::ID  CC,
bool  GuaranteedTailCallOpt 
)
static

FuncIsMadeTailCallSafe - Return true if the function is being made into a tailcall target by changing its ABI.

Definition at line 2112 of file X86ISelLowering.cpp.

References IsTailCallConvention().

static unsigned getCmpXChgOpcode ( EVT  VT)
static
static unsigned getExtractVEXTRACTImmediate ( SDNode N,
unsigned  vecWidth 
)
static
static SDValue getGatherNode ( unsigned  Opc,
SDValue  Op,
SelectionDAG DAG,
SDValue  Base,
SDValue  Index,
SDValue  ScaleOp,
SDValue  Chain,
const X86Subtarget Subtarget 
)
static
static unsigned getInsertVINSERTImmediate ( SDNode N,
unsigned  vecWidth 
)
static
static SDValue getLegalSplat ( SelectionDAG DAG,
SDValue  V,
int  EltNo 
)
static
static unsigned getLoadOpcode ( EVT  VT)
static
static void getMaxByValAlign ( Type Ty,
unsigned MaxAlign 
)
static

getMaxByValAlign - Helper for getByValTypeAlignment to determine the desired ByVal argument alignment.

Definition at line 1565 of file X86ISelLowering.cpp.

Referenced by llvm::X86TargetLowering::getByValTypeAlignment().

static SDValue getMGatherNode ( unsigned  Opc,
SDValue  Op,
SelectionDAG DAG,
SDValue  Src,
SDValue  Mask,
SDValue  Base,
SDValue  Index,
SDValue  ScaleOp,
SDValue  Chain,
const X86Subtarget Subtarget 
)
static
static SDValue getMOVDDup ( SDValue Op,
SDLoc dl,
SDValue  V1,
SelectionDAG DAG 
)
static
static SDValue getMOVHighToLow ( SDValue Op,
SDLoc dl,
SelectionDAG DAG 
)
static
static SDValue getMOVL ( SelectionDAG DAG,
SDLoc  dl,
EVT  VT,
SDValue  V1,
SDValue  V2 
)
static

getMOVLMask - Returns a vector_shuffle mask for an movs{s|d}, movd operation of specified width.

Definition at line 4793 of file X86ISelLowering.cpp.

References llvm::EVT::getVectorNumElements(), llvm::SelectionDAG::getVectorShuffle(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().

static SDValue getMOVLowToHigh ( SDValue Op,
SDLoc dl,
SelectionDAG DAG,
bool  HasSSE2 
)
static
static SDValue getMOVLP ( SDValue Op,
SDLoc dl,
SelectionDAG DAG,
bool  HasSSE2 
)
static
static SDValue getMScatterNode ( unsigned  Opc,
SDValue  Op,
SelectionDAG DAG,
SDValue  Src,
SDValue  Mask,
SDValue  Base,
SDValue  Index,
SDValue  ScaleOp,
SDValue  Chain 
)
static
static unsigned getNonAtomic6432Opcode ( unsigned  Opc,
unsigned HiOpc 
)
static

Definition at line 14198 of file X86ISelLowering.cpp.

References llvm_unreachable.

static unsigned getNonAtomic6432OpcodeWithExtraOpc ( unsigned  Opc,
unsigned HiOpc,
unsigned ExtraOpc 
)
static

Definition at line 14216 of file X86ISelLowering.cpp.

References llvm_unreachable.

static unsigned getNonAtomicOpcode ( unsigned  Opc)
static

Definition at line 14149 of file X86ISelLowering.cpp.

References llvm_unreachable.

static unsigned getNonAtomicOpcodeWithExtraOpc ( unsigned  Opc,
unsigned ExtraOpc 
)
static

Definition at line 14169 of file X86ISelLowering.cpp.

References llvm_unreachable.

static unsigned getNumOfConsecutiveZeros ( ShuffleVectorSDNode SVOp,
unsigned  NumElems,
bool  ZerosFromLeft,
SelectionDAG DAG,
unsigned  PreferredNum = -1U 
)
static

getNumOfConsecutiveZeros - Return the number of elements of a vector shuffle operation which come from a consecutively from a zero. The search can start in two different directions, from left or right. We count undefs as zeros until PreferredNum is reached.

Definition at line 5081 of file X86ISelLowering.cpp.

References llvm::SDValue::getNode(), llvm::SDValue::getOpcode(), getShuffleScalarElt(), llvm::X86::isZeroNode(), and llvm::ISD::UNDEF.

Referenced by isVectorShiftLeft(), and isVectorShiftRight().

static SDValue getOnesVector ( MVT  VT,
bool  HasInt256,
SelectionDAG DAG,
SDLoc  dl 
)
static

getOnesVector - Returns a vector of specified type with all bits set. Always build ones vectors as <4 x i32> or <8 x i32>. For 256-bit types with no AVX2 supprt, use two <4 x i32> inserted in a <8 x i32> appropriately. Then bitcast to their original type, ensuring they get CSE'd.

Definition at line 4758 of file X86ISelLowering.cpp.

References llvm::array_lengthof(), llvm::ISD::BITCAST, llvm::ISD::BUILD_VECTOR, Concat128BitVectors(), llvm::SelectionDAG::getNode(), llvm::SelectionDAG::getTargetConstant(), llvm::MVT::i32, llvm::MVT::is128BitVector(), llvm::MVT::is256BitVector(), llvm::MVT::isVector(), llvm_unreachable, llvm::MVT::v4i32, and llvm::MVT::v8i32.

static unsigned getPseudoCMOVOpc ( EVT  VT)
static
static SDValue getScatterNode ( unsigned  Opc,
SDValue  Op,
SelectionDAG DAG,
SDValue  Src,
SDValue  Base,
SDValue  Index,
SDValue  ScaleOp,
SDValue  Chain 
)
static
static unsigned getShufflePALIGNRImmediate ( ShuffleVectorSDNode SVOp)
static

getShufflePALIGNRImmediate - Return the appropriate immediate to shuffle the specified VECTOR_SHUFFLE mask with the PALIGNR instruction.

Definition at line 4473 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorElementType(), llvm::MVT::getVectorNumElements(), and llvm::MVT::is512BitVector().

static unsigned getShufflePSHUFHWImmediate ( ShuffleVectorSDNode N)
static

getShufflePSHUFHWImmediate - Return the appropriate immediate to shuffle the specified VECTOR_SHUFFLE mask with the PSHUFHW instruction.

Definition at line 4425 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getVectorNumElements(), llvm::MVT::v16i16, and llvm::MVT::v8i16.

Referenced by LowerVECTOR_SHUFFLEv8i16().

static unsigned getShufflePSHUFLWImmediate ( ShuffleVectorSDNode N)
static

getShufflePSHUFLWImmediate - Return the appropriate immediate to shuffle the specified VECTOR_SHUFFLE mask with the PSHUFLW instruction.

Definition at line 4449 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getVectorNumElements(), llvm::MVT::v16i16, and llvm::MVT::v8i16.

Referenced by LowerVECTOR_SHUFFLEv8i16().

static SDValue getShuffleScalarElt ( SDNode N,
unsigned  Index,
SelectionDAG DAG,
unsigned  Depth 
)
static
static unsigned getShuffleSHUFImmediate ( ShuffleVectorSDNode N)
static

getShuffleSHUFImmediate - Return the appropriate immediate to shuffle the specified VECTOR_SHUFFLE mask with PSHUF* and SHUFP* instructions. Handles 128-bit and 256-bit.

Definition at line 4395 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getSizeInBits(), and llvm::MVT::getVectorNumElements().

Referenced by getMOVLP().

static SDValue getShuffleVectorZeroOrUndef ( SDValue  V2,
unsigned  Idx,
bool  IsZero,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static

getShuffleVectorZeroOrUndef - Return a vector_shuffle of the specified vector of zero or undef vector. This produces a shuffle where the low element of V2 is swizzled into the zero/undef vector, landing at element Idx. This produces a shuffle mask like 4,1,2,3 (idx=0) or 0,1,2,4 (idx=3).

Definition at line 4917 of file X86ISelLowering.cpp.

References llvm::SDValue::getSimpleValueType(), llvm::SelectionDAG::getUNDEF(), llvm::MVT::getVectorNumElements(), llvm::SelectionDAG::getVectorShuffle(), getZeroVector(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().

Referenced by llvm::X86TargetLowering::BuildFILD().

static unsigned getShuffleVPERM2X128Immediate ( ShuffleVectorSDNode SVOp)
static

getShuffleVPERM2X128Immediate - Return the appropriate immediate to shuffle the specified VECTOR_MASK mask with VPERM2F128/VPERM2I128 instructions.

Definition at line 4134 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDNode::getSimpleValueType(), and llvm::MVT::getVectorNumElements().

static bool getTargetShuffleMask ( SDNode N,
MVT  VT,
SmallVectorImpl< int > &  Mask,
bool IsUnary 
)
static
static SDValue getTargetShuffleNode ( unsigned  Opc,
SDLoc  dl,
EVT  VT,
SDValue  V1,
SelectionDAG DAG 
)
static
static SDValue getTargetShuffleNode ( unsigned  Opc,
SDLoc  dl,
EVT  VT,
SDValue  V1,
unsigned  TargetMask,
SelectionDAG DAG 
)
static
static SDValue getTargetShuffleNode ( unsigned  Opc,
SDLoc  dl,
EVT  VT,
SDValue  V1,
SDValue  V2,
unsigned  TargetMask,
SelectionDAG DAG 
)
static
static SDValue getTargetShuffleNode ( unsigned  Opc,
SDLoc  dl,
EVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static
static SDValue getTargetVShiftByConstNode ( unsigned  Opc,
SDLoc  dl,
EVT  VT,
SDValue  SrcOp,
uint64_t  ShiftAmt,
SelectionDAG DAG 
)
static
static SDValue getTargetVShiftNode ( unsigned  Opc,
SDLoc  dl,
EVT  VT,
SDValue  SrcOp,
SDValue  ShAmt,
SelectionDAG DAG 
)
static
static SDValue GetTLSADDR ( SelectionDAG DAG,
SDValue  Chain,
GlobalAddressSDNode GA,
SDValue InFlag,
const EVT  PtrVT,
unsigned  ReturnReg,
unsigned char  OperandFlags,
bool  LocalDynamic = false 
)
static
static SDValue getUnpackh ( SelectionDAG DAG,
SDLoc  dl,
MVT  VT,
SDValue  V1,
SDValue  V2 
)
static

getUnpackh - Returns a vector_shuffle node for an unpackh operation.

Definition at line 4816 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::SelectionDAG::getVectorShuffle(), and llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back().

Referenced by LowerAVXExtend(), and PromoteSplati8i16().

static SDValue getUnpackl ( SelectionDAG DAG,
SDLoc  dl,
MVT  VT,
SDValue  V1,
SDValue  V2 
)
static
static SDValue getVShift ( bool  isLeft,
EVT  VT,
SDValue  SrcOp,
unsigned  NumBits,
SelectionDAG DAG,
const TargetLowering TLI,
SDLoc  dl 
)
static
static SDValue getVZextMovL ( MVT  VT,
MVT  OpVT,
SDValue  SrcOp,
SelectionDAG DAG,
const X86Subtarget Subtarget,
SDLoc  dl 
)
static
static SDValue getZeroVector ( EVT  VT,
const X86Subtarget Subtarget,
SelectionDAG DAG,
SDLoc  dl 
)
static
static bool hasFPCMov ( unsigned  X86CC)
static

hasFPCMov - is there a floating point cmov for the specific X86 condition code. Current x86 isa includes the following FP cmov instructions: fcmovb, fcomvbe, fcomve, fcmovu, fcmovae, fcmova, fcmovne, fcmovnu.

Definition at line 3509 of file X86ISelLowering.cpp.

References llvm::X86::COND_A, llvm::X86::COND_AE, llvm::X86::COND_B, llvm::X86::COND_BE, llvm::X86::COND_E, llvm::X86::COND_NE, llvm::X86::COND_NP, and llvm::X86::COND_P.

Referenced by PerformCMOVCombine().

static SDValue Insert128BitVector ( SDValue  Result,
SDValue  Vec,
unsigned  IdxVal,
SelectionDAG DAG,
SDLoc  dl 
)
static

Generate a DAG to put 128-bits into a vector > 128 bits. This sets things up to match to an AVX VINSERTF128/VINSERTI128 or AVX-512 VINSERTF32x4/VINSERTI32x4 instructions or a simple superregister reference. Idx is an index in the 128 bits we want. It need not be aligned to a 128-bit bounday. That makes lowering INSERT_VECTOR_ELT operations easier.

Definition at line 147 of file X86ISelLowering.cpp.

References llvm::SDValue::getValueType(), InsertSubVector(), and llvm::EVT::is128BitVector().

Referenced by Concat128BitVectors(), LowerINSERT_SUBVECTOR(), LowerSCALAR_TO_VECTOR(), PerformLOADCombine(), and PerformShuffleCombine256().

static SDValue Insert256BitVector ( SDValue  Result,
SDValue  Vec,
unsigned  IdxVal,
SelectionDAG DAG,
SDLoc  dl 
)
static
static SDValue InsertSubVector ( SDValue  Result,
SDValue  Vec,
unsigned  IdxVal,
SelectionDAG DAG,
SDLoc  dl,
unsigned  vectorWidth 
)
static
static bool isAllOnes ( SDValue  V)
static
static bool isAndOrOfSetCCs ( SDValue  Op,
unsigned Opc 
)
static
static bool IsCCallConvention ( CallingConv::ID  CC)
static

Return true if the calling convention is a C calling convention.

Definition at line 2093 of file X86ISelLowering.cpp.

References llvm::CallingConv::C, llvm::CallingConv::X86_64_SysV, and llvm::CallingConv::X86_64_Win64.

static bool isCommutedMOVLMask ( ArrayRef< int >  Mask,
MVT  VT,
bool  V2IsSplat = false,
bool  V2IsUndef = false 
)
static

isCommutedMOVLMask - Returns true if the shuffle mask is except the reverse of what x86 movss want. X86 movs requires the lowest element to be lowest element of vector 2 and the other elements to come from vector 1 in order.

Definition at line 4233 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), isUndefOrEqual(), and isUndefOrInRange().

Referenced by llvm::X86TargetLowering::isVectorClearMaskLegal(), and NormalizeVectorShuffle().

static bool isHorizontalBinOp ( SDValue LHS,
SDValue RHS,
bool  IsCommutative 
)
static

isHorizontalBinOp - Return 'true' if this vector operation is "horizontal" and return the operands for the horizontal operation in LHS and RHS. A horizontal operation performs the binary operation on successive elements of its first operand, then on successive elements of its second operand, returning the resulting values in a vector. For example, if A = < float a0, float a1, float a2, float a3 > and B = < float b0, float b1, float b2, float b3 > then the result of doing a horizontal operation on A and B is A horizontal-op B = < a0 op a1, a2 op a3, b0 op b1, b2 op b3 >. In short, LHS and RHS are inspected to see if LHS op RHS is of the form A horizontal-op B, for some already available A and B, and if so then LHS is set to A, RHS to B, and the routine returns 'true'. Note that the binary operation should have the property that if one of the operands is UNDEF then the result is UNDEF.

Definition at line 18469 of file X86ISelLowering.cpp.

References llvm::ARM_PROC::A, llvm::ArrayRef< T >::begin(), llvm::SmallVectorTemplateCommon< T >::begin(), llvm::CallingConv::C, CommuteVectorShuffleMask(), llvm::ArrayRef< T >::end(), llvm::SDValue::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::SDValue::getSimpleValueType(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), llvm::MVT::is256BitVector(), llvm::ISD::UNDEF, and llvm::ISD::VECTOR_SHUFFLE.

Referenced by PerformAddCombine(), PerformFADDCombine(), PerformFSUBCombine(), and PerformSubCombine().

static bool isMOVDDUPMask ( ArrayRef< int >  Mask,
MVT  VT 
)
static

isMOVDDUPMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to 128-bit version of MOVDDUP.

Definition at line 4325 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), and isUndefOrEqual().

static bool isMOVDDUPYMask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasFp256 
)
static

isMOVDDUPYMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to 256-bit version of MOVDDUP.

Definition at line 4305 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is256BitVector(), and isUndefOrEqual().

static bool isMOVHLPS_v_undef_Mask ( ArrayRef< int >  Mask,
MVT  VT 
)
static

isMOVHLPS_v_undef_Mask - Special case of isMOVHLPSMask for canonical form of vector_shuffle v, v, <2, 3, 2, 3>, i.e. vector_shuffle v, undef, <2, 3, 2, 3>

Definition at line 3798 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), and isUndefOrEqual().

static bool isMOVHLPSMask ( ArrayRef< int >  Mask,
MVT  VT 
)
static

isMOVHLPSMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to MOVHLPS.

Definition at line 3779 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), and isUndefOrEqual().

static bool isMOVLHPSMask ( ArrayRef< int >  Mask,
MVT  VT 
)
static

isMOVLHPSMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to MOVLHPS.

Definition at line 3837 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), and isUndefOrEqual().

static bool isMOVLMask ( ArrayRef< int >  Mask,
EVT  VT 
)
static

isMOVLMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to MOVSS, MOVSD, and MOVD, i.e. setting the lowest element.

Definition at line 4079 of file X86ISelLowering.cpp.

References llvm::EVT::getSizeInBits(), llvm::EVT::getVectorElementType(), llvm::EVT::getVectorNumElements(), llvm::EVT::is128BitVector(), and isUndefOrEqual().

Referenced by getMOVLP(), llvm::X86TargetLowering::isShuffleMaskLegal(), llvm::X86TargetLowering::isVectorClearMaskLegal(), and NormalizeVectorShuffle().

static bool isMOVLPMask ( ArrayRef< int >  Mask,
MVT  VT 
)
static

isMOVLPMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to MOVLP{S|D}.

Definition at line 3815 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), and isUndefOrEqual().

static bool isMOVSHDUPMask ( ArrayRef< int >  Mask,
MVT  VT,
const X86Subtarget Subtarget 
)
static

isMOVSHDUPMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to MOVSHDUP. Masks to match: <1, 1, 3, 3> or <1, 1, 3, 3, 5, 5, 7, 7>

Definition at line 4257 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::X86Subtarget::hasSSE3(), llvm::MVT::is128BitVector(), llvm::MVT::is256BitVector(), llvm::MVT::is512BitVector(), and isUndefOrEqual().

static bool isMOVSLDUPMask ( ArrayRef< int >  Mask,
MVT  VT,
const X86Subtarget Subtarget 
)
static

isMOVSLDUPMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to MOVSLDUP. Masks to match: <0, 0, 2, 2> or <0, 0, 2, 2, 4, 4, 6, 6>

Definition at line 4281 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::X86Subtarget::hasSSE3(), llvm::MVT::is128BitVector(), llvm::MVT::is256BitVector(), llvm::MVT::is512BitVector(), and isUndefOrEqual().

static bool isPALIGNRMask ( ArrayRef< int >  Mask,
MVT  VT,
const X86Subtarget Subtarget 
)
static
static bool isPermImmMask ( ArrayRef< int >  Mask,
MVT  VT,
unsigned Imm8 
)
static
static bool isPSHUFDMask ( ArrayRef< int >  Mask,
MVT  VT 
)
static

isPSHUFDMask - Return true if the node specifies a shuffle of elements that is suitable for input to PSHUFD or PSHUFW. That is, it doesn't reference the second operand.

Definition at line 3562 of file X86ISelLowering.cpp.

References llvm::MVT::v2f64, llvm::MVT::v2i64, llvm::MVT::v4f32, and llvm::MVT::v4i32.

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal().

static bool isPSHUFHWMask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasInt256 
)
static

isPSHUFHWMask - Return true if the node specifies a shuffle of elements that is suitable for input to PSHUFHW.

Definition at line 3572 of file X86ISelLowering.cpp.

References isSequentialOrUndefInRange(), isUndefOrInRange(), llvm::MVT::v16i16, and llvm::MVT::v8i16.

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal().

static bool isPSHUFLWMask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasInt256 
)
static

isPSHUFLWMask - Return true if the node specifies a shuffle of elements that is suitable for input to PSHUFLW.

Definition at line 3601 of file X86ISelLowering.cpp.

References isSequentialOrUndefInRange(), isUndefOrInRange(), llvm::MVT::v16i16, and llvm::MVT::v8i16.

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal().

static bool isScalarLoadToVector ( SDNode N,
LoadSDNode **  LD = NULL 
)
static

isScalarLoadToVector - Returns true if the node is a scalar load that is promoted to a vector. It also returns the LoadSDNode by reference if required.

Definition at line 4607 of file X86ISelLowering.cpp.

References llvm::SDValue::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::ISD::isNON_EXTLoad(), llvm::A64DB::LD, N, and llvm::ISD::SCALAR_TO_VECTOR.

Referenced by getVZextMovL(), and ShouldXformToMOVLP().

static bool isSequentialOrUndefInRange ( ArrayRef< int >  Mask,
unsigned  Pos,
unsigned  Size,
int  Low 
)
static

isSequentialOrUndefInRange - Return true if every element in Mask, beginning from position Pos and ending in Pos+Size, falls within the specified sequential range (L, L+Pos]. or is undef.

Definition at line 3551 of file X86ISelLowering.cpp.

References isUndefOrEqual().

Referenced by isPSHUFHWMask(), isPSHUFLWMask(), and isVPERM2X128Mask().

static bool isShuffleHigh128VectorInsertLow ( ShuffleVectorSDNode SVOp)
static

isShuffleHigh128VectorInsertLow - Checks whether the shuffle node is the same as extracting the high 128-bit part of 256-bit vector and then inserting the result into the low part of a new 256-bit vector

Definition at line 16097 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDNode::getValueType(), llvm::EVT::getVectorNumElements(), and isUndefOrEqual().

Referenced by PerformShuffleCombine256().

static bool isShuffleLow128VectorInsertHigh ( ShuffleVectorSDNode SVOp)
static

isShuffleLow128VectorInsertHigh - Checks whether the shuffle node is the same as extracting the low 128-bit part of 256-bit vector and then inserting the result into the high part of a new 256-bit vector

Definition at line 16113 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDNode::getValueType(), llvm::EVT::getVectorNumElements(), and isUndefOrEqual().

Referenced by PerformShuffleCombine256().

static bool isShuffleMaskConsecutive ( ShuffleVectorSDNode SVOp,
unsigned  MaskI,
unsigned  MaskE,
unsigned  OpIdx,
unsigned  NumElems,
unsigned OpNum 
)
static

isShuffleMaskConsecutive - Check if the shuffle mask indicies [MaskI, MaskE) correspond consecutively to elements from one of the vector operands, starting from its index OpIdx. Also tell OpNum which source vector operand.

Definition at line 5107 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt().

Referenced by isVectorShiftLeft(), and isVectorShiftRight().

static bool isSHUFPMask ( ArrayRef< int >  Mask,
MVT  VT,
bool  Commuted = false 
)
static

isSHUFPMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to 128/256-bit SHUFPS and SHUFPD. If Commuted is true, then it checks for sources to be reverse of what x86 shuffles want.

Definition at line 3720 of file X86ISelLowering.cpp.

References llvm::MVT::getSizeInBits(), llvm::MVT::getVectorElementType(), llvm::MVT::getVectorNumElements(), and isUndefOrInRange().

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal(), and llvm::X86TargetLowering::isVectorClearMaskLegal().

static bool isSplatVector ( SDNode N)
static
static bool IsTailCallConvention ( CallingConv::ID  CC)
static

IsTailCallConvention - Return true if the calling convention is one that supports tail call optimization.

Definition at line 2087 of file X86ISelLowering.cpp.

References llvm::CallingConv::Fast, llvm::CallingConv::GHC, and llvm::CallingConv::HiPE.

Referenced by FuncIsMadeTailCallSafe().

static bool isTargetShuffle ( unsigned  Opcode)
static
static bool isTruncWithZeroHighBitsInput ( SDValue  V,
SelectionDAG DAG 
)
static
static bool isUndefOrEqual ( int  Val,
int  CmpVal 
)
static
static bool isUndefOrInRange ( int  Val,
int  Low,
int  Hi 
)
static

isUndefOrInRange - Return true if Val is undef or if its value falls within the specified range (L, H].

Definition at line 3538 of file X86ISelLowering.cpp.

References llvm::HexagonISD::Hi.

Referenced by isCommutedMOVLMask(), isPALIGNRMask(), isPermImmMask(), isPSHUFHWMask(), isPSHUFLWMask(), isSHUFPMask(), and isVPERMILPMask().

static bool isUNPCKH_v_undef_Mask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasInt256 
)
static

isUNPCKH_v_undef_Mask - Special case of isUNPCKHMask for canonical form of vector_shuffle v, v, <2, 6, 3, 7>, i.e. vector_shuffle v, undef, <2, 2, 3, 3>

Definition at line 4045 of file X86ISelLowering.cpp.

References llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), llvm::MVT::is256BitVector(), llvm::MVT::is512BitVector(), and isUndefOrEqual().

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal().

static bool isUNPCKHMask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasInt256,
bool  V2IsSplat = false 
)
static

isUNPCKHMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to UNPCKH.

Definition at line 3954 of file X86ISelLowering.cpp.

References llvm::MVT::getScalarType(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::MVT::is256BitVector(), llvm::MVT::is512BitVector(), and isUndefOrEqual().

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal().

static bool isUNPCKL_v_undef_Mask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasInt256 
)
static

isUNPCKL_v_undef_Mask - Special case of isUNPCKLMask for canonical form of vector_shuffle v, v, <0, 4, 1, 5>, i.e. vector_shuffle v, undef, <0, 0, 1, 1>

Definition at line 4002 of file X86ISelLowering.cpp.

References llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), llvm::MVT::is256BitVector(), llvm::MVT::is512BitVector(), and isUndefOrEqual().

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal().

static bool isUNPCKLMask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasInt256,
bool  V2IsSplat = false 
)
static

isUNPCKLMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to UNPCKL.

Definition at line 3906 of file X86ISelLowering.cpp.

References llvm::MVT::getScalarType(), llvm::MVT::getSizeInBits(), llvm::MVT::getVectorNumElements(), llvm::MVT::is256BitVector(), llvm::MVT::is512BitVector(), and isUndefOrEqual().

Referenced by llvm::X86TargetLowering::isShuffleMaskLegal().

static bool isVectorShift ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG,
bool isLeft,
SDValue ShVal,
unsigned ShAmt 
)
static

isVectorShift - Returns true if the shuffle can be implemented as a logical left or right shift of a vector.

Definition at line 5205 of file X86ISelLowering.cpp.

References llvm::SDNode::getSimpleValueType(), llvm::MVT::is128BitVector(), isVectorShiftLeft(), and isVectorShiftRight().

static bool isVectorShiftLeft ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG,
bool isLeft,
SDValue ShVal,
unsigned ShAmt 
)
static

isVectorShiftLeft - Returns true if the shuffle can be implemented as a logical left shift of a vector.

Definition at line 5170 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), getNumOfConsecutiveZeros(), llvm::SDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getVectorNumElements(), and isShuffleMaskConsecutive().

Referenced by isVectorShift().

static bool isVectorShiftRight ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG,
bool isLeft,
SDValue ShVal,
unsigned ShAmt 
)
static

isVectorShiftRight - Returns true if the shuffle can be implemented as a logical left shift of a vector.

Definition at line 5135 of file X86ISelLowering.cpp.

References llvm::ShuffleVectorSDNode::getMaskElt(), getNumOfConsecutiveZeros(), llvm::SDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getVectorNumElements(), and isShuffleMaskConsecutive().

Referenced by isVectorShift().

static bool isVEXTRACTIndex ( SDNode N,
unsigned  vecWidth 
)
static

isVEXTRACTIndex - Return true if the specified EXTRACT_SUBVECTOR operand specifies a vector extract that is suitable for instruction that extract 128 or 256 bit vectors

Definition at line 4342 of file X86ISelLowering.cpp.

References llvm::SDValue::getNode(), llvm::SDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getSizeInBits(), and llvm::MVT::getVectorElementType().

Referenced by llvm::X86::isVEXTRACT128Index(), and llvm::X86::isVEXTRACT256Index().

static bool isVINSERTIndex ( SDNode N,
unsigned  vecWidth 
)
static

isVINSERTIndex - Return true if the specified INSERT_SUBVECTOR operand specifies a subvector insert that is suitable for input to insertion of 128 or 256-bit subvectors

Definition at line 4361 of file X86ISelLowering.cpp.

References llvm::SDValue::getNode(), llvm::SDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getSizeInBits(), and llvm::MVT::getVectorElementType().

Referenced by llvm::X86::isVINSERT128Index(), and llvm::X86::isVINSERT256Index().

static bool isVPERM2X128Mask ( ArrayRef< int >  Mask,
MVT  VT,
bool  HasFp256 
)
static

isVPERM2X128Mask - Match 256-bit shuffles where the elements are considered as permutations between 128-bit chunks or halves. As an example: this shuffle bellow: vector_shuffle <4, 5, 6, 7, 12, 13, 14, 15> The first half comes from the second half of V1 and the second half from the the second half of V2.

Definition at line 4103 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is256BitVector(), and isSequentialOrUndefInRange().

static bool isVPERMILPMask ( ArrayRef< int >  Mask,
MVT  VT 
)
static

isVPERMILPMask - Return true if the specified VECTOR_SHUFFLE operand specifies a shuffle of elements that is suitable for input to VPERMILPD*. Note that VPERMIL mask matching is different depending whether theunderlying type is 32 or 64. In the VPERMILPS the high half of the mask should point to the same elements of the low, but to the higher half of the source. In VPERMILPD the two lanes could be shuffled independently of each other with the same restriction that lanes can't be crossed. Also handles PSHUFDY.

Definition at line 4201 of file X86ISelLowering.cpp.

References llvm::MVT::getSizeInBits(), llvm::MVT::getVectorElementType(), llvm::MVT::getVectorNumElements(), isUndefOrEqual(), and isUndefOrInRange().

static bool isX86LogicalCmp ( SDValue  Op)
static
static bool isXor1OfSetCC ( SDValue  Op)
static
static bool isZero ( SDValue  V)
static

Definition at line 10147 of file X86ISelLowering.cpp.

References llvm::dyn_cast(), and llvm::ConstantSDNode::isNullValue().

Referenced by PerformAndCombine().

static bool isZeroShuffle ( ShuffleVectorSDNode N)
static
static SDValue Lower256IntArith ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue Lower256IntVSETCC ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerADD ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerADDC_ADDE_SUBC_SUBE ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerADJUST_TRAMPOLINE ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerANY_EXTEND ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerAsSplatVectorLoad ( SDValue  SrcOp,
MVT  VT,
SDLoc  dl,
SelectionDAG DAG 
)
static
static SDValue LowerATOMIC_FENCE ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerATOMIC_STORE ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerAVXCONCAT_VECTORS ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerAVXExtend ( SDValue  Op,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue LowerBITCAST ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerBuildVectorv16i8 ( SDValue  Op,
unsigned  NonZeros,
unsigned  NumNonZero,
unsigned  NumZero,
SelectionDAG DAG,
const X86Subtarget Subtarget,
const TargetLowering TLI 
)
static
static SDValue LowerBuildVectorv8i16 ( SDValue  Op,
unsigned  NonZeros,
unsigned  NumNonZero,
unsigned  NumZero,
SelectionDAG DAG,
const X86Subtarget Subtarget,
const TargetLowering TLI 
)
static
static SDValue LowerCMP_SWAP ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerCONCAT_VECTORS ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerCTLZ ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerCTLZ_ZERO_UNDEF ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerCTTZ ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerEXTRACT_SUBVECTOR ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerEXTRACT_VECTOR_ELT_SSE4 ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerFGETSIGN ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerFP_EXTEND ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerFSINCOS ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerINSERT_SUBVECTOR ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerINSERT_VECTOR_ELT_SSE4 ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerINTRINSIC_W_CHAIN ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static

Definition at line 11802 of file X86ISelLowering.cpp.

References llvm::ISD::ADD, llvm::array_lengthof(), llvm::X86ISD::CMOV, llvm::X86::COND_B, llvm::X86::COND_NE, llvm::N86::EBP, llvm::N86::ECX, llvm::X86ISD::EH_RETURN, llvm::X86ISD::EH_SJLJ_LONGJMP, llvm::X86ISD::EH_SJLJ_SETJMP, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getCopyFromReg(), llvm::SelectionDAG::getCopyToReg(), llvm::SelectionDAG::getEntryNode(), llvm::MachineFunction::getFrameInfo(), llvm::X86RegisterInfo::getFrameRegister(), getGatherNode(), llvm::SelectionDAG::getIntPtrConstant(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), getMGatherNode(), getMScatterNode(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), llvm::TargetLoweringBase::getPointerTy(), llvm::SelectionDAG::getRegister(), llvm::TargetMachine::getRegisterInfo(), llvm::X86TargetLowering::getReturnAddressFrameIndex(), getScatterNode(), llvm::X86RegisterInfo::getSlotSize(), llvm::SelectionDAG::getStore(), llvm::TargetLoweringBase::getTargetMachine(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::SelectionDAG::getVTList(), llvm::SDNode::getVTList(), llvm::SelectionDAG::getZExtOrTrunc(), llvm::MVT::Glue, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm_unreachable, llvm::ISD::MERGE_VALUES, llvm::MVT::Other, llvm::X86ISD::RDRAND, llvm::X86ISD::RDSEED, llvm::AArch64ISD::Ret, llvm::X86ISD::SETCC, llvm::MachineFrameInfo::setFrameAddressIsTaken(), llvm::MachineFrameInfo::setReturnAddressIsTaken(), llvm::Intrinsic::x86_avx512_gather_dpd_512, llvm::Intrinsic::x86_avx512_gather_dpd_mask_512, llvm::Intrinsic::x86_avx512_gather_dpi_512, llvm::Intrinsic::x86_avx512_gather_dpi_mask_512, llvm::Intrinsic::x86_avx512_gather_dpq_512, llvm::Intrinsic::x86_avx512_gather_dpq_mask_512, llvm::Intrinsic::x86_avx512_gather_dps_512, llvm::Intrinsic::x86_avx512_gather_dps_mask_512, llvm::Intrinsic::x86_avx512_gather_qpd_512, llvm::Intrinsic::x86_avx512_gather_qpd_mask_512, llvm::Intrinsic::x86_avx512_gather_qpi_512, llvm::Intrinsic::x86_avx512_gather_qpi_mask_512, llvm::Intrinsic::x86_avx512_gather_qpq_512, llvm::Intrinsic::x86_avx512_gather_qpq_mask_512, llvm::Intrinsic::x86_avx512_gather_qps_512, llvm::Intrinsic::x86_avx512_gather_qps_mask_512, llvm::Intrinsic::x86_avx512_scatter_dpd_512, llvm::Intrinsic::x86_avx512_scatter_dpd_mask_512, llvm::Intrinsic::x86_avx512_scatter_dpi_512, llvm::Intrinsic::x86_avx512_scatter_dpi_mask_512, llvm::Intrinsic::x86_avx512_scatter_dpq_512, llvm::Intrinsic::x86_avx512_scatter_dpq_mask_512, llvm::Intrinsic::x86_avx512_scatter_dps_512, llvm::Intrinsic::x86_avx512_scatter_dps_mask_512, llvm::Intrinsic::x86_avx512_scatter_qpd_512, llvm::Intrinsic::x86_avx512_scatter_qpd_mask_512, llvm::Intrinsic::x86_avx512_scatter_qpi_512, llvm::Intrinsic::x86_avx512_scatter_qpi_mask_512, llvm::Intrinsic::x86_avx512_scatter_qpq_512, llvm::Intrinsic::x86_avx512_scatter_qpq_mask_512, llvm::Intrinsic::x86_avx512_scatter_qps_512, llvm::Intrinsic::x86_avx512_scatter_qps_mask_512, llvm::Intrinsic::x86_rdrand_16, llvm::Intrinsic::x86_rdrand_32, llvm::Intrinsic::x86_rdrand_64, llvm::Intrinsic::x86_rdseed_16, llvm::Intrinsic::x86_rdseed_32, llvm::Intrinsic::x86_rdseed_64, llvm::Intrinsic::x86_xtest, llvm::X86ISD::XTEST, and llvm::ISD::ZERO_EXTEND.

Referenced by llvm::X86TargetLowering::LowerOperation().

static SDValue LowerINTRINSIC_WO_CHAIN ( SDValue  Op,
SelectionDAG DAG 
)
static

Definition at line 11022 of file X86ISelLowering.cpp.

References llvm::ISD::BITCAST, llvm::X86ISD::COMI, llvm::X86::COND_A, llvm::X86::COND_B, llvm::X86::COND_E, llvm::X86::COND_INVALID, llvm::X86::COND_O, llvm::X86::COND_S, llvm::SmallVectorTemplateCommon< T >::data(), llvm::X86ISD::FHADD, llvm::X86ISD::FHSUB, llvm::X86ISD::FMADD, llvm::X86ISD::FMADDSUB, llvm::X86ISD::FMAX, llvm::X86ISD::FMIN, llvm::X86ISD::FMSUB, llvm::X86ISD::FMSUBADD, llvm::X86ISD::FNMADD, llvm::X86ISD::FNMSUB, llvm::ISD::FSQRT, llvm::SelectionDAG::getConstant(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOperand(), getTargetVShiftNode(), llvm::SDValue::getValueType(), llvm::SelectionDAG::getVTList(), llvm::X86ISD::HADD, llvm::X86ISD::HSUB, llvm::MVT::i32, llvm::MVT::i8, llvm::X86ISD::INSERTPS, llvm::X86ISD::KORTEST, llvm_unreachable, llvm::SDNode::op_begin(), llvm::SDNode::op_end(), llvm::X86ISD::PCMPESTRI, llvm::X86ISD::PCMPISTRI, llvm::X86ISD::PMULUDQ, llvm::X86ISD::PSHUFB, llvm::X86ISD::PSIGN, llvm::X86ISD::PTEST, llvm::X86ISD::SETCC, llvm::ISD::SETEQ, llvm::ISD::SETGE, llvm::ISD::SETGT, llvm::ISD::SETLE, llvm::ISD::SETLT, llvm::ISD::SETNE, llvm::ISD::SHL, llvm::X86ISD::SMAX, llvm::X86ISD::SMIN, llvm::ISD::SRA, llvm::ISD::SRL, llvm::X86ISD::SUBUS, llvm::X86ISD::TESTP, TranslateX86CC(), llvm::X86ISD::UCOMI, llvm::X86ISD::UMAX, llvm::X86ISD::UMIN, llvm::MVT::v16i1, llvm::X86ISD::VPERM2X128, llvm::X86ISD::VPERMV, llvm::X86ISD::VSHL, llvm::X86ISD::VSHLI, llvm::X86ISD::VSRA, llvm::X86ISD::VSRAI, llvm::X86ISD::VSRL, llvm::X86ISD::VSRLI, llvm::Intrinsic::x86_avx2_permd, llvm::Intrinsic::x86_avx2_permps, llvm::Intrinsic::x86_avx2_phadd_d, llvm::Intrinsic::x86_avx2_phadd_w, llvm::Intrinsic::x86_avx2_phsub_d, llvm::Intrinsic::x86_avx2_phsub_w, llvm::Intrinsic::x86_avx2_pmaxs_b, llvm::Intrinsic::x86_avx2_pmaxs_d, llvm::Intrinsic::x86_avx2_pmaxs_w, llvm::Intrinsic::x86_avx2_pmaxu_b, llvm::Intrinsic::x86_avx2_pmaxu_d, llvm::Intrinsic::x86_avx2_pmaxu_w, llvm::Intrinsic::x86_avx2_pmins_b, llvm::Intrinsic::x86_avx2_pmins_d, llvm::Intrinsic::x86_avx2_pmins_w, llvm::Intrinsic::x86_avx2_pminu_b, llvm::Intrinsic::x86_avx2_pminu_d, llvm::Intrinsic::x86_avx2_pminu_w, llvm::Intrinsic::x86_avx2_pmulu_dq, llvm::Intrinsic::x86_avx2_pshuf_b, llvm::Intrinsic::x86_avx2_psign_b, llvm::Intrinsic::x86_avx2_psign_d, llvm::Intrinsic::x86_avx2_psign_w, llvm::Intrinsic::x86_avx2_psll_d, llvm::Intrinsic::x86_avx2_psll_q, llvm::Intrinsic::x86_avx2_psll_w, llvm::Intrinsic::x86_avx2_pslli_d, llvm::Intrinsic::x86_avx2_pslli_q, llvm::Intrinsic::x86_avx2_pslli_w, llvm::Intrinsic::x86_avx2_psllv_d, llvm::Intrinsic::x86_avx2_psllv_d_256, llvm::Intrinsic::x86_avx2_psllv_q, llvm::Intrinsic::x86_avx2_psllv_q_256, llvm::Intrinsic::x86_avx2_psra_d, llvm::Intrinsic::x86_avx2_psra_w, llvm::Intrinsic::x86_avx2_psrai_d, llvm::Intrinsic::x86_avx2_psrai_w, llvm::Intrinsic::x86_avx2_psrav_d, llvm::Intrinsic::x86_avx2_psrav_d_256, llvm::Intrinsic::x86_avx2_psrl_d, llvm::Intrinsic::x86_avx2_psrl_q, llvm::Intrinsic::x86_avx2_psrl_w, llvm::Intrinsic::x86_avx2_psrli_d, llvm::Intrinsic::x86_avx2_psrli_q, llvm::Intrinsic::x86_avx2_psrli_w, llvm::Intrinsic::x86_avx2_psrlv_d, llvm::Intrinsic::x86_avx2_psrlv_d_256, llvm::Intrinsic::x86_avx2_psrlv_q, llvm::Intrinsic::x86_avx2_psrlv_q_256, llvm::Intrinsic::x86_avx2_psubus_b, llvm::Intrinsic::x86_avx2_psubus_w, llvm::Intrinsic::x86_avx2_vperm2i128, llvm::Intrinsic::x86_avx512_kortestc, llvm::Intrinsic::x86_avx512_kortestz, llvm::Intrinsic::x86_avx512_max_pd_512, llvm::Intrinsic::x86_avx512_max_ps_512, llvm::Intrinsic::x86_avx512_min_pd_512, llvm::Intrinsic::x86_avx512_min_ps_512, llvm::Intrinsic::x86_avx512_pmaxs_d, llvm::Intrinsic::x86_avx512_pmaxs_q, llvm::Intrinsic::x86_avx512_pmaxu_d, llvm::Intrinsic::x86_avx512_pmaxu_q, llvm::Intrinsic::x86_avx512_pmins_d, llvm::Intrinsic::x86_avx512_pmins_q, llvm::Intrinsic::x86_avx512_pminu_d, llvm::Intrinsic::x86_avx512_pminu_q, llvm::Intrinsic::x86_avx_hadd_pd_256, llvm::Intrinsic::x86_avx_hadd_ps_256, llvm::Intrinsic::x86_avx_hsub_pd_256, llvm::Intrinsic::x86_avx_hsub_ps_256, llvm::Intrinsic::x86_avx_max_pd_256, llvm::Intrinsic::x86_avx_max_ps_256, llvm::Intrinsic::x86_avx_min_pd_256, llvm::Intrinsic::x86_avx_min_ps_256, llvm::Intrinsic::x86_avx_ptestc_256, llvm::Intrinsic::x86_avx_ptestnzc_256, llvm::Intrinsic::x86_avx_ptestz_256, llvm::Intrinsic::x86_avx_sqrt_pd_256, llvm::Intrinsic::x86_avx_sqrt_ps_256, llvm::Intrinsic::x86_avx_vperm2f128_pd_256, llvm::Intrinsic::x86_avx_vperm2f128_ps_256, llvm::Intrinsic::x86_avx_vperm2f128_si_256, llvm::Intrinsic::x86_avx_vtestc_pd, llvm::Intrinsic::x86_avx_vtestc_pd_256, llvm::Intrinsic::x86_avx_vtestc_ps, llvm::Intrinsic::x86_avx_vtestc_ps_256, llvm::Intrinsic::x86_avx_vtestnzc_pd, llvm::Intrinsic::x86_avx_vtestnzc_pd_256, llvm::Intrinsic::x86_avx_vtestnzc_ps, llvm::Intrinsic::x86_avx_vtestnzc_ps_256, llvm::Intrinsic::x86_avx_vtestz_pd, llvm::Intrinsic::x86_avx_vtestz_pd_256, llvm::Intrinsic::x86_avx_vtestz_ps, llvm::Intrinsic::x86_avx_vtestz_ps_256, llvm::Intrinsic::x86_fma_vfmadd_pd, llvm::Intrinsic::x86_fma_vfmadd_pd_256, llvm::Intrinsic::x86_fma_vfmadd_pd_512, llvm::Intrinsic::x86_fma_vfmadd_ps, llvm::Intrinsic::x86_fma_vfmadd_ps_256, llvm::Intrinsic::x86_fma_vfmadd_ps_512, llvm::Intrinsic::x86_fma_vfmaddsub_pd, llvm::Intrinsic::x86_fma_vfmaddsub_pd_256, llvm::Intrinsic::x86_fma_vfmaddsub_pd_512, llvm::Intrinsic::x86_fma_vfmaddsub_ps, llvm::Intrinsic::x86_fma_vfmaddsub_ps_256, llvm::Intrinsic::x86_fma_vfmaddsub_ps_512, llvm::Intrinsic::x86_fma_vfmsub_pd, llvm::Intrinsic::x86_fma_vfmsub_pd_256, llvm::Intrinsic::x86_fma_vfmsub_pd_512, llvm::Intrinsic::x86_fma_vfmsub_ps, llvm::Intrinsic::x86_fma_vfmsub_ps_256, llvm::Intrinsic::x86_fma_vfmsub_ps_512, llvm::Intrinsic::x86_fma_vfmsubadd_pd, llvm::Intrinsic::x86_fma_vfmsubadd_pd_256, llvm::Intrinsic::x86_fma_vfmsubadd_pd_512, llvm::Intrinsic::x86_fma_vfmsubadd_ps, llvm::Intrinsic::x86_fma_vfmsubadd_ps_256, llvm::Intrinsic::x86_fma_vfmsubadd_ps_512, llvm::Intrinsic::x86_fma_vfnmadd_pd, llvm::Intrinsic::x86_fma_vfnmadd_pd_256, llvm::Intrinsic::x86_fma_vfnmadd_pd_512, llvm::Intrinsic::x86_fma_vfnmadd_ps, llvm::Intrinsic::x86_fma_vfnmadd_ps_256, llvm::Intrinsic::x86_fma_vfnmadd_ps_512, llvm::Intrinsic::x86_fma_vfnmsub_pd, llvm::Intrinsic::x86_fma_vfnmsub_pd_256, llvm::Intrinsic::x86_fma_vfnmsub_pd_512, llvm::Intrinsic::x86_fma_vfnmsub_ps, llvm::Intrinsic::x86_fma_vfnmsub_ps_256, llvm::Intrinsic::x86_fma_vfnmsub_ps_512, llvm::Intrinsic::x86_sse2_comieq_sd, llvm::Intrinsic::x86_sse2_comige_sd, llvm::Intrinsic::x86_sse2_comigt_sd, llvm::Intrinsic::x86_sse2_comile_sd, llvm::Intrinsic::x86_sse2_comilt_sd, llvm::Intrinsic::x86_sse2_comineq_sd, llvm::Intrinsic::x86_sse2_max_pd, llvm::Intrinsic::x86_sse2_min_pd, llvm::Intrinsic::x86_sse2_pmaxs_w, llvm::Intrinsic::x86_sse2_pmaxu_b, llvm::Intrinsic::x86_sse2_pmins_w, llvm::Intrinsic::x86_sse2_pminu_b, llvm::Intrinsic::x86_sse2_pmulu_dq, llvm::Intrinsic::x86_sse2_psll_d, llvm::Intrinsic::x86_sse2_psll_q, llvm::Intrinsic::x86_sse2_psll_w, llvm::Intrinsic::x86_sse2_pslli_d, llvm::Intrinsic::x86_sse2_pslli_q, llvm::Intrinsic::x86_sse2_pslli_w, llvm::Intrinsic::x86_sse2_psra_d, llvm::Intrinsic::x86_sse2_psra_w, llvm::Intrinsic::x86_sse2_psrai_d, llvm::Intrinsic::x86_sse2_psrai_w, llvm::Intrinsic::x86_sse2_psrl_d, llvm::Intrinsic::x86_sse2_psrl_q, llvm::Intrinsic::x86_sse2_psrl_w, llvm::Intrinsic::x86_sse2_psrli_d, llvm::Intrinsic::x86_sse2_psrli_q, llvm::Intrinsic::x86_sse2_psrli_w, llvm::Intrinsic::x86_sse2_psubus_b, llvm::Intrinsic::x86_sse2_psubus_w, llvm::Intrinsic::x86_sse2_sqrt_pd, llvm::Intrinsic::x86_sse2_ucomieq_sd, llvm::Intrinsic::x86_sse2_ucomige_sd, llvm::Intrinsic::x86_sse2_ucomigt_sd, llvm::Intrinsic::x86_sse2_ucomile_sd, llvm::Intrinsic::x86_sse2_ucomilt_sd, llvm::Intrinsic::x86_sse2_ucomineq_sd, llvm::Intrinsic::x86_sse3_hadd_pd, llvm::Intrinsic::x86_sse3_hadd_ps, llvm::Intrinsic::x86_sse3_hsub_pd, llvm::Intrinsic::x86_sse3_hsub_ps, llvm::Intrinsic::x86_sse41_insertps, llvm::Intrinsic::x86_sse41_pmaxsb, llvm::Intrinsic::x86_sse41_pmaxsd, llvm::Intrinsic::x86_sse41_pmaxud, llvm::Intrinsic::x86_sse41_pmaxuw, llvm::Intrinsic::x86_sse41_pminsb, llvm::Intrinsic::x86_sse41_pminsd, llvm::Intrinsic::x86_sse41_pminud, llvm::Intrinsic::x86_sse41_pminuw, llvm::Intrinsic::x86_sse41_ptestc, llvm::Intrinsic::x86_sse41_ptestnzc, llvm::Intrinsic::x86_sse41_ptestz, llvm::Intrinsic::x86_sse42_pcmpestri128, llvm::Intrinsic::x86_sse42_pcmpestria128, llvm::Intrinsic::x86_sse42_pcmpestric128, llvm::Intrinsic::x86_sse42_pcmpestrio128, llvm::Intrinsic::x86_sse42_pcmpestris128, llvm::Intrinsic::x86_sse42_pcmpestriz128, llvm::Intrinsic::x86_sse42_pcmpistri128, llvm::Intrinsic::x86_sse42_pcmpistria128, llvm::Intrinsic::x86_sse42_pcmpistric128, llvm::Intrinsic::x86_sse42_pcmpistrio128, llvm::Intrinsic::x86_sse42_pcmpistris128, llvm::Intrinsic::x86_sse42_pcmpistriz128, llvm::Intrinsic::x86_sse_comieq_ss, llvm::Intrinsic::x86_sse_comige_ss, llvm::Intrinsic::x86_sse_comigt_ss, llvm::Intrinsic::x86_sse_comile_ss, llvm::Intrinsic::x86_sse_comilt_ss, llvm::Intrinsic::x86_sse_comineq_ss, llvm::Intrinsic::x86_sse_max_ps, llvm::Intrinsic::x86_sse_min_ps, llvm::Intrinsic::x86_sse_sqrt_ps, llvm::Intrinsic::x86_sse_ucomieq_ss, llvm::Intrinsic::x86_sse_ucomige_ss, llvm::Intrinsic::x86_sse_ucomigt_ss, llvm::Intrinsic::x86_sse_ucomile_ss, llvm::Intrinsic::x86_sse_ucomilt_ss, llvm::Intrinsic::x86_sse_ucomineq_ss, llvm::Intrinsic::x86_ssse3_phadd_d_128, llvm::Intrinsic::x86_ssse3_phadd_w_128, llvm::Intrinsic::x86_ssse3_phsub_d_128, llvm::Intrinsic::x86_ssse3_phsub_w_128, llvm::Intrinsic::x86_ssse3_pshuf_b_128, llvm::Intrinsic::x86_ssse3_psign_b_128, llvm::Intrinsic::x86_ssse3_psign_d_128, llvm::Intrinsic::x86_ssse3_psign_w_128, and llvm::ISD::ZERO_EXTEND.

Referenced by llvm::X86TargetLowering::LowerOperation().

static SDValue LowerIntVSETCC_AVX512 ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerLOAD_SUB ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerMUL ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerREADCYCLECOUNTER ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerSCALAR_TO_VECTOR ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerScalarImmediateShift ( SDValue  Op,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue LowerScalarVariableShift ( SDValue  Op,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue LowerSDIV ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerShift ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerSIGN_EXTEND ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerSIGN_EXTEND_AVX512 ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerSUB ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerToTLSExecModel ( GlobalAddressSDNode GA,
SelectionDAG DAG,
const EVT  PtrVT,
TLSModel::Model  model,
bool  is64Bit,
bool  isPIC 
)
static
static SDValue LowerToTLSGeneralDynamicModel32 ( GlobalAddressSDNode GA,
SelectionDAG DAG,
const EVT  PtrVT 
)
static
static SDValue LowerToTLSGeneralDynamicModel64 ( GlobalAddressSDNode GA,
SelectionDAG DAG,
const EVT  PtrVT 
)
static
static SDValue LowerToTLSLocalDynamicModel ( GlobalAddressSDNode GA,
SelectionDAG DAG,
const EVT  PtrVT,
bool  is64Bit 
)
static
static SDValue LowerVACOPY ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerVECTOR_SHUFFLE_128v4 ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG 
)
static

LowerVECTOR_SHUFFLE_128v4 - Handle all 128-bit wide vectors with 4 elements, and match them with several different shuffle types.

Definition at line 6851 of file X86ISelLowering.cpp.

References CommuteVectorShuffleMask(), llvm::ShuffleVectorSDNode::getMask(), llvm::SDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::SelectionDAG::getVectorShuffle(), llvm::MVT::is128BitVector(), std::swap(), and llvm::NVPTX::PTXLdStInstCode::V2.

static SDValue LowerVECTOR_SHUFFLE_256 ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG 
)
static
static SDValue LowerVECTOR_SHUFFLEtoBlend ( ShuffleVectorSDNode SVOp,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerVECTOR_SHUFFLEv16i8 ( ShuffleVectorSDNode SVOp,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerVECTOR_SHUFFLEv32i8 ( ShuffleVectorSDNode SVOp,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerVECTOR_SHUFFLEv8i16 ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerVectorAllZeroTest ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerVectorBroadcast ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static

LowerVectorBroadcast - Attempt to use the vbroadcast instruction to generate a splat value for the following cases:

  1. A splat BUILD_VECTOR which uses a single scalar load, or a constant.
  2. A splat shuffle which uses a scalar_to_vector node which comes from a scalar load, or a constant. The VBROADCAST node is returned when a pattern is found, or SDValue() otherwise.

Definition at line 5491 of file X86ISelLowering.cpp.

References llvm::ISD::BUILD_VECTOR, llvm::CallingConv::C, llvm::ISD::Constant, llvm::ISD::ConstantFP, Extract128BitVector(), llvm::MachinePointerInfo::getConstantPool(), llvm::SelectionDAG::getConstantPool(), llvm::SelectionDAG::getEntryNode(), llvm::SelectionDAG::getLoad(), llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDValue::getOpcode(), llvm::SDValue::getOperand(), llvm::TargetLoweringBase::getPointerTy(), llvm::SDValue::getSimpleValueType(), llvm::MVT::getSizeInBits(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValueType(), llvm::MVT::getVectorNumElements(), llvm::X86Subtarget::hasAVX512(), llvm::X86Subtarget::hasFp256(), llvm::X86Subtarget::hasInt256(), llvm::SDNode::hasNUsesOfValue(), llvm::SDValue::hasOneUse(), llvm::MVT::is128BitVector(), llvm::MVT::is256BitVector(), llvm::MVT::is512BitVector(), llvm::EVT::isInteger(), llvm::ISD::isNormalLoad(), llvm::ShuffleVectorSDNode::isSplat(), isSplatVector(), llvm::EVT::isVector(), llvm::ISD::SCALAR_TO_VECTOR, llvm::X86ISD::VBROADCAST, and llvm::ISD::VECTOR_SHUFFLE.

Referenced by NormalizeVectorShuffle().

static SDValue LowerVectorIntExtend ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerVSETCC ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerXALUO ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue LowerZERO_EXTEND ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue LowerZERO_EXTEND_AVX512 ( SDValue  Op,
SelectionDAG DAG 
)
static
static bool MatchingStackOffset ( SDValue  Arg,
unsigned  Offset,
ISD::ArgFlagsTy  Flags,
MachineFrameInfo MFI,
const MachineRegisterInfo MRI,
const X86InstrInfo TII 
)
static
static std::pair<unsigned, bool> matchIntegerMINMAX ( SDValue  Cond,
EVT  VT,
SDValue  LHS,
SDValue  RHS,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue MaterializeSETB ( SDLoc  DL,
SDValue  EFLAGS,
SelectionDAG DAG 
)
static
static bool MayFoldIntoStore ( SDValue  Op)
static
static bool MayFoldLoad ( SDValue  Op)
static
static bool MayFoldVectorLoad ( SDValue  V)
static
static void NormalizeMask ( SmallVectorImpl< int > &  Mask,
unsigned  NumElems 
)
static

NormalizeMask - V2 is a splat, modify the mask (if needed) so all elements that point to V2 points to its first element.

Definition at line 4783 of file X86ISelLowering.cpp.

static SDValue NormalizeVectorShuffle ( SDValue  Op,
const X86Subtarget Subtarget,
SelectionDAG DAG 
)
static
static SDValue OptimizeConditionalInDecrement ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue PerformADCCombine ( SDNode N,
SelectionDAG DAG,
X86TargetLowering::DAGCombinerInfo &  DCI 
)
static
static SDValue PerformAddCombine ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue PerformAndCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformBrCondCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformBTCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI 
)
static
static SDValue PerformCMOVCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformEXTRACT_VECTOR_ELTCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI 
)
static

PerformEXTRACT_VECTOR_ELTCombine - Detect vector gather/scatter index generation and convert it from being a bunch of shuffles and extracts to a simple store and scalar loads to extract the elements.

Definition at line 16398 of file X86ISelLowering.cpp.

References llvm::ISD::ADD, llvm::SmallVectorTemplateCommon< T >::begin(), llvm::ISD::BITCAST, llvm::SelectionDAG::CreateStackTemporary(), llvm::SmallVectorTemplateCommon< T >::end(), llvm::ISD::EXTRACT_VECTOR_ELT, ExtractBitFromMaskVector(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getEntryNode(), llvm::SelectionDAG::getLoad(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::TargetLoweringBase::getPointerTy(), llvm::SDValue::getResNo(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::EVT::getVectorElementType(), llvm::SDValue::hasOneUse(), llvm::SDNode::hasOneUse(), llvm::MVT::i1, llvm::MVT::i32, llvm::TargetLowering::DAGCombinerInfo::isBeforeLegalize(), llvm::X86ISD::MMX_MOVD2W, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SelectionDAG::ReplaceAllUsesOfValueWith(), llvm::ISD::SIGN_EXTEND, llvm::SDNode::use_begin(), llvm::SDNode::use_end(), llvm::MVT::v4i32, llvm::MVT::x86mmx, XFormVExtractWithShuffleIntoLoad(), and llvm::ISD::ZERO_EXTEND.

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformFADDCombine ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue PerformFANDCombine ( SDNode N,
SelectionDAG DAG 
)
static

PerformFANDCombine - Do target-specific dag combines on X86ISD::FAND nodes.

Definition at line 18648 of file X86ISelLowering.cpp.

References llvm::SDNode::getOperand().

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformFANDNCombine ( SDNode N,
SelectionDAG DAG 
)
static

PerformFANDNCombine - Do target-specific dag combines on X86ISD::FANDN nodes.

Definition at line 18661 of file X86ISelLowering.cpp.

References llvm::SDNode::getOperand().

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformFMACombine ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue PerformFMinFMaxCombine ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue PerformFORCombine ( SDNode N,
SelectionDAG DAG 
)
static

PerformFORCombine - Do target-specific dag combines on X86ISD::FOR and X86ISD::FXOR nodes.

Definition at line 18612 of file X86ISelLowering.cpp.

References llvm::X86ISD::FOR, llvm::X86ISD::FXOR, llvm::SDNode::getOpcode(), and llvm::SDNode::getOperand().

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformFSUBCombine ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue performIntegerAbsCombine ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue PerformISDSETCCCombine ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue PerformLOADCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static

PerformLOADCombine - Do target-specific dag combines on LOAD nodes.

Definition at line 18026 of file X86ISelLowering.cpp.

References llvm::ISD::ADD, llvm::ISD::BITCAST, llvm::TargetLowering::DAGCombinerInfo::CombineTo(), llvm::MipsISD::Ext, llvm::ISD::EXTLOAD, llvm::MVT::f64, llvm::MVT::FIRST_INTEGER_VALUETYPE, llvm::MemSDNode::getAlignment(), llvm::LoadSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getContext(), llvm::LoadSDNode::getExtensionType(), llvm::SelectionDAG::getIntPtrConstant(), llvm::SelectionDAG::getLoad(), llvm::MemSDNode::getMemoryVT(), llvm::SelectionDAG::getNode(), llvm::MemSDNode::getPointerInfo(), llvm::TargetLoweringBase::getPointerTy(), llvm::EVT::getScalarType(), llvm::MVT::getSizeInBits(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SelectionDAG::getUNDEF(), llvm::SDValue::getValue(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::EVT::getVectorElementType(), llvm::SelectionDAG::getVectorShuffle(), llvm::EVT::getVectorVT(), llvm::X86Subtarget::hasInt256(), llvm::X86Subtarget::hasSSE2(), llvm::X86Subtarget::hasSSE41(), llvm::MVT::i8, Insert128BitVector(), llvm::ISD::INSERT_VECTOR_ELT, llvm::TargetLowering::DAGCombinerInfo::isBeforeLegalizeOps(), llvm::MemSDNode::isInvariant(), llvm::MemSDNode::isNonTemporal(), llvm::TargetLoweringBase::isOperationLegalOrCustom(), llvm::isPowerOf2_32(), llvm::TargetLoweringBase::isTypeLegal(), llvm::EVT::isVector(), llvm::MemSDNode::isVolatile(), llvm::MVT::LAST_INTEGER_VALUETYPE, N, llvm::ISD::NON_EXTLOAD, llvm::MVT::Other, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::ISD::SCALAR_TO_VECTOR, llvm::ISD::SEXTLOAD, llvm::SmallVectorTemplateCommon< T >::size(), llvm::ISD::SRA, llvm::ISD::TokenFactor, and llvm::X86ISD::VSEXT.

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformMulCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI 
)
static
static SDValue PerformOrCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformSELECTCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static

PerformSELECTCombine - Do target-specific dag combines on SELECT and VSELECT nodes.

Definition at line 16573 of file X86ISelLowering.cpp.

References llvm::ARM_PROC::A, llvm::ISD::ADD, llvm::TargetLowering::DAGCombinerInfo::AddToWorklist(), llvm::ISD::AND, llvm::ISD::BITCAST, llvm::TargetLowering::DAGCombinerInfo::CommitTargetLoweringOpt(), llvm::ISD::CONCAT_VECTORS, Extract128BitVector(), llvm::MVT::f32, llvm::MVT::f80, llvm::X86ISD::FMAX, llvm::X86ISD::FMIN, llvm::SelectionDAG::getConstant(), llvm::SDValue::getConstantOperandVal(), llvm::SelectionDAG::getContext(), llvm::APInt::getHighBitsSet(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getNumOperands(), llvm::SDValue::getOpcode(), llvm::SDNode::getOpcode(), llvm::SDValue::getOperand(), llvm::SDNode::getOperand(), llvm::EVT::getScalarType(), llvm::SelectionDAG::getSetCC(), llvm::ISD::getSetCCInverse(), llvm::TargetLoweringBase::getSetCCResultType(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getTarget(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SDValue::getValueType(), llvm::SDNode::getValueType(), llvm::EVT::getVectorElementType(), llvm::EVT::getVectorNumElements(), llvm::X86Subtarget::hasAVX2(), llvm::X86Subtarget::hasAVX512(), llvm::X86Subtarget::hasSSE1(), llvm::X86Subtarget::hasSSE2(), I, llvm::MVT::i1, llvm::MVT::i16, llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::EVT::is128BitVector(), llvm::EVT::is256BitVector(), llvm::TargetLowering::DAGCombinerInfo::isBeforeLegalize(), llvm::TargetLowering::DAGCombinerInfo::isBeforeLegalizeOps(), llvm::ISD::isBuildVectorAllOnes(), llvm::ISD::isBuildVectorAllZeros(), llvm::SelectionDAG::isEqualTo(), llvm::EVT::isFloatingPoint(), llvm::EVT::isInteger(), llvm::SelectionDAG::isKnownNeverNaN(), llvm::SelectionDAG::isKnownNeverZero(), llvm::TargetLoweringBase::isOperationLegal(), llvm::APInt::isSignBit(), isSplatVector(), llvm::TargetLoweringBase::isTypeLegal(), llvm::EVT::isVector(), matchIntegerMINMAX(), llvm::ISD::MUL, llvm::TargetMachine::Options, llvm::ISD::OR, llvm::AArch64ISD::Ret, llvm::ISD::SELECT, llvm::ISD::SETCC, llvm::ISD::SETGE, llvm::ISD::SETGT, llvm::ISD::SETLE, llvm::ISD::SETLT, llvm::ISD::SETOGE, llvm::ISD::SETOGT, llvm::ISD::SETOLE, llvm::ISD::SETOLT, llvm::ISD::SETUGE, llvm::ISD::SETUGT, llvm::ISD::SETULE, llvm::ISD::SETULT, llvm::ISD::SHL, llvm::ISD::SIGN_EXTEND, llvm::TargetLowering::SimplifyDemandedBits(), llvm::ISD::SUB, llvm::X86ISD::SUBUS, std::swap(), llvm::TargetOptions::UnsafeFPMath, llvm::SDNode::use_begin(), llvm::SDNode::use_end(), llvm::MVT::v16i16, llvm::MVT::v16i8, llvm::MVT::v32i8, llvm::MVT::v8i16, llvm::ISD::VSELECT, llvm::ISD::XOR, and llvm::ISD::ZERO_EXTEND.

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformSETCCCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformSExtCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformShiftCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue performShiftToAllZeros ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue PerformSHLCombine ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue PerformShuffleCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformShuffleCombine256 ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformSIGN_EXTEND_INREGCombine ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue PerformSINT_TO_FPCombine ( SDNode N,
SelectionDAG DAG,
const X86TargetLowering XTLI 
)
static
static SDValue PerformSTORECombine ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static

PerformSTORECombine - Do target-specific dag combines on STORE nodes.

Definition at line 18222 of file X86ISelLowering.cpp.

References llvm::ISD::ADD, llvm::ISD::BITCAST, Extract128BitVector(), llvm::ISD::EXTRACT_VECTOR_ELT, llvm::MVT::f64, llvm::MVT::FIRST_INTEGER_VALUETYPE, llvm::MemSDNode::getAlignment(), llvm::Function::getAttributes(), llvm::LoadSDNode::getBasePtr(), llvm::StoreSDNode::getBasePtr(), llvm::MemSDNode::getChain(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getContext(), llvm::MachineFunction::getFunction(), llvm::SelectionDAG::getIntPtrConstant(), llvm::SelectionDAG::getLoad(), llvm::SelectionDAG::getMachineFunction(), llvm::MemSDNode::getMemoryVT(), llvm::SDValue::getNode(), llvm::SelectionDAG::getNode(), llvm::SDNode::getNumOperands(), llvm::SDNode::getOpcode(), llvm::SDNode::getOperand(), llvm::MemSDNode::getPointerInfo(), llvm::TargetLoweringBase::getPointerTy(), llvm::EVT::getScalarType(), llvm::MVT::getSizeInBits(), llvm::EVT::getSizeInBits(), llvm::SelectionDAG::getStore(), llvm::SelectionDAG::getTarget(), llvm::SelectionDAG::getTargetLoweringInfo(), llvm::SelectionDAG::getUNDEF(), llvm::SDValue::getValue(), llvm::StoreSDNode::getValue(), llvm::SDValue::getValueType(), llvm::EVT::getVectorElementType(), llvm::SelectionDAG::getVectorShuffle(), llvm::EVT::getVectorVT(), llvm::MachinePointerInfo::getWithOffset(), llvm::X86Subtarget::hasInt256(), llvm::SDNode::hasNUsesOfValue(), llvm::SDValue::hasOneUse(), llvm::X86Subtarget::hasSSE2(), llvm::MVT::i32, llvm::MVT::i64, llvm::MVT::i8, llvm::X86Subtarget::is64Bit(), llvm::MemSDNode::isInvariant(), llvm::MemSDNode::isNonTemporal(), llvm::ISD::isNormalLoad(), llvm::isPowerOf2_32(), llvm::StoreSDNode::isTruncatingStore(), llvm::TargetLoweringBase::isTypeLegal(), llvm::MemSDNode::isVolatile(), llvm::MVT::LAST_INTEGER_VALUETYPE, llvm::MinAlign(), N, llvm::Attribute::NoImplicitFloat, llvm::TargetMachine::Options, llvm::MVT::Other, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::SmallVectorTemplateCommon< T >::size(), llvm::ISD::TokenFactor, and llvm::TargetOptions::UseSoftFloat.

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformSubCombine ( SDNode N,
SelectionDAG DAG,
const X86Subtarget Subtarget 
)
static
static SDValue PerformTruncateCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static

PerformTruncateCombine - Converts truncate operation to a sequence of vector shuffle operations. It is possible when we truncate 256-bit vector to 128-bit vector

Definition at line 16256 of file X86ISelLowering.cpp.

Referenced by llvm::X86TargetLowering::PerformDAGCombine().

static SDValue PerformVZEXT_MOVLCombine ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue performVZEXTCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformXorCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PerformZExtCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static SDValue PromoteSplat ( ShuffleVectorSDNode SV,
SelectionDAG DAG 
)
static
static SDValue PromoteSplati8i16 ( SDValue  V,
SelectionDAG DAG,
int &  EltNo 
)
static
static void ReplaceATOMIC_BINARY_64 ( SDNode Node,
SmallVectorImpl< SDValue > &  Results,
SelectionDAG DAG,
unsigned  NewOp 
)
static
static void ReplaceATOMIC_LOAD ( SDNode Node,
SmallVectorImpl< SDValue > &  Results,
SelectionDAG DAG 
)
static
static SDValue RewriteAsNarrowerShuffle ( ShuffleVectorSDNode SVOp,
SelectionDAG DAG 
)
static

RewriteAsNarrowerShuffle - Try rewriting v8i16 and v16i8 shuffles as 4 wide ones, or rewriting v4i32 / v4f32 as 2 wide ones if possible. This can be done when every pair / quad of shuffle mask elements point to elements in the right sequence. e.g. vector_shuffle X, Y, <2, 3, | 10, 11, | 0, 1, | 14, 15>

Definition at line 6662 of file X86ISelLowering.cpp.

References llvm::ISD::BITCAST, llvm::ShuffleVectorSDNode::getMaskElt(), llvm::SelectionDAG::getNode(), llvm::SDNode::getOperand(), llvm::SDNode::getSimpleValueType(), llvm::MVT::getVectorNumElements(), llvm::SelectionDAG::getVectorShuffle(), llvm_unreachable, llvm::SmallVectorTemplateBase< T, isPodLike< T >::value >::push_back(), llvm::MVT::SimpleTy, llvm::MVT::v16i16, llvm::MVT::v16i8, llvm::NVPTX::PTXLdStInstCode::V2, llvm::MVT::v2f64, llvm::MVT::v2i64, llvm::MVT::v32i8, llvm::MVT::v4f32, llvm::MVT::v4i32, llvm::MVT::v8i16, and llvm::MVT::v8i32.

Referenced by NormalizeVectorShuffle().

static bool ShouldXformToMOVHLPS ( ArrayRef< int >  Mask,
MVT  VT 
)
static

ShouldXformToMOVHLPS - Return true if the node should be transformed to match movhlps. The lower half elements should come from upper half of V1 (and in order), and the upper half elements should come from the upper half of V2 (and in order).

Definition at line 4590 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), and isUndefOrEqual().

static bool ShouldXformToMOVLP ( SDNode V1,
SDNode V2,
ArrayRef< int >  Mask,
MVT  VT 
)
static

ShouldXformToMOVLP{S|D} - Return true if the node should be transformed to match movlp{s|d}. The lower half elements should come from lower half of V1 (and in order), and the upper half elements should come from the upper half of V2 (and in order). And since V1 will become the source of the MOVLP, it must be either a vector load or a scalar load to vector.

Definition at line 4646 of file X86ISelLowering.cpp.

References llvm::MVT::getVectorNumElements(), llvm::MVT::is128BitVector(), llvm::ISD::isNON_EXTLoad(), isScalarLoadToVector(), isUndefOrEqual(), and WillBeConstantPoolLoad().

STATISTIC ( NumTailCalls  ,
"Number of tail calls"   
)
static unsigned TranslateX86CC ( ISD::CondCode  SetCCOpcode,
bool  isFP,
SDValue LHS,
SDValue RHS,
SelectionDAG DAG 
)
static
static int translateX86FSETCC ( ISD::CondCode  SetCCOpcode,
SDValue Op0,
SDValue Op1 
)
static
static SDValue WidenMaskArithmetic ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const X86Subtarget Subtarget 
)
static
static bool WillBeConstantPoolLoad ( SDNode N)
static
static SDValue XFormVExtractWithShuffleIntoLoad ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI 
)
static