#include "LegalizeTypes.h"
#include "llvm/ADT/SmallBitVector.h"
#include "llvm/Analysis/MemoryLocation.h"
#include "llvm/Analysis/VectorUtils.h"
#include "llvm/CodeGen/ISDOpcodes.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/Support/ErrorHandling.h"
#include "llvm/Support/TypeSize.h"
#include "llvm/Support/raw_ostream.h"
#include <numeric>
usingnamespacellvm;
#define DEBUG_TYPE …
void DAGTypeLegalizer::ScalarizeVectorResult(SDNode *N, unsigned ResNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_BinOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_CMP(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_TernaryOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_FIX(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_FFREXP(SDNode *N, unsigned ResNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_StrictFPOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_OverflowOp(SDNode *N,
unsigned ResNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_MERGE_VALUES(SDNode *N,
unsigned ResNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_BITCAST(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_BUILD_VECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_EXTRACT_SUBVECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_FP_ROUND(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_ExpOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_INSERT_VECTOR_ELT(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_LOAD(LoadSDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_UnaryOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_InregOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_VecInregOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_ADDRSPACECAST(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_SCALAR_TO_VECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_VSELECT(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_SELECT(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_SELECT_CC(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_UNDEF(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_VECTOR_SHUFFLE(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_FP_TO_XINT_SAT(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_SETCC(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecRes_IS_FPCLASS(SDNode *N) { … }
bool DAGTypeLegalizer::ScalarizeVectorOperand(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_BITCAST(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_FAKE_USE(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_UnaryOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_UnaryOp_StrictFP(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_CONCAT_VECTORS(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_INSERT_SUBVECTOR(SDNode *N,
unsigned OpNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_EXTRACT_VECTOR_ELT(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_VSELECT(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_VSETCC(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_STORE(StoreSDNode *N, unsigned OpNo){ … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_FP_ROUND(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_STRICT_FP_ROUND(SDNode *N,
unsigned OpNo) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_FP_EXTEND(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_STRICT_FP_EXTEND(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_VECREDUCE(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_VECREDUCE_SEQ(SDNode *N) { … }
SDValue DAGTypeLegalizer::ScalarizeVecOp_CMP(SDNode *N) { … }
void DAGTypeLegalizer::SplitVectorResult(SDNode *N, unsigned ResNo) { … }
void DAGTypeLegalizer::IncrementPointer(MemSDNode *N, EVT MemVT,
MachinePointerInfo &MPI, SDValue &Ptr,
uint64_t *ScaledOffset) { … }
std::pair<SDValue, SDValue> DAGTypeLegalizer::SplitMask(SDValue Mask) { … }
std::pair<SDValue, SDValue> DAGTypeLegalizer::SplitMask(SDValue Mask,
const SDLoc &DL) { … }
void DAGTypeLegalizer::SplitVecRes_BinOp(SDNode *N, SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_TernaryOp(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_CMP(SDNode *N, SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_FIX(SDNode *N, SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_BITCAST(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_BUILD_VECTOR(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_CONCAT_VECTORS(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_EXTRACT_SUBVECTOR(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_INSERT_SUBVECTOR(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_FPOp_MultiType(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_IS_FPCLASS(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_InregOp(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_ExtVecInRegOp(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_StrictFPOp(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
SDValue DAGTypeLegalizer::UnrollVectorOp_StrictFP(SDNode *N, unsigned ResNE) { … }
void DAGTypeLegalizer::SplitVecRes_OverflowOp(SDNode *N, unsigned ResNo,
SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_INSERT_VECTOR_ELT(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_STEP_VECTOR(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_ScalarOp(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VP_SPLAT(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_LOAD(LoadSDNode *LD, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VP_LOAD(VPLoadSDNode *LD, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VP_STRIDED_LOAD(VPStridedLoadSDNode *SLD,
SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_MLOAD(MaskedLoadSDNode *MLD,
SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_Gather(MemSDNode *N, SDValue &Lo,
SDValue &Hi, bool SplitSETCC) { … }
void DAGTypeLegalizer::SplitVecRes_VECTOR_COMPRESS(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_SETCC(SDNode *N, SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_UnaryOp(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_ADDRSPACECAST(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_FFREXP(SDNode *N, unsigned ResNo,
SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_ExtendOp(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VECTOR_SHUFFLE(ShuffleVectorSDNode *N,
SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VAARG(SDNode *N, SDValue &Lo, SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_FP_TO_XINT_SAT(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VECTOR_REVERSE(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VECTOR_SPLICE(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VP_REVERSE(SDNode *N, SDValue &Lo,
SDValue &Hi) { … }
void DAGTypeLegalizer::SplitVecRes_VECTOR_DEINTERLEAVE(SDNode *N) { … }
void DAGTypeLegalizer::SplitVecRes_VECTOR_INTERLEAVE(SDNode *N) { … }
bool DAGTypeLegalizer::SplitVectorOperand(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VSELECT(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VECTOR_COMPRESS(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VECREDUCE(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VECREDUCE_SEQ(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VP_REDUCE(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_UnaryOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_FAKE_USE(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_BITCAST(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_INSERT_SUBVECTOR(SDNode *N,
unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_EXTRACT_SUBVECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_EXTRACT_VECTOR_ELT(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_ExtVecInRegOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_Gather(MemSDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VP_STORE(VPStoreSDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VP_STRIDED_STORE(VPStridedStoreSDNode *N,
unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_MSTORE(MaskedStoreSDNode *N,
unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_Scatter(MemSDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_STORE(StoreSDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::SplitVecOp_CONCAT_VECTORS(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_TruncateHelper(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VSETCC(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_FP_ROUND(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_FPOpDifferentTypes(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_CMP(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_FP_TO_XINT_SAT(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VP_CttzElements(SDNode *N) { … }
SDValue DAGTypeLegalizer::SplitVecOp_VECTOR_HISTOGRAM(SDNode *N) { … }
void DAGTypeLegalizer::WidenVectorResult(SDNode *N, unsigned ResNo) { … }
SDValue DAGTypeLegalizer::WidenVecRes_Ternary(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_Binary(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_CMP(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_BinaryWithExtraScalarOp(SDNode *N) { … }
static SDValue CollectOpsToWiden(SelectionDAG &DAG, const TargetLowering &TLI,
SmallVectorImpl<SDValue> &ConcatOps,
unsigned ConcatEnd, EVT VT, EVT MaxVT,
EVT WidenVT) { … }
SDValue DAGTypeLegalizer::WidenVecRes_BinaryCanTrap(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_StrictFP(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_OverflowOp(SDNode *N, unsigned ResNo) { … }
SDValue DAGTypeLegalizer::WidenVecRes_Convert(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_FP_TO_XINT_SAT(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_XROUND(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_Convert_StrictFP(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_EXTEND_VECTOR_INREG(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_FCOPYSIGN(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_UnarySameEltsWithScalarArg(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_ExpOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_Unary(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_InregOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_MERGE_VALUES(SDNode *N, unsigned ResNo) { … }
SDValue DAGTypeLegalizer::WidenVecRes_ADDRSPACECAST(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_BITCAST(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_BUILD_VECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_CONCAT_VECTORS(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_INSERT_SUBVECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_EXTRACT_SUBVECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_AssertZext(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_INSERT_VECTOR_ELT(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_LOAD(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_VP_LOAD(VPLoadSDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_VP_STRIDED_LOAD(VPStridedLoadSDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_COMPRESS(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_MLOAD(MaskedLoadSDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_MGATHER(MaskedGatherSDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_VP_GATHER(VPGatherSDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_ScalarOp(SDNode *N) { … }
static inline bool isSETCCOp(unsigned Opcode) { … }
static inline bool isLogicalMaskOp(unsigned Opcode) { … }
static inline EVT getSETCCOperandType(SDValue N) { … }
#ifndef NDEBUG
static inline bool isSETCCorConvertedSETCC(SDValue N) {
if (N.getOpcode() == ISD::EXTRACT_SUBVECTOR)
N = N.getOperand(0);
else if (N.getOpcode() == ISD::CONCAT_VECTORS) {
for (unsigned i = 1; i < N->getNumOperands(); ++i)
if (!N->getOperand(i)->isUndef())
return false;
N = N.getOperand(0);
}
if (N.getOpcode() == ISD::TRUNCATE)
N = N.getOperand(0);
else if (N.getOpcode() == ISD::SIGN_EXTEND)
N = N.getOperand(0);
if (isLogicalMaskOp(N.getOpcode()))
return isSETCCorConvertedSETCC(N.getOperand(0)) &&
isSETCCorConvertedSETCC(N.getOperand(1));
return (isSETCCOp(N.getOpcode()) ||
ISD::isBuildVectorOfConstantSDNodes(N.getNode()));
}
#endif
SDValue DAGTypeLegalizer::convertMask(SDValue InMask, EVT MaskVT,
EVT ToMaskVT) { … }
SDValue DAGTypeLegalizer::WidenVSELECTMask(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_Select(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_SELECT_CC(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_UNDEF(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_SHUFFLE(ShuffleVectorSDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_VECTOR_REVERSE(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_SETCC(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecRes_STRICT_FSETCC(SDNode *N) { … }
bool DAGTypeLegalizer::WidenVectorOperand(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_EXTEND(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_CMP(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_UnrollVectorOp(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_IS_FPCLASS(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_Convert(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_FP_TO_XINT_SAT(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_BITCAST(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_FAKE_USE(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_CONCAT_VECTORS(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_INSERT_SUBVECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_EXTRACT_SUBVECTOR(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_EXTRACT_VECTOR_ELT(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_EXTEND_VECTOR_INREG(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_STORE(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VP_SPLAT(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VP_STORE(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VP_STRIDED_STORE(SDNode *N,
unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_MSTORE(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_MGATHER(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_MSCATTER(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VP_SCATTER(SDNode *N, unsigned OpNo) { … }
SDValue DAGTypeLegalizer::WidenVecOp_SETCC(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_STRICT_FSETCC(SDNode *N) { … }
static unsigned getExtendForIntVecReduction(unsigned Opc) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VECREDUCE(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VECREDUCE_SEQ(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VP_REDUCE(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VSELECT(SDNode *N) { … }
SDValue DAGTypeLegalizer::WidenVecOp_VP_CttzElements(SDNode *N) { … }
static std::optional<EVT> findMemType(SelectionDAG &DAG,
const TargetLowering &TLI, unsigned Width,
EVT WidenVT, unsigned Align = 0,
unsigned WidenEx = 0) { … }
static SDValue BuildVectorFromScalar(SelectionDAG& DAG, EVT VecTy,
SmallVectorImpl<SDValue> &LdOps,
unsigned Start, unsigned End) { … }
SDValue DAGTypeLegalizer::GenWidenVectorLoads(SmallVectorImpl<SDValue> &LdChain,
LoadSDNode *LD) { … }
SDValue
DAGTypeLegalizer::GenWidenVectorExtLoads(SmallVectorImpl<SDValue> &LdChain,
LoadSDNode *LD,
ISD::LoadExtType ExtType) { … }
bool DAGTypeLegalizer::GenWidenVectorStores(SmallVectorImpl<SDValue> &StChain,
StoreSDNode *ST) { … }
SDValue DAGTypeLegalizer::ModifyToType(SDValue InOp, EVT NVT,
bool FillWithZeroes) { … }