LLVM 19.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 "LoongArchTargetMachine.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/RuntimeLibcalls.h"
#include "llvm/CodeGen/SelectionDAGNodes.h"
#include "llvm/IR/IRBuilder.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")
 
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 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 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 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 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)
 

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:783
@ TRUNCATE
TRUNCATE - Completely drop the high bits.
Definition: ISDOpcodes.h:786
#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 4796 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

◆ 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

◆ 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

◆ 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

◆ emitPseudoXVINSGR2VR()

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

◆ emitVecCondBranchPseudo()

static MachineBasicBlock * emitVecCondBranchPseudo ( MachineInstr MI,
MachineBasicBlock BB,
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 753 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 759 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 748 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 765 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

◆ 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

◆ 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 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 3480 of file LoongArchISelLowering.cpp.

Referenced by CC_LoongArch(), and llvm::RISCV::CC_RISCV().

◆ 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 3484 of file LoongArchISelLowering.cpp.

Referenced by CC_LoongArch(), and llvm::RISCV::CC_RISCV().

◆ 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 3475 of file LoongArchISelLowering.cpp.

Referenced by llvm::CC_CSKY_ABIV2_SOFT_64(), CC_LoongArch(), CC_LoongArchAssign2GRLen(), llvm::RISCV::CC_RISCV(), 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 3488 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 3492 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().