LLVM 20.0.0git
Macros | Functions | Variables
LoongArchISelLowering.cpp File Reference
#include "LoongArchISelLowering.h"
#include "LoongArch.h"
#include "LoongArchMachineFunctionInfo.h"
#include "LoongArchRegisterInfo.h"
#include "LoongArchSubtarget.h"
#include "MCTargetDesc/LoongArchBaseInfo.h"
#include "MCTargetDesc/LoongArchMCTargetDesc.h"
#include "llvm/ADT/Statistic.h"
#include "llvm/ADT/StringExtras.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/CodeGen/RuntimeLibcallUtil.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/IR/IRBuilder.h"
#include "llvm/IR/IntrinsicInst.h"
#include "llvm/IR/IntrinsicsLoongArch.h"
#include "llvm/Support/CodeGen.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/KnownBits.h"
#include "llvm/Support/MathExtras.h"
#include "LoongArchGenAsmMatcher.inc"

Go to the source code of this file.

Macros

#define DEBUG_TYPE   "loongarch-isel-lowering"
 
#define IOCSRRD_CASE(NAME, NODE)
 
#define IOCSRWR_CASE(NAME, NODE)
 
#define ASRT_LE_GT_CASE(NAME)
 
#define CRC_CASE_EXT_BINARYOP(NAME, NODE)
 
#define CRC_CASE_EXT_UNARYOP(NAME, NODE)
 
#define CSR_CASE(ID)
 
#define IOCSRRD_CASE(NAME, NODE)
 
#define NODE_NAME_CASE(node)
 
#define GET_REGISTER_MATCHER
 

Functions

 STATISTIC (NumTailCalls, "Number of tail calls")
 
template<typename ValType >
static bool fitsRegularPattern (typename SmallVectorImpl< ValType >::const_iterator Begin, unsigned CheckStride, typename SmallVectorImpl< ValType >::const_iterator End, ValType ExpectedIndex, unsigned ExpectedIndexStride)
 Determine whether a range fits a regular pattern of values.
 
static SDValue lowerVECTOR_SHUFFLE_VREPLVEI (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VREPLVEI (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VSHUF4I (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VSHUF4I (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VPACKEV (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VPACKEV (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VPACKOD (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VPACKOD (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VILVH (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VILVH (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VILVL (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VILVL (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VPICKEV (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VPICKEV (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VPICKOD (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VPICKOD (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_VSHUF (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into VSHUF.
 
static SDValue lower128BitShuffle (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Dispatching routine to lower various 128-bit LoongArch vector shuffles.
 
static SDValue lowerVECTOR_SHUFFLE_XVREPLVEI (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVREPLVEI (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVSHUF4I (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVSHUF4I (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVPACKEV (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVPACKEV (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVPACKOD (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVPACKOD (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVILVH (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVILVH (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVILVL (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVILVL (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVPICKEV (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVPICKEV (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVPICKOD (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVPICKOD (if possible).
 
static SDValue lowerVECTOR_SHUFFLE_XVSHUF (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Lower VECTOR_SHUFFLE into XVSHUF (if possible).
 
static void canonicalizeShuffleVectorByLane (const SDLoc &DL, MutableArrayRef< int > Mask, MVT VT, SDValue &V1, SDValue &V2, SelectionDAG &DAG)
 Shuffle vectors by lane to generate more optimized instructions.
 
static SDValue lower256BitShuffle (const SDLoc &DL, ArrayRef< int > Mask, MVT VT, SDValue V1, SDValue V2, SelectionDAG &DAG)
 Dispatching routine to lower various 256-bit LoongArch vector shuffles.
 
static bool isConstantOrUndef (const SDValue Op)
 
static bool isConstantOrUndefBUILD_VECTOR (const BuildVectorSDNode *Op)
 
static SDValue getTargetNode (GlobalAddressSDNode *N, SDLoc DL, EVT Ty, SelectionDAG &DAG, unsigned Flags)
 
static SDValue getTargetNode (BlockAddressSDNode *N, SDLoc DL, EVT Ty, SelectionDAG &DAG, unsigned Flags)
 
static SDValue getTargetNode (ConstantPoolSDNode *N, SDLoc DL, EVT Ty, SelectionDAG &DAG, unsigned Flags)
 
static SDValue getTargetNode (JumpTableSDNode *N, SDLoc DL, EVT Ty, SelectionDAG &DAG, unsigned Flags)
 
template<unsigned N>
static SDValue checkIntrinsicImmArg (SDValue Op, unsigned ImmOp, SelectionDAG &DAG, bool IsSigned=false)
 
static SDValue emitIntrinsicWithChainErrorMessage (SDValue Op, StringRef ErrorMsg, SelectionDAG &DAG)
 
static SDValue emitIntrinsicErrorMessage (SDValue Op, StringRef ErrorMsg, SelectionDAG &DAG)
 
static LoongArchISD::NodeType getLoongArchWOpcode (unsigned Opcode)
 
static SDValue customLegalizeToWOp (SDNode *N, SelectionDAG &DAG, int NumOp, unsigned ExtOpc=ISD::ANY_EXTEND)
 
static SDValue customLegalizeToWOpWithSExt (SDNode *N, SelectionDAG &DAG)
 
static void emitErrorAndReplaceIntrinsicResults (SDNode *N, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG, StringRef ErrorMsg, bool WithChain=true)
 
template<unsigned N>
static void replaceVPICKVE2GRResults (SDNode *Node, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG, const LoongArchSubtarget &Subtarget, unsigned ResOp)
 
static void replaceVecCondBranchResults (SDNode *N, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG, const LoongArchSubtarget &Subtarget, unsigned ResOp)
 
static void replaceINTRINSIC_WO_CHAINResults (SDNode *N, SmallVectorImpl< SDValue > &Results, SelectionDAG &DAG, const LoongArchSubtarget &Subtarget)
 
static SDValue performANDCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const LoongArchSubtarget &Subtarget)
 
static SDValue performSRLCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const LoongArchSubtarget &Subtarget)
 
static SDValue performORCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const LoongArchSubtarget &Subtarget)
 
static bool checkValueWidth (SDValue V, ISD::LoadExtType &ExtType)
 
static SDValue performSETCCCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const LoongArchSubtarget &Subtarget)
 
static SDValue performBITREV_WCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const LoongArchSubtarget &Subtarget)
 
template<unsigned N>
static SDValue legalizeIntrinsicImmArg (SDNode *Node, unsigned ImmOp, SelectionDAG &DAG, const LoongArchSubtarget &Subtarget, bool IsSigned=false)
 
template<unsigned N>
static SDValue lowerVectorSplatImm (SDNode *Node, unsigned ImmOp, SelectionDAG &DAG, bool IsSigned=false)
 
static SDValue truncateVecElts (SDNode *Node, SelectionDAG &DAG)
 
static SDValue lowerVectorBitClear (SDNode *Node, SelectionDAG &DAG)
 
template<unsigned N>
static SDValue lowerVectorBitClearImm (SDNode *Node, SelectionDAG &DAG)
 
template<unsigned N>
static SDValue lowerVectorBitSetImm (SDNode *Node, SelectionDAG &DAG)
 
template<unsigned N>
static SDValue lowerVectorBitRevImm (SDNode *Node, SelectionDAG &DAG)
 
static SDValue performINTRINSIC_WO_CHAINCombine (SDNode *N, SelectionDAG &DAG, TargetLowering::DAGCombinerInfo &DCI, const LoongArchSubtarget &Subtarget)
 
static MachineBasicBlockinsertDivByZeroTrap (MachineInstr &MI, MachineBasicBlock *MBB)
 
static MachineBasicBlockemitVecCondBranchPseudo (MachineInstr &MI, MachineBasicBlock *BB, const LoongArchSubtarget &Subtarget)
 
static MachineBasicBlockemitPseudoXVINSGR2VR (MachineInstr &MI, MachineBasicBlock *BB, const LoongArchSubtarget &Subtarget)
 
static MachineBasicBlockemitPseudoCTPOP (MachineInstr &MI, MachineBasicBlock *BB, const LoongArchSubtarget &Subtarget)
 
static bool CC_LoongArchAssign2GRLen (unsigned GRLen, CCState &State, CCValAssign VA1, ISD::ArgFlagsTy ArgFlags1, unsigned ValNo2, MVT ValVT2, MVT LocVT2, ISD::ArgFlagsTy ArgFlags2)
 
static bool CC_LoongArch (const DataLayout &DL, LoongArchABI::ABI ABI, unsigned ValNo, MVT ValVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, CCState &State, bool IsFixed, bool IsRet, Type *OrigTy)
 
static SDValue convertLocVTToValVT (SelectionDAG &DAG, SDValue Val, const CCValAssign &VA, const SDLoc &DL)
 
static SDValue unpackFromRegLoc (SelectionDAG &DAG, SDValue Chain, const CCValAssign &VA, const SDLoc &DL, const ISD::InputArg &In, const LoongArchTargetLowering &TLI)
 
static SDValue unpackFromMemLoc (SelectionDAG &DAG, SDValue Chain, const CCValAssign &VA, const SDLoc &DL)
 
static SDValue convertValVTToLocVT (SelectionDAG &DAG, SDValue Val, const CCValAssign &VA, const SDLoc &DL)
 
static bool CC_LoongArch_GHC (unsigned ValNo, MVT ValVT, MVT LocVT, CCValAssign::LocInfo LocInfo, ISD::ArgFlagsTy ArgFlags, CCState &State)
 
static Align getPrefTypeAlign (EVT VT, SelectionDAG &DAG)
 
static Intrinsic::ID getIntrinsicForMaskedAtomicRMWBinOp (unsigned GRLen, AtomicRMWInst::BinOp BinOp)
 
static int getEstimateRefinementSteps (EVT VT, const LoongArchSubtarget &Subtarget)
 

Variables

static cl::opt< boolZeroDivCheck ("loongarch-check-zero-division", cl::Hidden, cl::desc("Trap on integer division by zero."), cl::init(false))
 
const MCPhysReg ArgGPRs []
 
const MCPhysReg ArgFPR32s []
 
const MCPhysReg ArgFPR64s []
 
const MCPhysReg ArgVRs []
 
const MCPhysReg ArgXRs []
 

Macro Definition Documentation

◆ ASRT_LE_GT_CASE

#define ASRT_LE_GT_CASE (   NAME)
Value:
case Intrinsic::loongarch_##NAME: { \
return !Subtarget.is64Bit() \
? emitIntrinsicErrorMessage(Op, ErrorMsgReqLA64, DAG) \
: Op; \
}
static SDValue emitIntrinsicErrorMessage(SDValue Op, StringRef ErrorMsg, SelectionDAG &DAG)
This class represents an Operation in the Expression.
DWARFExpression::Operation Op

◆ CRC_CASE_EXT_BINARYOP

#define CRC_CASE_EXT_BINARYOP (   NAME,
  NODE 
)
Value:
case Intrinsic::loongarch_##NAME: { \
SDValue NODE = DAG.getNode( \
LoongArchISD::NODE, DL, {MVT::i64, MVT::Other}, \
{Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2), \
DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, N->getOperand(3))}); \
Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, VT, NODE.getValue(0))); \
Results.push_back(NODE.getValue(1)); \
break; \
}
MachineBasicBlock MachineBasicBlock::iterator DebugLoc DL
Function Alias Analysis Results
#define NODE(NodeKind)
Unlike LLVM values, Selection DAG nodes may return multiple values as the result of a computation.
@ ANY_EXTEND
ANY_EXTEND - Used for integer types. The high bits are undefined.
Definition: ISDOpcodes.h:814
@ TRUNCATE
TRUNCATE - Completely drop the high bits.
Definition: ISDOpcodes.h:817
#define N

◆ CRC_CASE_EXT_UNARYOP

#define CRC_CASE_EXT_UNARYOP (   NAME,
  NODE 
)
Value:
case Intrinsic::loongarch_##NAME: { \
SDValue NODE = DAG.getNode( \
LoongArchISD::NODE, DL, {MVT::i64, MVT::Other}, \
{Chain, Op2, \
DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, N->getOperand(3))}); \
Results.push_back(DAG.getNode(ISD::TRUNCATE, DL, VT, NODE.getValue(0))); \
Results.push_back(NODE.getValue(1)); \
break; \
}

◆ CSR_CASE

#define CSR_CASE (   ID)
Value:
case Intrinsic::loongarch_##ID: { \
if (!Subtarget.is64Bit()) \
emitErrorAndReplaceIntrinsicResults(N, Results, DAG, ErrorMsgReqLA64); \
break; \
}
unsigned ID
LLVM IR allows to use arbitrary numbers as calling convention identifiers.
Definition: CallingConv.h:24

◆ DEBUG_TYPE

#define DEBUG_TYPE   "loongarch-isel-lowering"

Definition at line 37 of file LoongArchISelLowering.cpp.

◆ GET_REGISTER_MATCHER

#define GET_REGISTER_MATCHER

Definition at line 6305 of file LoongArchISelLowering.cpp.

◆ IOCSRRD_CASE [1/2]

#define IOCSRRD_CASE (   NAME,
  NODE 
)
Value:
case Intrinsic::loongarch_##NAME: { \
return DAG.getNode(LoongArchISD::NODE, DL, {GRLenVT, MVT::Other}, \
{Chain, Op.getOperand(2)}); \
}

◆ IOCSRRD_CASE [2/2]

#define IOCSRRD_CASE (   NAME,
  NODE 
)
Value:
case Intrinsic::loongarch_##NAME: { \
SDValue IOCSRRDResults = \
DAG.getNode(LoongArchISD::NODE, DL, {MVT::i64, MVT::Other}, \
{Chain, DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2)}); \
Results.push_back( \
DAG.getNode(ISD::TRUNCATE, DL, VT, IOCSRRDResults.getValue(0))); \
Results.push_back(IOCSRRDResults.getValue(1)); \
break; \
}
SDNode * getNode() const
get the SDNode which holds the desired result
SDValue getValue(unsigned R) const

◆ IOCSRWR_CASE

#define IOCSRWR_CASE (   NAME,
  NODE 
)
Value:
case Intrinsic::loongarch_##NAME: { \
SDValue Op3 = Op.getOperand(3); \
return Subtarget.is64Bit() \
? DAG.getNode(LoongArchISD::NODE, DL, MVT::Other, Chain, \
DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op2), \
DAG.getNode(ISD::ANY_EXTEND, DL, MVT::i64, Op3)) \
: DAG.getNode(LoongArchISD::NODE, DL, MVT::Other, Chain, Op2, \
Op3); \
}

◆ NODE_NAME_CASE

#define NODE_NAME_CASE (   node)
Value:
case LoongArchISD::node: \
return "LoongArchISD::" #node;

Function Documentation

◆ canonicalizeShuffleVectorByLane()

static void canonicalizeShuffleVectorByLane ( const SDLoc DL,
MutableArrayRef< int >  Mask,
MVT  VT,
SDValue V1,
SDValue V2,
SelectionDAG DAG 
)
static

Shuffle vectors by lane to generate more optimized instructions.

256-bit shuffles are always considered as 2-lane 128-bit shuffles.

Therefore, except for the following four cases, other cases are regarded as cross-lane shuffles, where optimization is relatively limited.

  • Shuffle high, low lanes of two inputs vector <0, 1, 2, 3> + <4, 5, 6, 7> — <0, 5, 3, 6>
  • Shuffle low, high lanes of two inputs vector <0, 1, 2, 3> + <4, 5, 6, 7> — <3, 6, 0, 5>
  • Shuffle low, low lanes of two inputs vector <0, 1, 2, 3> + <4, 5, 6, 7> — <3, 6, 3, 6>
  • Shuffle high, high lanes of two inputs vector <0, 1, 2, 3> + <4, 5, 6, 7> — <0, 5, 0, 5>

The first case is the closest to LoongArch instructions and the other cases need to be converted to it for processing.

This function may modify V1, V2 and Mask

Definition at line 1217 of file LoongArchISelLowering.cpp.

References DL, llvm::SelectionDAG::getBitcast(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::None, and llvm::LoongArchISD::XVPERMI.

Referenced by lower256BitShuffle().

◆ CC_LoongArch()

static bool CC_LoongArch ( const DataLayout DL,
LoongArchABI::ABI  ABI,
unsigned  ValNo,
MVT  ValVT,
CCValAssign::LocInfo  LocInfo,
ISD::ArgFlagsTy  ArgFlags,
CCState State,
bool  IsFixed,
bool  IsRet,
Type OrigTy 
)
static

◆ CC_LoongArch_GHC()

static bool CC_LoongArch_GHC ( unsigned  ValNo,
MVT  ValVT,
MVT  LocVT,
CCValAssign::LocInfo  LocInfo,
ISD::ArgFlagsTy  ArgFlags,
CCState State 
)
static

◆ CC_LoongArchAssign2GRLen()

static bool CC_LoongArchAssign2GRLen ( unsigned  GRLen,
CCState State,
CCValAssign  VA1,
ISD::ArgFlagsTy  ArgFlags1,
unsigned  ValNo2,
MVT  ValVT2,
MVT  LocVT2,
ISD::ArgFlagsTy  ArgFlags2 
)
static

◆ checkIntrinsicImmArg()

template<unsigned N>
static SDValue checkIntrinsicImmArg ( SDValue  Op,
unsigned  ImmOp,
SelectionDAG DAG,
bool  IsSigned = false 
)
static

◆ checkValueWidth()

static bool checkValueWidth ( SDValue  V,
ISD::LoadExtType ExtType 
)
static

◆ convertLocVTToValVT()

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

◆ convertValVTToLocVT()

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

◆ customLegalizeToWOp()

static SDValue customLegalizeToWOp ( SDNode N,
SelectionDAG DAG,
int  NumOp,
unsigned  ExtOpc = ISD::ANY_EXTEND 
)
static

◆ customLegalizeToWOpWithSExt()

static SDValue customLegalizeToWOpWithSExt ( SDNode N,
SelectionDAG DAG 
)
static

◆ emitErrorAndReplaceIntrinsicResults()

static void emitErrorAndReplaceIntrinsicResults ( SDNode N,
SmallVectorImpl< SDValue > &  Results,
SelectionDAG DAG,
StringRef  ErrorMsg,
bool  WithChain = true 
)
static

◆ emitIntrinsicErrorMessage()

static SDValue emitIntrinsicErrorMessage ( SDValue  Op,
StringRef  ErrorMsg,
SelectionDAG DAG 
)
static

◆ emitIntrinsicWithChainErrorMessage()

static SDValue emitIntrinsicWithChainErrorMessage ( SDValue  Op,
StringRef  ErrorMsg,
SelectionDAG DAG 
)
static

◆ emitPseudoCTPOP()

static MachineBasicBlock * emitPseudoCTPOP ( MachineInstr MI,
MachineBasicBlock BB,
const LoongArchSubtarget Subtarget 
)
static

◆ emitPseudoXVINSGR2VR()

static MachineBasicBlock * emitPseudoXVINSGR2VR ( MachineInstr MI,
MachineBasicBlock BB,
const LoongArchSubtarget Subtarget 
)
static

◆ emitVecCondBranchPseudo()

static MachineBasicBlock * emitVecCondBranchPseudo ( MachineInstr MI,
MachineBasicBlock BB,
const LoongArchSubtarget Subtarget 
)
static

◆ fitsRegularPattern()

template<typename ValType >
static bool fitsRegularPattern ( typename SmallVectorImpl< ValType >::const_iterator  Begin,
unsigned  CheckStride,
typename SmallVectorImpl< ValType >::const_iterator  End,
ValType  ExpectedIndex,
unsigned  ExpectedIndexStride 
)
static

Determine whether a range fits a regular pattern of values.

This function accounts for the possibility of jumping over the End iterator.

Definition at line 501 of file LoongArchISelLowering.cpp.

References End, and I.

◆ getEstimateRefinementSteps()

static int getEstimateRefinementSteps ( EVT  VT,
const LoongArchSubtarget Subtarget 
)
static

◆ getIntrinsicForMaskedAtomicRMWBinOp()

static Intrinsic::ID getIntrinsicForMaskedAtomicRMWBinOp ( unsigned  GRLen,
AtomicRMWInst::BinOp  BinOp 
)
static

◆ getLoongArchWOpcode()

static LoongArchISD::NodeType getLoongArchWOpcode ( unsigned  Opcode)
static

◆ getPrefTypeAlign()

static Align getPrefTypeAlign ( EVT  VT,
SelectionDAG DAG 
)
static

◆ getTargetNode() [1/4]

static SDValue getTargetNode ( BlockAddressSDNode N,
SDLoc  DL,
EVT  Ty,
SelectionDAG DAG,
unsigned  Flags 
)
static

Definition at line 1743 of file LoongArchISelLowering.cpp.

References llvm::SelectionDAG::getTargetBlockAddress(), and N.

◆ getTargetNode() [2/4]

static SDValue getTargetNode ( ConstantPoolSDNode N,
SDLoc  DL,
EVT  Ty,
SelectionDAG DAG,
unsigned  Flags 
)
static

Definition at line 1749 of file LoongArchISelLowering.cpp.

References llvm::SelectionDAG::getTargetConstantPool(), and N.

◆ getTargetNode() [3/4]

static SDValue getTargetNode ( GlobalAddressSDNode N,
SDLoc  DL,
EVT  Ty,
SelectionDAG DAG,
unsigned  Flags 
)
static

Definition at line 1738 of file LoongArchISelLowering.cpp.

References DL, llvm::SelectionDAG::getTargetGlobalAddress(), and N.

◆ getTargetNode() [4/4]

static SDValue getTargetNode ( JumpTableSDNode N,
SDLoc  DL,
EVT  Ty,
SelectionDAG DAG,
unsigned  Flags 
)
static

Definition at line 1755 of file LoongArchISelLowering.cpp.

References llvm::SelectionDAG::getTargetJumpTable(), and N.

◆ insertDivByZeroTrap()

static MachineBasicBlock * insertDivByZeroTrap ( MachineInstr MI,
MachineBasicBlock MBB 
)
static

◆ isConstantOrUndef()

static bool isConstantOrUndef ( const SDValue  Op)
static

◆ isConstantOrUndefBUILD_VECTOR()

static bool isConstantOrUndefBUILD_VECTOR ( const BuildVectorSDNode Op)
static

◆ legalizeIntrinsicImmArg()

template<unsigned N>
static SDValue legalizeIntrinsicImmArg ( SDNode Node,
unsigned  ImmOp,
SelectionDAG DAG,
const LoongArchSubtarget Subtarget,
bool  IsSigned = false 
)
static

◆ lower128BitShuffle()

static SDValue lower128BitShuffle ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Dispatching routine to lower various 128-bit LoongArch vector shuffles.

This routine breaks down the specific type of 128-bit shuffle and dispatches to the lowering routines accordingly.

Definition at line 895 of file LoongArchISelLowering.cpp.

References assert(), DL, llvm::SDValue::getSimpleValueType(), llvm::MVT::getVectorNumElements(), lowerVECTOR_SHUFFLE_VILVH(), lowerVECTOR_SHUFFLE_VILVL(), lowerVECTOR_SHUFFLE_VPACKEV(), lowerVECTOR_SHUFFLE_VPACKOD(), lowerVECTOR_SHUFFLE_VPICKEV(), lowerVECTOR_SHUFFLE_VPICKOD(), lowerVECTOR_SHUFFLE_VREPLVEI(), lowerVECTOR_SHUFFLE_VSHUF(), lowerVECTOR_SHUFFLE_VSHUF4I(), and llvm::MVT::SimpleTy.

Referenced by lowerVECTOR_SHUFFLE().

◆ lower256BitShuffle()

static SDValue lower256BitShuffle ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

◆ lowerVECTOR_SHUFFLE_VILVH()

static SDValue lowerVECTOR_SHUFFLE_VILVH ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VILVH (if possible).

VILVH interleaves consecutive elements from the left (highest-indexed) half of each vector.

It is possible to lower into VILVH when the mask consists of two of the following forms interleaved: <x, x+1, x+2, ...> <n+x, n+x+1, n+x+2, ...> where n is the number of elements in the vector and x is half n. For example: <x, x, x+1, x+1, x+2, x+2, ...> <x, n+x, x+1, n+x+1, x+2, n+x+2, ...>

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above forms.

Definition at line 715 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VILVH.

Referenced by lower128BitShuffle().

◆ lowerVECTOR_SHUFFLE_VILVL()

static SDValue lowerVECTOR_SHUFFLE_VILVL ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VILVL (if possible).

VILVL interleaves consecutive elements from the right (lowest-indexed) half of each vector.

It is possible to lower into VILVL when the mask consists of two of the following forms interleaved: <0, 1, 2, ...> <n, n+1, n+2, ...> where n is the number of elements in the vector. For example: <0, 0, 1, 1, 2, 2, ...> <0, n, 1, n+1, 2, n+2, ...>

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above forms.

Definition at line 758 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VILVL.

Referenced by lower128BitShuffle().

◆ lowerVECTOR_SHUFFLE_VPACKEV()

static SDValue lowerVECTOR_SHUFFLE_VPACKEV ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VPACKEV (if possible).

VPACKEV interleaves the even elements from each vector.

It is possible to lower into VPACKEV when the mask consists of two of the following forms interleaved: <0, 2, 4, ...> <n, n+2, n+4, ...> where n is the number of elements in the vector. For example: <0, 0, 2, 2, 4, 4, ...> <0, n, 2, n+2, 4, n+4, ...>

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above forms.

Definition at line 634 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VPACKEV.

Referenced by lower128BitShuffle(), and lowerVECTOR_SHUFFLE_XVPACKEV().

◆ lowerVECTOR_SHUFFLE_VPACKOD()

static SDValue lowerVECTOR_SHUFFLE_VPACKOD ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VPACKOD (if possible).

VPACKOD interleaves the odd elements from each vector.

It is possible to lower into VPACKOD when the mask consists of two of the following forms interleaved: <1, 3, 5, ...> <n+1, n+3, n+5, ...> where n is the number of elements in the vector. For example: <1, 1, 3, 3, 5, 5, ...> <1, n+1, 3, n+3, 5, n+5, ...>

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above forms.

Definition at line 674 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VPACKOD.

Referenced by lower128BitShuffle(), and lowerVECTOR_SHUFFLE_XVPACKOD().

◆ lowerVECTOR_SHUFFLE_VPICKEV()

static SDValue lowerVECTOR_SHUFFLE_VPICKEV ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VPICKEV (if possible).

VPICKEV copies the even elements of each vector into the result vector.

It is possible to lower into VPICKEV when the mask consists of two of the following forms concatenated: <0, 2, 4, ...> <n, n+2, n+4, ...> where n is the number of elements in the vector. For example: <0, 2, 4, ..., 0, 2, 4, ...> <0, 2, 4, ..., n, n+2, n+4, ...>

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above forms.

Definition at line 798 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VPICKEV.

Referenced by lower128BitShuffle().

◆ lowerVECTOR_SHUFFLE_VPICKOD()

static SDValue lowerVECTOR_SHUFFLE_VPICKOD ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VPICKOD (if possible).

VPICKOD copies the odd elements of each vector into the result vector.

It is possible to lower into VPICKOD when the mask consists of two of the following forms concatenated: <1, 3, 5, ...> <n+1, n+3, n+5, ...> where n is the number of elements in the vector. For example: <1, 3, 5, ..., 1, 3, 5, ...> <1, 3, 5, ..., n+1, n+3, n+5, ...>

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above forms.

Definition at line 840 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VPICKOD.

Referenced by lower128BitShuffle().

◆ lowerVECTOR_SHUFFLE_VREPLVEI()

static SDValue lowerVECTOR_SHUFFLE_VREPLVEI ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VREPLVEI (if possible).

VREPLVEI performs vector broadcast based on an element specified by an integer immediate, with its mask being similar to: <x, x, x, ...> where x is any valid index.

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above form.

Definition at line 529 of file LoongArchISelLowering.cpp.

References assert(), DL, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SelectionDAG::getUNDEF(), and llvm::LoongArchISD::VREPLVEI.

Referenced by lower128BitShuffle().

◆ lowerVECTOR_SHUFFLE_VSHUF()

static SDValue lowerVECTOR_SHUFFLE_VSHUF ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VSHUF.

This mostly consists of converting the shuffle mask into a BUILD_VECTOR and adding it as an operand to the resulting VSHUF.

Definition at line 870 of file LoongArchISelLowering.cpp.

References llvm::MVT::changeVectorElementTypeToInteger(), DL, llvm::SelectionDAG::getBuildVector(), llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::LoongArchISD::VSHUF.

Referenced by lower128BitShuffle().

◆ lowerVECTOR_SHUFFLE_VSHUF4I()

static SDValue lowerVECTOR_SHUFFLE_VSHUF4I ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into VSHUF4I (if possible).

VSHUF4I splits the vector into blocks of four elements, then shuffles these elements according to a <4 x i2> constant (encoded as an integer immediate).

It is therefore possible to lower into VSHUF4I when the mask takes the form: <a, b, c, d, a+4, b+4, c+4, d+4, a+8, b+8, c+8, d+8, ...> When undef's appear they are treated as if they were whatever value is necessary in order to fit the above forms.

For example: %2 = shufflevector <8 x i16> %0, <8 x i16> undef, <8 x i32> <i32 3, i32 2, i32 1, i32 0, i32 7, i32 6, i32 5, i32 4> is lowered to: (VSHUF4I_H $v0, $v1, 27) where the 27 comes from: 3 + (2 << 2) + (1 << 4) + (0 << 6)

Definition at line 571 of file LoongArchISelLowering.cpp.

References DL, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), Idx, and llvm::LoongArchISD::VSHUF4I.

Referenced by lower128BitShuffle(), and lowerVECTOR_SHUFFLE_XVSHUF4I().

◆ lowerVECTOR_SHUFFLE_XVILVH()

static SDValue lowerVECTOR_SHUFFLE_XVILVH ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVILVH (if possible).

Definition at line 1005 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VILVH.

Referenced by lower256BitShuffle().

◆ lowerVECTOR_SHUFFLE_XVILVL()

static SDValue lowerVECTOR_SHUFFLE_XVILVL ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVILVL (if possible).

Definition at line 1044 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VILVL.

Referenced by lower256BitShuffle().

◆ lowerVECTOR_SHUFFLE_XVPACKEV()

static SDValue lowerVECTOR_SHUFFLE_XVPACKEV ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVPACKEV (if possible).

Definition at line 991 of file LoongArchISelLowering.cpp.

References DL, and lowerVECTOR_SHUFFLE_VPACKEV().

Referenced by lower256BitShuffle().

◆ lowerVECTOR_SHUFFLE_XVPACKOD()

static SDValue lowerVECTOR_SHUFFLE_XVPACKOD ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVPACKOD (if possible).

Definition at line 998 of file LoongArchISelLowering.cpp.

References DL, and lowerVECTOR_SHUFFLE_VPACKOD().

Referenced by lower256BitShuffle().

◆ lowerVECTOR_SHUFFLE_XVPICKEV()

static SDValue lowerVECTOR_SHUFFLE_XVPICKEV ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVPICKEV (if possible).

Definition at line 1078 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VPICKEV.

Referenced by lower256BitShuffle().

◆ lowerVECTOR_SHUFFLE_XVPICKOD()

static SDValue lowerVECTOR_SHUFFLE_XVPICKOD ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVPICKOD (if possible).

Definition at line 1113 of file LoongArchISelLowering.cpp.

References DL, End, llvm::SelectionDAG::getNode(), and llvm::LoongArchISD::VPICKOD.

Referenced by lower256BitShuffle().

◆ lowerVECTOR_SHUFFLE_XVREPLVEI()

static SDValue lowerVECTOR_SHUFFLE_XVREPLVEI ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVREPLVEI (if possible).

It is a XVREPLVEI when the mask is: <x, x, x, ..., x+n, x+n, x+n, ...> where the number of x is equal to n and n is half the length of vector.

When undef's appear in the mask they are treated as if they were whatever value is necessary in order to fit the above form.

Definition at line 948 of file LoongArchISelLowering.cpp.

References assert(), DL, End, llvm::SelectionDAG::getConstant(), llvm::SelectionDAG::getNode(), llvm::SelectionDAG::getUNDEF(), and llvm::LoongArchISD::VREPLVEI.

Referenced by lower256BitShuffle().

◆ lowerVECTOR_SHUFFLE_XVSHUF()

static SDValue lowerVECTOR_SHUFFLE_XVSHUF ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

◆ lowerVECTOR_SHUFFLE_XVSHUF4I()

static SDValue lowerVECTOR_SHUFFLE_XVSHUF4I ( const SDLoc DL,
ArrayRef< int >  Mask,
MVT  VT,
SDValue  V1,
SDValue  V2,
SelectionDAG DAG 
)
static

Lower VECTOR_SHUFFLE into XVSHUF4I (if possible).

Definition at line 980 of file LoongArchISelLowering.cpp.

References DL, and lowerVECTOR_SHUFFLE_VSHUF4I().

Referenced by lower256BitShuffle().

◆ lowerVectorBitClear()

static SDValue lowerVectorBitClear ( SDNode Node,
SelectionDAG DAG 
)
static

◆ lowerVectorBitClearImm()

template<unsigned N>
static SDValue lowerVectorBitClearImm ( SDNode Node,
SelectionDAG DAG 
)
static

◆ lowerVectorBitRevImm()

template<unsigned N>
static SDValue lowerVectorBitRevImm ( SDNode Node,
SelectionDAG DAG 
)
static

◆ lowerVectorBitSetImm()

template<unsigned N>
static SDValue lowerVectorBitSetImm ( SDNode Node,
SelectionDAG DAG 
)
static

◆ lowerVectorSplatImm()

template<unsigned N>
static SDValue lowerVectorSplatImm ( SDNode Node,
unsigned  ImmOp,
SelectionDAG DAG,
bool  IsSigned = false 
)
static

◆ performANDCombine()

static SDValue performANDCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const LoongArchSubtarget Subtarget 
)
static

◆ performBITREV_WCombine()

static SDValue performBITREV_WCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const LoongArchSubtarget Subtarget 
)
static

◆ performINTRINSIC_WO_CHAINCombine()

static SDValue performINTRINSIC_WO_CHAINCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const LoongArchSubtarget Subtarget 
)
static

◆ performORCombine()

static SDValue performORCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const LoongArchSubtarget Subtarget 
)
static

◆ performSETCCCombine()

static SDValue performSETCCCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const LoongArchSubtarget Subtarget 
)
static

◆ performSRLCombine()

static SDValue performSRLCombine ( SDNode N,
SelectionDAG DAG,
TargetLowering::DAGCombinerInfo DCI,
const LoongArchSubtarget Subtarget 
)
static

◆ replaceINTRINSIC_WO_CHAINResults()

static void replaceINTRINSIC_WO_CHAINResults ( SDNode N,
SmallVectorImpl< SDValue > &  Results,
SelectionDAG DAG,
const LoongArchSubtarget Subtarget 
)
static

◆ replaceVecCondBranchResults()

static void replaceVecCondBranchResults ( SDNode N,
SmallVectorImpl< SDValue > &  Results,
SelectionDAG DAG,
const LoongArchSubtarget Subtarget,
unsigned  ResOp 
)
static

◆ replaceVPICKVE2GRResults()

template<unsigned N>
static void replaceVPICKVE2GRResults ( SDNode Node,
SmallVectorImpl< SDValue > &  Results,
SelectionDAG DAG,
const LoongArchSubtarget Subtarget,
unsigned  ResOp 
)
static

◆ STATISTIC()

STATISTIC ( NumTailCalls  ,
"Number of tail calls"   
)

◆ truncateVecElts()

static SDValue truncateVecElts ( SDNode Node,
SelectionDAG DAG 
)
static

◆ unpackFromMemLoc()

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

◆ unpackFromRegLoc()

static SDValue unpackFromRegLoc ( SelectionDAG DAG,
SDValue  Chain,
const CCValAssign VA,
const SDLoc DL,
const ISD::InputArg In,
const LoongArchTargetLowering TLI 
)
static

Variable Documentation

◆ ArgFPR32s

const MCPhysReg ArgFPR32s[]
Initial value:
= {LoongArch::F0, LoongArch::F1, LoongArch::F2,
LoongArch::F3, LoongArch::F4, LoongArch::F5,
LoongArch::F6, LoongArch::F7}

Definition at line 4814 of file LoongArchISelLowering.cpp.

Referenced by CC_LoongArch().

◆ ArgFPR64s

const MCPhysReg ArgFPR64s[]
Initial value:
= {
LoongArch::F0_64, LoongArch::F1_64, LoongArch::F2_64, LoongArch::F3_64,
LoongArch::F4_64, LoongArch::F5_64, LoongArch::F6_64, LoongArch::F7_64}

Definition at line 4818 of file LoongArchISelLowering.cpp.

Referenced by CC_LoongArch().

◆ ArgGPRs

const MCPhysReg ArgGPRs[]
Initial value:
= {LoongArch::R4, LoongArch::R5, LoongArch::R6,
LoongArch::R7, LoongArch::R8, LoongArch::R9,
LoongArch::R10, LoongArch::R11}

Definition at line 4809 of file LoongArchISelLowering.cpp.

Referenced by llvm::CC_CSKY_ABIV2_SOFT_64(), CC_LoongArch(), CC_LoongArchAssign2GRLen(), llvm::CC_RISCV(), llvm::CC_RISCV_FastCC(), CC_RISCVAssign2XLen(), llvm::LoongArchTargetLowering::LowerFormalArguments(), and llvm::Ret_CSKY_ABIV2_SOFT_64().

◆ ArgVRs

const MCPhysReg ArgVRs[]
Initial value:
= {LoongArch::VR0, LoongArch::VR1, LoongArch::VR2,
LoongArch::VR3, LoongArch::VR4, LoongArch::VR5,
LoongArch::VR6, LoongArch::VR7}

Definition at line 4822 of file LoongArchISelLowering.cpp.

Referenced by CC_LoongArch().

◆ ArgXRs

const MCPhysReg ArgXRs[]
Initial value:
= {LoongArch::XR0, LoongArch::XR1, LoongArch::XR2,
LoongArch::XR3, LoongArch::XR4, LoongArch::XR5,
LoongArch::XR6, LoongArch::XR7}

Definition at line 4826 of file LoongArchISelLowering.cpp.

Referenced by CC_LoongArch().

◆ ZeroDivCheck

cl::opt< bool > ZeroDivCheck("loongarch-check-zero-division", cl::Hidden, cl::desc("Trap on integer division by zero."), cl::init(false)) ( "loongarch-check-zero-division"  ,
cl::Hidden  ,
cl::desc("Trap on integer division by zero.")  ,
cl::init(false)   
)
static

Referenced by insertDivByZeroTrap().