LLVM API Documentation

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Macros | Functions | Variables
MipsSEISelLowering.cpp File Reference
#include "MipsSEISelLowering.h"
#include "MipsRegisterInfo.h"
#include "MipsTargetMachine.h"
#include "llvm/CodeGen/MachineInstrBuilder.h"
#include "llvm/CodeGen/MachineRegisterInfo.h"
#include "llvm/IR/Intrinsics.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/raw_ostream.h"
#include "llvm/Target/TargetInstrInfo.h"
Include dependency graph for MipsSEISelLowering.cpp:

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "mips-isel"
 

Functions

static bool selectMADD (SDNode *ADDENode, SelectionDAG *CurDAG)
 
static bool selectMSUB (SDNode *SUBENode, SelectionDAG *CurDAG)
 
static SDValue performADDECombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const MipsSubtarget *Subtarget)
 
static SDValue performANDCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const MipsSubtarget *Subtarget)
 
static bool isVSplat (SDValue N, APInt &Imm, bool IsLittleEndian)
 
static bool isVectorAllOnes (SDValue N)
 
static bool isBitwiseInverse (SDValue N, SDValue OfNode)
 
static SDValue performORCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const MipsSubtarget *Subtarget)
 
static SDValue performSUBECombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const MipsSubtarget *Subtarget)
 
static SDValue genConstMult (SDValue X, uint64_t C, SDLoc DL, EVT VT, EVT ShiftTy, SelectionDAG &DAG)
 
static SDValue performMULCombine (SDNode *N, SelectionDAG &DAG, const TargetLowering::DAGCombinerInfo &DCI, const MipsSETargetLowering *TL)
 
static SDValue performDSPShiftCombine (unsigned Opc, SDNode *N, EVT Ty, SelectionDAG &DAG, const MipsSubtarget *Subtarget)
 
static SDValue performSHLCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const MipsSubtarget *Subtarget)
 
static SDValue performSRACombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const MipsSubtarget *Subtarget)
 
static SDValue performSRLCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const MipsSubtarget *Subtarget)
 
static bool isLegalDSPCondCode (EVT Ty, ISD::CondCode CC)
 
static SDValue performSETCCCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue performVSELECTCombine (SDNode *N, SelectionDAG &DAG)
 
static SDValue performXORCombine (SDNode *N, SelectionDAG &DAG, const MipsSubtarget *Subtarget)
 
static SDValue initAccumulator (SDValue In, SDLoc DL, SelectionDAG &DAG)
 
static SDValue extractLOHI (SDValue Op, SDLoc DL, SelectionDAG &DAG)
 
static SDValue lowerDSPIntr (SDValue Op, SelectionDAG &DAG, unsigned Opc)
 
static SDValue lowerMSACopyIntr (SDValue Op, SelectionDAG &DAG, unsigned Opc)
 
static SDValue lowerMSASplatZExt (SDValue Op, unsigned OpNr, SelectionDAG &DAG)
 
static SDValue lowerMSASplatImm (SDValue Op, unsigned ImmOp, SelectionDAG &DAG)
 
static SDValue getBuildVectorSplat (EVT VecTy, SDValue SplatValue, bool BigEndian, SelectionDAG &DAG)
 
static SDValue lowerMSABinaryBitImmIntr (SDValue Op, SelectionDAG &DAG, unsigned Opc, SDValue Imm, bool BigEndian)
 
static SDValue lowerMSABitClear (SDValue Op, SelectionDAG &DAG)
 
static SDValue lowerMSABitClearImm (SDValue Op, SelectionDAG &DAG)
 
static SDValue lowerMSALoadIntr (SDValue Op, SelectionDAG &DAG, unsigned Intr)
 
static SDValue lowerMSAStoreIntr (SDValue Op, SelectionDAG &DAG, unsigned Intr)
 
static bool isSplatVector (const BuildVectorSDNode *N)
 Check if the given BuildVectorSDNode is a splat. This method currently relies on DAG nodes being reused when equivalent, so it's possible for this to return false even when isConstantSplat returns true. More...
 
static bool isConstantOrUndef (const SDValue Op)
 
static bool isConstantOrUndefBUILD_VECTOR (const BuildVectorSDNode *Op)
 
static SDValue lowerVECTOR_SHUFFLE_SHF (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 
static SDValue lowerVECTOR_SHUFFLE_ILVEV (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 
static SDValue lowerVECTOR_SHUFFLE_ILVOD (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 
static SDValue lowerVECTOR_SHUFFLE_ILVL (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 
static SDValue lowerVECTOR_SHUFFLE_ILVR (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 
static SDValue lowerVECTOR_SHUFFLE_PCKEV (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 
static SDValue lowerVECTOR_SHUFFLE_PCKOD (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 
static SDValue lowerVECTOR_SHUFFLE_VSHF (SDValue Op, EVT ResTy, SmallVector< int, 16 > Indices, SelectionDAG &DAG)
 

Variables

static cl::opt< boolEnableMipsTailCalls ("enable-mips-tail-calls", cl::Hidden, cl::desc("MIPS: Enable tail calls."), cl::init(false))
 
static cl::opt< boolNoDPLoadStore ("mno-ldc1-sdc1", cl::init(false), cl::desc("Expand double precision loads and ""stores to their single precision ""counterparts"))
 

Macro Definition Documentation

#define DEBUG_TYPE   "mips-isel"

Definition at line 13 of file MipsSEISelLowering.cpp.

Function Documentation

static SDValue extractLOHI ( SDValue  Op,
SDLoc  DL,
SelectionDAG DAG 
)
static
static SDValue genConstMult ( SDValue  X,
uint64_t  C,
SDLoc  DL,
EVT  VT,
EVT  ShiftTy,
SelectionDAG DAG 
)
static
static SDValue getBuildVectorSplat ( EVT  VecTy,
SDValue  SplatValue,
bool  BigEndian,
SelectionDAG DAG 
)
static
static SDValue initAccumulator ( SDValue  In,
SDLoc  DL,
SelectionDAG DAG 
)
static
static bool isBitwiseInverse ( SDValue  N,
SDValue  OfNode 
)
static
static bool isConstantOrUndef ( const SDValue  Op)
static

Definition at line 2162 of file MipsSEISelLowering.cpp.

References llvm::SDNode::getOpcode(), and llvm::ISD::UNDEF.

Referenced by isConstantOrUndefBUILD_VECTOR().

static bool isConstantOrUndefBUILD_VECTOR ( const BuildVectorSDNode Op)
static
static bool isLegalDSPCondCode ( EVT  Ty,
ISD::CondCode  CC 
)
static
static bool isSplatVector ( const BuildVectorSDNode N)
static

Check if the given BuildVectorSDNode is a splat. This method currently relies on DAG nodes being reused when equivalent, so it's possible for this to return false even when isConstantSplat returns true.

Definition at line 2121 of file MipsSEISelLowering.cpp.

References llvm::SDNode::getNumOperands(), and llvm::SDNode::getOperand().

static bool isVectorAllOnes ( SDValue  N)
static
static bool isVSplat ( SDValue  N,
APInt Imm,
bool  IsLittleEndian 
)
static
static SDValue lowerDSPIntr ( SDValue  Op,
SelectionDAG DAG,
unsigned  Opc 
)
static
static SDValue lowerMSABinaryBitImmIntr ( SDValue  Op,
SelectionDAG DAG,
unsigned  Opc,
SDValue  Imm,
bool  BigEndian 
)
static
static SDValue lowerMSABitClear ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue lowerMSABitClearImm ( SDValue  Op,
SelectionDAG DAG 
)
static
static SDValue lowerMSACopyIntr ( SDValue  Op,
SelectionDAG DAG,
unsigned  Opc 
)
static
static SDValue lowerMSALoadIntr ( SDValue  Op,
SelectionDAG DAG,
unsigned  Intr 
)
static
static SDValue lowerMSASplatImm ( SDValue  Op,
unsigned  ImmOp,
SelectionDAG DAG 
)
static
static SDValue lowerMSASplatZExt ( SDValue  Op,
unsigned  OpNr,
SelectionDAG DAG 
)
static
static SDValue lowerMSAStoreIntr ( SDValue  Op,
SelectionDAG DAG,
unsigned  Intr 
)
static
static SDValue lowerVECTOR_SHUFFLE_ILVEV ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue lowerVECTOR_SHUFFLE_ILVL ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue lowerVECTOR_SHUFFLE_ILVOD ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue lowerVECTOR_SHUFFLE_ILVR ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue lowerVECTOR_SHUFFLE_PCKEV ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue lowerVECTOR_SHUFFLE_PCKOD ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue lowerVECTOR_SHUFFLE_SHF ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue lowerVECTOR_SHUFFLE_VSHF ( SDValue  Op,
EVT  ResTy,
SmallVector< int, 16 >  Indices,
SelectionDAG DAG 
)
static
static SDValue performADDECombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const MipsSubtarget Subtarget 
)
static
static SDValue performANDCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const MipsSubtarget Subtarget 
)
static
static SDValue performDSPShiftCombine ( unsigned  Opc,
SDNode N,
EVT  Ty,
SelectionDAG DAG,
const MipsSubtarget Subtarget 
)
static
static SDValue performMULCombine ( SDNode N,
SelectionDAG DAG,
const TargetLowering::DAGCombinerInfo DCI,
const MipsSETargetLowering TL 
)
static
static SDValue performORCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const MipsSubtarget Subtarget 
)
static
static SDValue performSETCCCombine ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue performSHLCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const MipsSubtarget Subtarget 
)
static
static SDValue performSRACombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const MipsSubtarget Subtarget 
)
static
static SDValue performSRLCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const MipsSubtarget Subtarget 
)
static
static SDValue performSUBECombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const MipsSubtarget Subtarget 
)
static
static SDValue performVSELECTCombine ( SDNode N,
SelectionDAG DAG 
)
static
static SDValue performXORCombine ( SDNode N,
SelectionDAG DAG,
const MipsSubtarget Subtarget 
)
static
static bool selectMADD ( SDNode ADDENode,
SelectionDAG CurDAG 
)
static
static bool selectMSUB ( SDNode SUBENode,
SelectionDAG CurDAG 
)
static

Variable Documentation

cl::opt<bool> EnableMipsTailCalls("enable-mips-tail-calls", cl::Hidden, cl::desc("MIPS: Enable tail calls."), cl::init(false))
static
cl::opt<bool> NoDPLoadStore("mno-ldc1-sdc1", cl::init(false), cl::desc("Expand double precision loads and ""stores to their single precision ""counterparts"))
static