LLVM 17.0.0git
Namespaces | Macros | Typedefs | Functions
RISCVISelDAGToDAG.cpp File Reference
#include "RISCVISelDAGToDAG.h"
#include "MCTargetDesc/RISCVMCTargetDesc.h"
#include "MCTargetDesc/RISCVMatInt.h"
#include "RISCVISelLowering.h"
#include "RISCVMachineFunctionInfo.h"
#include "llvm/CodeGen/MachineFrameInfo.h"
#include "llvm/IR/IntrinsicsRISCV.h"
#include "llvm/Support/Alignment.h"
#include "llvm/Support/Debug.h"
#include "llvm/Support/MathExtras.h"
#include "llvm/Support/raw_ostream.h"
#include <optional>
#include "RISCVGenSearchableTables.inc"

Go to the source code of this file.

Namespaces

namespace  llvm
 This is an optimization pass for GlobalISel generic memory operations.
 
namespace  llvm::RISCV
 

Macros

#define DEBUG_TYPE   "riscv-isel"
 
#define PASS_NAME   "RISC-V DAG->DAG Pattern Instruction Selection"
 
#define GET_RISCVVSSEGTable_IMPL
 
#define GET_RISCVVLSEGTable_IMPL
 
#define GET_RISCVVLXSEGTable_IMPL
 
#define GET_RISCVVSXSEGTable_IMPL
 
#define GET_RISCVVLETable_IMPL
 
#define GET_RISCVVSETable_IMPL
 
#define GET_RISCVVLXTable_IMPL
 
#define GET_RISCVVSXTable_IMPL
 
#define GET_RISCVMaskedPseudosTable_IMPL
 
#define CASE_VMSLT_VMNAND_VMSET_OPCODES(lmulenum, suffix, suffix_b)
 
#define CASE_VMSLT_OPCODES(lmulenum, suffix, suffix_b)
 
#define CASE_VMXOR_VMANDN_VMOR_OPCODES(lmulenum, suffix)
 

Typedefs

using ValidateFn = bool(*)(int64_t)
 

Functions

static unsigned getLastNonGlueOrChainOpIdx (const SDNode *Node)
 
static unsigned getVecPolicyOpIdx (const SDNode *Node, const MCInstrDesc &MCID)
 
static SDValue selectImmSeq (SelectionDAG *CurDAG, const SDLoc &DL, const MVT VT, RISCVMatInt::InstSeq &Seq)
 
static SDValue selectImm (SelectionDAG *CurDAG, const SDLoc &DL, const MVT VT, int64_t Imm, const RISCVSubtarget &Subtarget)
 
static SDValue createTuple (SelectionDAG &CurDAG, ArrayRef< SDValue > Regs, unsigned NF, RISCVII::VLMUL LMUL)
 
static bool isAllUndef (ArrayRef< SDValue > Values)
 
static bool selectConstantAddr (SelectionDAG *CurDAG, const SDLoc &DL, const MVT VT, const RISCVSubtarget *Subtarget, SDValue Addr, SDValue &Base, SDValue &Offset)
 
static bool isWorthFoldingAdd (SDValue Add)
 
static bool selectVSplatSimmHelper (SDValue N, SDValue &SplatVal, SelectionDAG &DAG, const RISCVSubtarget &Subtarget, ValidateFn ValidateImm)
 
static bool usesAllOnesMask (SDNode *N, unsigned MaskOpIdx)
 

Macro Definition Documentation

◆ CASE_VMSLT_OPCODES

#define CASE_VMSLT_OPCODES (   lmulenum,
  suffix,
  suffix_b 
)
Value:
case RISCVII::VLMUL::lmulenum: \
VMSLTOpcode = IsUnsigned ? RISCV::PseudoVMSLTU_VX_##suffix \
: RISCV::PseudoVMSLT_VX_##suffix; \
VMSLTMaskOpcode = IsUnsigned ? RISCV::PseudoVMSLTU_VX_##suffix##_MASK \
: RISCV::PseudoVMSLT_VX_##suffix##_MASK; \
break;

◆ CASE_VMSLT_VMNAND_VMSET_OPCODES

#define CASE_VMSLT_VMNAND_VMSET_OPCODES (   lmulenum,
  suffix,
  suffix_b 
)
Value:
case RISCVII::VLMUL::lmulenum: \
VMSLTOpcode = IsUnsigned ? RISCV::PseudoVMSLTU_VX_##suffix \
: RISCV::PseudoVMSLT_VX_##suffix; \
VMNANDOpcode = RISCV::PseudoVMNAND_MM_##suffix; \
VMSetOpcode = RISCV::PseudoVMSET_M_##suffix_b; \
break;

◆ CASE_VMXOR_VMANDN_VMOR_OPCODES

#define CASE_VMXOR_VMANDN_VMOR_OPCODES (   lmulenum,
  suffix 
)
Value:
case RISCVII::VLMUL::lmulenum: \
VMXOROpcode = RISCV::PseudoVMXOR_MM_##suffix; \
VMANDNOpcode = RISCV::PseudoVMANDN_MM_##suffix; \
VMOROpcode = RISCV::PseudoVMOR_MM_##suffix; \
break;

◆ DEBUG_TYPE

#define DEBUG_TYPE   "riscv-isel"

Definition at line 28 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVMaskedPseudosTable_IMPL

#define GET_RISCVMaskedPseudosTable_IMPL

Definition at line 40 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVLETable_IMPL

#define GET_RISCVVLETable_IMPL

Definition at line 36 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVLSEGTable_IMPL

#define GET_RISCVVLSEGTable_IMPL

Definition at line 33 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVLXSEGTable_IMPL

#define GET_RISCVVLXSEGTable_IMPL

Definition at line 34 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVLXTable_IMPL

#define GET_RISCVVLXTable_IMPL

Definition at line 38 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVSETable_IMPL

#define GET_RISCVVSETable_IMPL

Definition at line 37 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVSSEGTable_IMPL

#define GET_RISCVVSSEGTable_IMPL

Definition at line 32 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVSXSEGTable_IMPL

#define GET_RISCVVSXSEGTable_IMPL

Definition at line 35 of file RISCVISelDAGToDAG.cpp.

◆ GET_RISCVVSXTable_IMPL

#define GET_RISCVVSXTable_IMPL

Definition at line 39 of file RISCVISelDAGToDAG.cpp.

◆ PASS_NAME

#define PASS_NAME   "RISC-V DAG->DAG Pattern Instruction Selection"

Definition at line 29 of file RISCVISelDAGToDAG.cpp.

Typedef Documentation

◆ ValidateFn

using ValidateFn = bool (*)(int64_t)

Definition at line 2929 of file RISCVISelDAGToDAG.cpp.

Function Documentation

◆ createTuple()

static SDValue createTuple ( SelectionDAG CurDAG,
ArrayRef< SDValue Regs,
unsigned  NF,
RISCVII::VLMUL  LMUL 
)
static

◆ getLastNonGlueOrChainOpIdx()

static unsigned getLastNonGlueOrChainOpIdx ( const SDNode Node)
static

Definition at line 44 of file RISCVISelDAGToDAG.cpp.

References assert().

Referenced by getVecPolicyOpIdx().

◆ getVecPolicyOpIdx()

static unsigned getVecPolicyOpIdx ( const SDNode Node,
const MCInstrDesc MCID 
)
static

◆ isAllUndef()

static bool isAllUndef ( ArrayRef< SDValue Values)
static

◆ isWorthFoldingAdd()

static bool isWorthFoldingAdd ( SDValue  Add)
static

◆ selectConstantAddr()

static bool selectConstantAddr ( SelectionDAG CurDAG,
const SDLoc DL,
const MVT  VT,
const RISCVSubtarget Subtarget,
SDValue  Addr,
SDValue Base,
SDValue Offset 
)
static

◆ selectImm()

static SDValue selectImm ( SelectionDAG CurDAG,
const SDLoc DL,
const MVT  VT,
int64_t  Imm,
const RISCVSubtarget Subtarget 
)
static

◆ selectImmSeq()

static SDValue selectImmSeq ( SelectionDAG CurDAG,
const SDLoc DL,
const MVT  VT,
RISCVMatInt::InstSeq Seq 
)
static

◆ selectVSplatSimmHelper()

static bool selectVSplatSimmHelper ( SDValue  N,
SDValue SplatVal,
SelectionDAG DAG,
const RISCVSubtarget Subtarget,
ValidateFn  ValidateImm 
)
static

◆ usesAllOnesMask()

static bool usesAllOnesMask ( SDNode N,
unsigned  MaskOpIdx 
)
static