LLVM
15.0.0git
|
#include "llvm/CodeGen/GlobalISel/LegalizerHelper.h"
Public Types | |
enum | LegalizeResult { AlreadyLegal, Legalized, UnableToLegalize } |
Public Member Functions | |
const LegalizerInfo & | getLegalizerInfo () const |
Expose LegalizerInfo so the clients can re-use. More... | |
const TargetLowering & | getTargetLowering () const |
LegalizerHelper (MachineFunction &MF, GISelChangeObserver &Observer, MachineIRBuilder &B) | |
LegalizerHelper (MachineFunction &MF, const LegalizerInfo &LI, GISelChangeObserver &Observer, MachineIRBuilder &B) | |
LegalizeResult | legalizeInstrStep (MachineInstr &MI, LostDebugLocObserver &LocObserver) |
Replace MI by a sequence of legal instructions that can implement the same operation. More... | |
LegalizeResult | libcall (MachineInstr &MI, LostDebugLocObserver &LocObserver) |
Legalize an instruction by emiting a runtime library call instead. More... | |
LegalizeResult | narrowScalar (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
Legalize an instruction by reducing the width of the underlying scalar type. More... | |
LegalizeResult | widenScalar (MachineInstr &MI, unsigned TypeIdx, LLT WideTy) |
Legalize an instruction by performing the operation on a wider scalar type (for example a 16-bit addition can be safely performed at 32-bits precision, ignoring the unused bits). More... | |
LegalizeResult | bitcast (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
Legalize an instruction by replacing the value type. More... | |
LegalizeResult | lower (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
Legalize an instruction by splitting it into simpler parts, hopefully understood by the target. More... | |
LegalizeResult | fewerElementsVector (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
Legalize a vector instruction by splitting into multiple components, each acting on the same scalar type as the original but with fewer elements. More... | |
LegalizeResult | moreElementsVector (MachineInstr &MI, unsigned TypeIdx, LLT MoreTy) |
Legalize a vector instruction by increasing the number of vector elements involved and ignoring the added elements later. More... | |
Register | coerceToScalar (Register Val) |
Cast the given value to an LLT::scalar with an equivalent size. More... | |
void | widenScalarSrc (MachineInstr &MI, LLT WideTy, unsigned OpIdx, unsigned ExtOpcode) |
Legalize a single operand OpIdx of the machine instruction MI as a Use by extending the operand's type to WideTy using the specified ExtOpcode for the extension instruction, and replacing the vreg of the operand in place. More... | |
void | narrowScalarSrc (MachineInstr &MI, LLT NarrowTy, unsigned OpIdx) |
Legalize a single operand OpIdx of the machine instruction MI as a Use by truncating the operand's type to NarrowTy using G_TRUNC, and replacing the vreg of the operand in place. More... | |
void | widenScalarDst (MachineInstr &MI, LLT WideTy, unsigned OpIdx=0, unsigned TruncOpcode=TargetOpcode::G_TRUNC) |
Legalize a single operand OpIdx of the machine instruction MI as a Def by extending the operand's type to WideTy and truncating it back with the TruncOpcode , and replacing the vreg of the operand in place. More... | |
void | narrowScalarDst (MachineInstr &MI, LLT NarrowTy, unsigned OpIdx, unsigned ExtOpcode) |
void | moreElementsVectorDst (MachineInstr &MI, LLT MoreTy, unsigned OpIdx) |
Legalize a single operand OpIdx of the machine instruction MI as a Def by performing it with additional vector elements and extracting the result elements, and replacing the vreg of the operand in place. More... | |
void | moreElementsVectorSrc (MachineInstr &MI, LLT MoreTy, unsigned OpIdx) |
Legalize a single operand OpIdx of the machine instruction MI as a Use by producing a vector with undefined high elements, extracting the original vector type, and replacing the vreg of the operand in place. More... | |
void | bitcastSrc (MachineInstr &MI, LLT CastTy, unsigned OpIdx) |
Legalize a single operand OpIdx of the machine instruction MI as a use by inserting a G_BITCAST to CastTy . More... | |
void | bitcastDst (MachineInstr &MI, LLT CastTy, unsigned OpIdx) |
Legalize a single operand OpIdx of the machine instruction MI as a def by inserting a G_BITCAST from CastTy . More... | |
Register | widenWithUnmerge (LLT WideTy, Register OrigReg) |
Widen OrigReg to WideTy by merging to a wider type, padding with G_IMPLICIT_DEF, and producing dead results. More... | |
Align | getStackTemporaryAlignment (LLT Type, Align MinAlign=Align()) const |
Return the alignment to use for a stack temporary object with the given type. More... | |
MachineInstrBuilder | createStackTemporary (TypeSize Bytes, Align Alignment, MachinePointerInfo &PtrInfo) |
Create a stack temporary based on the size in bytes and the alignment. More... | |
Register | getVectorElementPointer (Register VecPtr, LLT VecTy, Register Index) |
Get a pointer to vector element Index located in memory for a vector of type VecTy starting at a base address of VecPtr . More... | |
LegalizeResult | fewerElementsVectorMultiEltType (GenericMachineInstr &MI, unsigned NumElts, std::initializer_list< unsigned > NonVecOpIndices={}) |
Handles most opcodes. More... | |
LegalizeResult | fewerElementsVectorPhi (GenericMachineInstr &MI, unsigned NumElts) |
LegalizeResult | moreElementsVectorPhi (MachineInstr &MI, unsigned TypeIdx, LLT MoreTy) |
LegalizeResult | moreElementsVectorShuffle (MachineInstr &MI, unsigned TypeIdx, LLT MoreTy) |
LegalizeResult | fewerElementsVectorUnmergeValues (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | fewerElementsVectorMerge (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | fewerElementsVectorExtractInsertVectorElt (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | reduceLoadStoreWidth (GLoadStore &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | fewerElementsVectorSextInReg (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | narrowScalarShiftByConstant (MachineInstr &MI, const APInt &Amt, LLT HalfTy, LLT ShiftAmtTy) |
LegalizeResult | fewerElementsVectorReductions (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | fewerElementsVectorShuffle (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | narrowScalarShift (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarAddSub (MachineInstr &MI, unsigned TypeIdx, LLT NarrowTy) |
LegalizeResult | narrowScalarMul (MachineInstr &MI, LLT Ty) |
LegalizeResult | narrowScalarFPTOI (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarExtract (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarInsert (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarBasic (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarExt (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarSelect (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarCTLZ (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarCTTZ (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | narrowScalarCTPOP (MachineInstr &MI, unsigned TypeIdx, LLT Ty) |
LegalizeResult | bitcastExtractVectorElt (MachineInstr &MI, unsigned TypeIdx, LLT CastTy) |
Perform Bitcast legalize action on G_EXTRACT_VECTOR_ELT. More... | |
LegalizeResult | bitcastInsertVectorElt (MachineInstr &MI, unsigned TypeIdx, LLT CastTy) |
Perform Bitcast legalize action on G_INSERT_VECTOR_ELT. More... | |
LegalizeResult | lowerBitcast (MachineInstr &MI) |
LegalizeResult | lowerLoad (GAnyLoad &MI) |
LegalizeResult | lowerStore (GStore &MI) |
LegalizeResult | lowerBitCount (MachineInstr &MI) |
LegalizeResult | lowerFunnelShiftWithInverse (MachineInstr &MI) |
LegalizeResult | lowerFunnelShiftAsShifts (MachineInstr &MI) |
LegalizeResult | lowerFunnelShift (MachineInstr &MI) |
LegalizeResult | lowerRotateWithReverseRotate (MachineInstr &MI) |
LegalizeResult | lowerRotate (MachineInstr &MI) |
LegalizeResult | lowerU64ToF32BitOps (MachineInstr &MI) |
LegalizeResult | lowerUITOFP (MachineInstr &MI) |
LegalizeResult | lowerSITOFP (MachineInstr &MI) |
LegalizeResult | lowerFPTOUI (MachineInstr &MI) |
LegalizeResult | lowerFPTOSI (MachineInstr &MI) |
LegalizeResult | lowerFPTRUNC_F64_TO_F16 (MachineInstr &MI) |
LegalizeResult | lowerFPTRUNC (MachineInstr &MI) |
LegalizeResult | lowerFPOWI (MachineInstr &MI) |
LegalizeResult | lowerMinMax (MachineInstr &MI) |
LegalizeResult | lowerFCopySign (MachineInstr &MI) |
LegalizeResult | lowerFMinNumMaxNum (MachineInstr &MI) |
LegalizeResult | lowerFMad (MachineInstr &MI) |
LegalizeResult | lowerIntrinsicRound (MachineInstr &MI) |
LegalizeResult | lowerFFloor (MachineInstr &MI) |
LegalizeResult | lowerMergeValues (MachineInstr &MI) |
LegalizeResult | lowerUnmergeValues (MachineInstr &MI) |
LegalizeResult | lowerExtractInsertVectorElt (MachineInstr &MI) |
Lower a vector extract or insert by writing the vector to a stack temporary and reloading the element or vector. More... | |
LegalizeResult | lowerShuffleVector (MachineInstr &MI) |
LegalizeResult | lowerDynStackAlloc (MachineInstr &MI) |
LegalizeResult | lowerExtract (MachineInstr &MI) |
LegalizeResult | lowerInsert (MachineInstr &MI) |
LegalizeResult | lowerSADDO_SSUBO (MachineInstr &MI) |
LegalizeResult | lowerAddSubSatToMinMax (MachineInstr &MI) |
LegalizeResult | lowerAddSubSatToAddoSubo (MachineInstr &MI) |
LegalizeResult | lowerShlSat (MachineInstr &MI) |
LegalizeResult | lowerBswap (MachineInstr &MI) |
LegalizeResult | lowerBitreverse (MachineInstr &MI) |
LegalizeResult | lowerReadWriteRegister (MachineInstr &MI) |
LegalizeResult | lowerSMULH_UMULH (MachineInstr &MI) |
LegalizeResult | lowerSelect (MachineInstr &MI) |
LegalizeResult | lowerDIVREM (MachineInstr &MI) |
LegalizeResult | lowerAbsToAddXor (MachineInstr &MI) |
LegalizeResult | lowerAbsToMaxNeg (MachineInstr &MI) |
LegalizeResult | lowerVectorReduction (MachineInstr &MI) |
LegalizeResult | lowerMemcpyInline (MachineInstr &MI) |
LegalizeResult | lowerMemCpyFamily (MachineInstr &MI, unsigned MaxLen=0) |
Public Attributes | |
MachineIRBuilder & | MIRBuilder |
Expose MIRBuilder so clients can set their own RecordInsertInstruction functions. More... | |
GISelChangeObserver & | Observer |
To keep track of changes made by the LegalizerHelper. More... | |
Definition at line 46 of file LegalizerHelper.h.
Enumerator | |
---|---|
AlreadyLegal | Instruction was already legal and no change was made to the MachineFunction. |
Legalized | Instruction has been legalized and the MachineFunction changed. |
UnableToLegalize | Some kind of error has occurred and we could not legalize this instruction. |
Definition at line 61 of file LegalizerHelper.h.
LegalizerHelper::LegalizerHelper | ( | MachineFunction & | MF, |
GISelChangeObserver & | Observer, | ||
MachineIRBuilder & | B | ||
) |
Definition at line 98 of file LegalizerHelper.cpp.
LegalizerHelper::LegalizerHelper | ( | MachineFunction & | MF, |
const LegalizerInfo & | LI, | ||
GISelChangeObserver & | Observer, | ||
MachineIRBuilder & | B | ||
) |
Definition at line 105 of file LegalizerHelper.cpp.
LegalizerHelper::LegalizeResult LegalizerHelper::bitcast | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Legalize an instruction by replacing the value type.
Definition at line 3213 of file LegalizerHelper.cpp.
References bitcastDst(), bitcastExtractVectorElt(), bitcastInsertVectorElt(), bitcastSrc(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::dbgs(), llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), Legalized, LLVM_DEBUG, MI, Observer, llvm::MachineMemOperand::setType(), and UnableToLegalize.
Referenced by legalizeInstrStep().
void LegalizerHelper::bitcastDst | ( | MachineInstr & | MI, |
LLT | CastTy, | ||
unsigned | OpIdx | ||
) |
Legalize a single operand OpIdx
of the machine instruction MI
as a def by inserting a G_BITCAST from CastTy
.
Definition at line 1487 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildBitcast(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineIRBuilder::getMBB(), MI, MIRBuilder, llvm::MachineIRBuilder::setInsertPt(), and llvm::MachineOperand::setReg().
Referenced by bitcast(), and llvm::AMDGPULegalizerInfo::legalizeSBufferLoad().
LegalizerHelper::LegalizeResult LegalizerHelper::bitcastExtractVectorElt | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | CastTy | ||
) |
Perform Bitcast legalize action on G_EXTRACT_VECTOR_ELT.
Perform a G_EXTRACT_VECTOR_ELT in a different sized vector element.
If this is casting to a vector with a smaller element size, perform multiple element extracts and merge the results. If this is coercing to a vector with larger elements, index the bitcasted vector and extract the target element with bit operations. This is intended to force the indexing in the native register size for architectures that can dynamically index the register file.
Definition at line 2773 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildBitcast(), llvm::MachineIRBuilder::buildBuildVector(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildExtractVectorElement(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildMul(), llvm::MachineIRBuilder::buildTrunc(), getBitcastWiderVectorElementOffset(), llvm::LLT::getElementType(), llvm::LinearPolySize< ElementCount >::getFixed(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), I, llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, llvm::Log2_32(), MI, MIRBuilder, llvm::LLT::scalarOrVector(), and UnableToLegalize.
Referenced by bitcast().
LegalizerHelper::LegalizeResult LegalizerHelper::bitcastInsertVectorElt | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | CastTy | ||
) |
Perform Bitcast legalize action on G_INSERT_VECTOR_ELT.
Perform a G_INSERT_VECTOR_ELT in a different sized vector element.
If this is increasing the element size, perform the indexing in the target element type, and use bit operations to insert at the element position. This is intended for architectures that can dynamically index the register file and want to force indexing in the native register size.
Definition at line 2913 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildBitcast(), buildBitFieldInsert(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildExtractVectorElement(), llvm::MachineIRBuilder::buildInsertVectorElement(), llvm::MachineIRBuilder::buildLShr(), getBitcastWiderVectorElementOffset(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, llvm::Log2_32(), MI, MIRBuilder, and UnableToLegalize.
Referenced by bitcast().
void LegalizerHelper::bitcastSrc | ( | MachineInstr & | MI, |
LLT | CastTy, | ||
unsigned | OpIdx | ||
) |
Legalize a single operand OpIdx
of the machine instruction MI
as a use by inserting a G_BITCAST to CastTy
.
Definition at line 1482 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildBitcast(), llvm::MachineInstrBuilder::getReg(), MI, and MIRBuilder.
Referenced by bitcast().
Cast the given value to an LLT::scalar with an equivalent size.
Returns the register to use if an instruction was inserted. Returns the original register if no coercion was necessary.
Definition at line 1411 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildBitcast(), llvm::MachineIRBuilder::buildPtrToInt(), DL, llvm::LLT::getAddressSpace(), llvm::MachineIRBuilder::getDataLayout(), llvm::LLT::getElementType(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isPointer(), llvm::LLT::isScalar(), llvm::LLT::isVector(), MIRBuilder, and llvm::LLT::scalar().
Referenced by lowerUnmergeValues().
MachineInstrBuilder LegalizerHelper::createStackTemporary | ( | TypeSize | Bytes, |
Align | Alignment, | ||
MachinePointerInfo & | PtrInfo | ||
) |
Create a stack temporary based on the size in bytes and the alignment.
Definition at line 3599 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildFrameIndex(), llvm::MachineFrameInfo::CreateStackObject(), DL, llvm::MachineIRBuilder::getDataLayout(), llvm::MachinePointerInfo::getFixedStack(), llvm::MachineFunction::getFrameInfo(), llvm::MachineIRBuilder::getMF(), MIRBuilder, and llvm::LLT::pointer().
Referenced by lowerExtractInsertVectorElt().
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVector | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Legalize a vector instruction by splitting into multiple components, each acting on the same scalar type as the original but with fewer elements.
Definition at line 4162 of file LegalizerHelper.cpp.
References assert(), fewerElementsVectorExtractInsertVectorElt(), fewerElementsVectorMerge(), fewerElementsVectorMultiEltType(), fewerElementsVectorPhi(), fewerElementsVectorReductions(), fewerElementsVectorShuffle(), fewerElementsVectorUnmergeValues(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), GISEL_VECREDUCE_CASES_NONSEQ, llvm::LLT::isVector(), MI, MRI, reduceLoadStoreWidth(), and UnableToLegalize.
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingLoad(), and legalizeInstrStep().
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorExtractInsertVectorElt | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Definition at line 3992 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildExtractVectorElement(), llvm::MachineIRBuilder::buildInsertVectorElement(), llvm::MachineIRBuilder::buildUndef(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), Legalized, lowerExtractInsertVectorElt(), MI, MIRBuilder, and UnableToLegalize.
Referenced by fewerElementsVector().
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorMerge | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Definition at line 3906 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildUnmerge(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), i, llvm::LLT::isVector(), j(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by fewerElementsVector().
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorMultiEltType | ( | GenericMachineInstr & | MI, |
unsigned | NumElts, | ||
std::initializer_list< unsigned > | NonVecOpIndices = {} |
||
) |
Handles most opcodes.
Split MI
into same instruction on sub-vectors or scalars with NumElts
elements (1 for scalar). Supports uneven splits: there can be leftover sub-vector with fewer then NumElts
or a leftover scalar. To avoid this use moreElements first and set MI number of elements to multiple of NumElts
. Non-vector operands that should be used on all sub-instructions without split are listed in NonVecOpIndices
.
Definition at line 3739 of file LegalizerHelper.cpp.
References assert(), broadcastSrcOp(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildMerge(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), hasSameNumEltsOnAllVectorOperands(), i, I, llvm::is_contained(), Legalized, makeDstOps(), MI, MIRBuilder, llvm::size(), and Uses.
Referenced by fewerElementsVector().
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorPhi | ( | GenericMachineInstr & | MI, |
unsigned | NumElts | ||
) |
Definition at line 3809 of file LegalizerHelper.cpp.
References llvm::MachineInstrBuilder::addDef(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineBasicBlock::getFirstTerminator(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), i, j(), Legalized, makeDstOps(), MI, MIRBuilder, and llvm::MachineIRBuilder::setInsertPt().
Referenced by fewerElementsVector().
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorReductions | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Definition at line 4493 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildInstr(), llvm::SmallVectorImpl< T >::clear(), llvm::SmallVectorImpl< T >::emplace_back(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), getReg(), getScalarOpcForReduction(), llvm::MachineRegisterInfo::getType(), llvm::isPowerOf2_32(), llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by fewerElementsVector().
LegalizeResult llvm::LegalizerHelper::fewerElementsVectorSextInReg | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorShuffle | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Definition at line 4303 of file LegalizerHelper.cpp.
References llvm::array_lengthof(), assert(), llvm::MachineIRBuilder::buildBuildVector(), llvm::MachineIRBuilder::buildConcatVectors(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildShuffleVector(), llvm::MachineIRBuilder::buildUndef(), llvm::LLT::changeElementCount(), llvm::SmallVectorImpl< T >::clear(), llvm::LinearPolySize< LeafTy >::divideCoefficientBy(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), getReg(), llvm::MachineRegisterInfo::getType(), High, llvm::isPowerOf2_32(), Legalized, llvm::BitmaskEnumDetail::Mask(), MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by fewerElementsVector().
LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorUnmergeValues | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Definition at line 3857 of file LegalizerHelper.cpp.
References llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addUse(), assert(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildUnmerge(), llvm::MachineInstr::getNumOperands(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), I, llvm::LLT::isVector(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by fewerElementsVector().
|
inline |
Expose LegalizerInfo so the clients can re-use.
Definition at line 75 of file LegalizerHelper.h.
Return the alignment to use for a stack temporary object with the given type.
Definition at line 3588 of file LegalizerHelper.cpp.
References Align, llvm::LLT::getSizeInBytes(), llvm::max(), llvm::MinAlign(), and llvm::PowerOf2Ceil().
Referenced by lowerExtractInsertVectorElt().
|
inline |
Definition at line 76 of file LegalizerHelper.h.
Get a pointer to vector element Index
located in memory for a vector of type VecTy
starting at a base address of VecPtr
.
If Index
is out of bounds the returned pointer is unspecified, but will be within the vector bounds.
Definition at line 3629 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildMul(), llvm::MachineIRBuilder::buildPtrAdd(), clampDynamicVectorIndex(), llvm::LLT::getElementType(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), MIRBuilder, and Mul.
Referenced by lowerExtractInsertVectorElt().
LegalizerHelper::LegalizeResult LegalizerHelper::legalizeInstrStep | ( | MachineInstr & | MI, |
LostDebugLocObserver & | LocObserver | ||
) |
Replace MI
by a sequence of legal instructions that can implement the same operation.
Note that this means MI
may be deleted, so any iterator steps should be performed before calling this function. Helper
should be initialized to the MachineFunction containing MI
.
Considered as an opaque blob, the legal code will use and define the same registers as MI
.
Definition at line 112 of file LegalizerHelper.cpp.
References AlreadyLegal, llvm::LegacyLegalizeActions::Bitcast, bitcast(), llvm::dbgs(), llvm::LegacyLegalizeActions::FewerElements, fewerElementsVector(), llvm::LegalizerInfo::getAction(), llvm::IRSimilarity::Legal, llvm::LegalizerInfo::legalizeCustom(), Legalized, llvm::LegalizerInfo::legalizeIntrinsic(), libcall(), LLVM_DEBUG, lower(), MI, MIRBuilder, llvm::LegacyLegalizeActions::MoreElements, moreElementsVector(), llvm::LegacyLegalizeActions::NarrowScalar, narrowScalar(), llvm::MachineIRBuilder::setInstrAndDebugLoc(), UnableToLegalize, llvm::LegacyLegalizeActions::WidenScalar, and widenScalar().
Referenced by llvm::Legalizer::legalizeMachineFunction().
LegalizerHelper::LegalizeResult LegalizerHelper::libcall | ( | MachineInstr & | MI, |
LostDebugLocObserver & | LocObserver | ||
) |
Legalize an instruction by emiting a runtime library call instead.
Definition at line 790 of file LegalizerHelper.cpp.
References conversionLibcall(), llvm::createMemLibcall(), llvm::dbgs(), llvm::IntegerType::get(), llvm::Function::getContext(), llvm::Type::getDoubleTy(), llvm::Type::getFloatTy(), getFloatTypeForLLT(), llvm::MachineFunction::getFunction(), llvm::Type::getInt32Ty(), llvm::Type::getInt64Ty(), llvm::MachineIRBuilder::getMF(), llvm::MachineIRBuilder::getMRI(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), Legalized, LLVM_DEBUG, MI, MIRBuilder, simpleLibcall(), and UnableToLegalize.
Referenced by legalizeInstrStep().
LegalizerHelper::LegalizeResult LegalizerHelper::lower | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Legalize an instruction by splitting it into simpler parts, hopefully understood by the target.
Definition at line 3290 of file LegalizerHelper.cpp.
References Addr, assert(), llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildAtomicCmpXchg(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildFAdd(), llvm::MachineIRBuilder::buildFNeg(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildMul(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildXor(), llvm::MachineIRBuilder::buildZExt(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineIRBuilder::getMBB(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignMask(), llvm::LLT::getSizeInBits(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), GISEL_VECREDUCE_CASES_NONSEQ, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_ULT, llvm::LLT::isVector(), Legalized, LHS, lowerAbsToAddXor(), lowerAddSubSatToAddoSubo(), lowerAddSubSatToMinMax(), lowerBitcast(), lowerBitCount(), lowerBitreverse(), lowerBswap(), lowerDIVREM(), lowerDynStackAlloc(), lowerExtract(), lowerExtractInsertVectorElt(), lowerFCopySign(), lowerFFloor(), lowerFMad(), lowerFMinNumMaxNum(), lowerFPOWI(), lowerFPTOSI(), lowerFPTOUI(), lowerFPTRUNC(), lowerFunnelShift(), lowerInsert(), lowerIntrinsicRound(), lowerLoad(), lowerMemCpyFamily(), lowerMergeValues(), lowerMinMax(), lowerReadWriteRegister(), lowerRotate(), lowerSADDO_SSUBO(), lowerSelect(), lowerShlSat(), lowerShuffleVector(), lowerSITOFP(), lowerSMULH_UMULH(), lowerStore(), lowerUITOFP(), lowerUnmergeValues(), lowerVectorReduction(), MI, MIRBuilder, MRI, Observer, RHS, llvm::MachineIRBuilder::setInsertPt(), TII, and UnableToLegalize.
Referenced by legalizeInstrStep().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerAbsToAddXor | ( | MachineInstr & | MI | ) |
Definition at line 7331 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildXor(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), Legalized, MI, MIRBuilder, and Shift.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerAbsToMaxNeg | ( | MachineInstr & | MI | ) |
Definition at line 7348 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildSMax(), llvm::MachineIRBuilder::buildSub(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), Legalized, MI, and MIRBuilder.
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingImpl().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerAddSubSatToAddoSubo | ( | MachineInstr & | MI | ) |
Definition at line 7043 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildSelect(), llvm::LLT::changeElementSize(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignedMinValue(), llvm::MachineRegisterInfo::getType(), Legalized, LHS, llvm_unreachable, MI, MIRBuilder, and RHS.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerAddSubSatToMinMax | ( | MachineInstr & | MI | ) |
Definition at line 6966 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildNot(), llvm::MachineIRBuilder::buildSMax(), llvm::MachineIRBuilder::buildSMin(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildUMin(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::MachineRegisterInfo::getType(), Legalized, LHS, llvm_unreachable, MI, MIRBuilder, and RHS.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerBitcast | ( | MachineInstr & | MI | ) |
Definition at line 2677 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildBitcast(), llvm::MachineIRBuilder::buildMerge(), llvm::LLT::fixed_vector(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), getUnmergePieces(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerBitCount | ( | MachineInstr & | MI | ) |
Definition at line 5590 of file LegalizerHelper.cpp.
References llvm::LegalizeActionStep::Action, assert(), B, llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildCTLZ(), llvm::MachineIRBuilder::buildCTLZ_ZERO_UNDEF(), llvm::MachineIRBuilder::buildCTPOP(), llvm::MachineIRBuilder::buildCTTZ_ZERO_UNDEF(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildXor(), llvm::GISelChangeObserver::changedInstr(), llvm::LLT::changeElementSize(), llvm::GISelChangeObserver::changingInstr(), llvm::LegalizerInfo::getAction(), llvm::LLT::getSizeInBits(), llvm::APInt::getSplat(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), i, llvm::CmpInst::ICMP_EQ, llvm::IRSimilarity::Legal, Legalized, MI, MIRBuilder, Observer, llvm::PowerOf2Ceil(), TII, and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerBitreverse | ( | MachineInstr & | MI | ) |
Definition at line 7191 of file LegalizerHelper.cpp.
References llvm::ISD::BSWAP, llvm::MachineIRBuilder::buildInstr(), llvm::LLT::getSizeInBits(), llvm::APInt::getSplat(), llvm::MachineRegisterInfo::getType(), Legalized, MI, MIRBuilder, and SwapN().
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerBswap | ( | MachineInstr & | MI | ) |
Definition at line 7145 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildShl(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), i, Legalized, llvm::BitmaskEnumDetail::Mask(), MI, and MIRBuilder.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerDIVREM | ( | MachineInstr & | MI | ) |
Definition at line 7314 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildInstr(), getReg(), Legalized, MI, and MIRBuilder.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerDynStackAlloc | ( | MachineInstr & | MI | ) |
Definition at line 6743 of file LegalizerHelper.cpp.
References llvm::assumeAligned(), llvm::MachineIRBuilder::buildCast(), llvm::MachineIRBuilder::buildCopy(), llvm::LLT::getSizeInBits(), llvm::TargetLoweringBase::getStackPointerRegisterToSaveRestore(), llvm::MachineRegisterInfo::getType(), MI, MIRBuilder, llvm::LLT::scalar(), llvm::TargetFrameLowering::StackGrowsUp, and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerExtract | ( | MachineInstr & | MI | ) |
Definition at line 6780 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildBitcast(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineIRBuilder::buildUnmerge(), llvm::LLT::getElementType(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerExtractInsertVectorElt | ( | MachineInstr & | MI | ) |
Lower a vector extract or insert by writing the vector to a stack temporary and reloading the element or vector.
dst = G_EXTRACT_VECTOR_ELT vec, idx => stack_temp = G_FRAME_INDEX G_STORE vec, stack_temp idx = clamp(idx, vec.getNumElements()) element_ptr = G_PTR_ADD stack_temp, idx dst = G_LOAD element_ptr
Definition at line 6615 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildLoad(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildStore(), llvm::commonAlignment(), createStackTemporary(), llvm::dbgs(), llvm::TypeSize::Fixed(), llvm::LLT::getAddressSpace(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBytes(), getStackTemporaryAlignment(), llvm::MachineRegisterInfo::getType(), getVectorElementPointer(), llvm::MachinePointerInfo::getWithOffset(), llvm::LLT::isByteSized(), Legalized, LLVM_DEBUG, llvm::MIPatternMatch::m_ICst(), MI, llvm::MIPatternMatch::mi_match(), MIRBuilder, and UnableToLegalize.
Referenced by fewerElementsVectorExtractInsertVectorElt(), and lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFCopySign | ( | MachineInstr & | MI | ) |
Definition at line 6386 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineIRBuilder::buildZExt(), llvm::APInt::getLowBitsSet(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignMask(), llvm::MachineRegisterInfo::getType(), Legalized, MI, MIRBuilder, and Shift.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFFloor | ( | MachineInstr & | MI | ) |
Definition at line 6507 of file LegalizerHelper.cpp.
References llvm::And, llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildFAdd(), llvm::MachineIRBuilder::buildFCmp(), llvm::MachineIRBuilder::buildFConstant(), llvm::MachineIRBuilder::buildIntrinsicTrunc(), llvm::MachineIRBuilder::buildSITOFP(), llvm::LLT::changeElementSize(), llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_ONE, llvm::MachineRegisterInfo::getType(), Legalized, MI, and MIRBuilder.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFMad | ( | MachineInstr & | MI | ) |
Definition at line 6460 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildFAdd(), llvm::MachineIRBuilder::buildFMul(), llvm::MachineRegisterInfo::getType(), Legalized, MI, MIRBuilder, and Mul.
Referenced by llvm::AMDGPULegalizerInfo::legalizeFMad(), and lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFMinNumMaxNum | ( | MachineInstr & | MI | ) |
Definition at line 6430 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildFCanonicalize(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineInstr::FmNoNans, llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), llvm::isKnownNeverSNaN(), Legalized, MI, and MIRBuilder.
Referenced by llvm::AMDGPULegalizerInfo::legalizeMinNumMaxNum(), and lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPOWI | ( | MachineInstr & | MI | ) |
Definition at line 6343 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildFPow(), llvm::MachineIRBuilder::buildSITOFP(), llvm::MachineRegisterInfo::getType(), Legalized, MI, and MIRBuilder.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTOSI | ( | MachineInstr & | MI | ) |
Definition at line 6152 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildSExt(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildXor(), llvm::MachineIRBuilder::buildZExt(), llvm::Exponent, llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::APInt::getSignMask(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, Legalized, MI, MIRBuilder, llvm::MipsISD::Ret, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTOUI | ( | MachineInstr & | MI | ) |
Definition at line 6109 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildFCmp(), llvm::MachineIRBuilder::buildFConstant(), llvm::MachineIRBuilder::buildFPTOSI(), llvm::MachineIRBuilder::buildFSub(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildXor(), llvm::APFloat::convertFromAPInt(), llvm::AArch64ISD::FCMP, llvm::CmpInst::FCMP_ULT, llvm::APInt::getSignMask(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::APInt::getZero(), llvm::APFloatBase::IEEEdouble(), llvm::APFloatBase::IEEEsingle(), Legalized, MI, MIRBuilder, llvm::APFloatBase::rmNearestTiesToEven, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTRUNC | ( | MachineInstr & | MI | ) |
Definition at line 6326 of file LegalizerHelper.cpp.
References llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), lowerFPTRUNC_F64_TO_F16(), MI, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTRUNC_F64_TO_F16 | ( | MachineInstr & | MI | ) |
Definition at line 6221 of file LegalizerHelper.cpp.
References B, llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildSMax(), llvm::MachineIRBuilder::buildSMin(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineIRBuilder::buildUnmerge(), llvm::MachineIRBuilder::buildZExt(), D, E, llvm::MachineRegisterInfo::getType(), I, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, llvm::LLT::isVector(), Legalized, M, MI, MIRBuilder, N, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lowerFPTRUNC().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFunnelShift | ( | MachineInstr & | MI | ) |
Definition at line 5866 of file LegalizerHelper.cpp.
References llvm::LegalizerInfo::getAction(), llvm::MachineRegisterInfo::getType(), and MI.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFunnelShiftAsShifts | ( | MachineInstr & | MI | ) |
Definition at line 5808 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildNot(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildURem(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), isNonZeroModBitWidthOrUndef(), llvm::isPowerOf2_32(), Legalized, llvm::BitmaskEnumDetail::Mask(), MI, MIRBuilder, X, and Y.
LegalizerHelper::LegalizeResult LegalizerHelper::lowerFunnelShiftWithInverse | ( | MachineInstr & | MI | ) |
Definition at line 5766 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildNot(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildSub(), llvm::MachineInstrBuilder::getReg(), getReg(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), isNonZeroModBitWidthOrUndef(), llvm::isPowerOf2_32(), Legalized, MI, MIRBuilder, UnableToLegalize, X, and Y.
LegalizerHelper::LegalizeResult LegalizerHelper::lowerInsert | ( | MachineInstr & | MI | ) |
Definition at line 6838 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildCast(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildPtrToInt(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildUnmerge(), llvm::MachineIRBuilder::buildZExt(), llvm::dbgs(), DL, llvm::LLT::getAddressSpace(), llvm::APInt::getBitsSetWithWrap(), llvm::MachineIRBuilder::getDataLayout(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), i, llvm::LLT::isPointer(), llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, LLVM_DEBUG, llvm::BitmaskEnumDetail::Mask(), MI, MIRBuilder, llvm::Or, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerIntrinsicRound | ( | MachineInstr & | MI | ) |
Definition at line 6474 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildFAbs(), llvm::MachineIRBuilder::buildFAdd(), llvm::MachineIRBuilder::buildFCmp(), llvm::MachineIRBuilder::buildFConstant(), llvm::MachineIRBuilder::buildFCopysign(), llvm::MachineIRBuilder::buildFSub(), llvm::MachineIRBuilder::buildIntrinsicTrunc(), llvm::MachineIRBuilder::buildSelect(), llvm::LLT::changeElementSize(), llvm::CmpInst::FCMP_OGE, llvm::MachineRegisterInfo::getType(), Legalized, MI, MIRBuilder, and X.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerLoad | ( | GAnyLoad & | MI | ) |
Definition at line 2976 of file LegalizerHelper.cpp.
References llvm::TargetLoweringBase::allowsMemoryAccess(), assert(), llvm::MachineIRBuilder::buildAssertZExt(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildIntToPtr(), llvm::MachineIRBuilder::buildLoad(), llvm::MachineIRBuilder::buildLoadInstr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildPtrAdd(), llvm::MachineIRBuilder::buildSExtInReg(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineInstr::eraseFromParent(), llvm::Function::getContext(), llvm::MachineIRBuilder::getDataLayout(), llvm::GAnyLoad::getDstReg(), llvm::LLT::getElementType(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::getMemoryType(), llvm::MachineIRBuilder::getMF(), llvm::GLoadStore::getMMO(), llvm::MachineInstr::getOpcode(), llvm::MachineMemOperand::getPointerInfo(), llvm::GLoadStore::getPointerReg(), llvm::LLT::getSizeInBits(), llvm::LLT::getSizeInBytes(), llvm::MachineRegisterInfo::getType(), llvm::DataLayout::isBigEndian(), llvm::LLT::isPointer(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, MIRBuilder, llvm::Or, llvm::PowerOf2Ceil(), llvm::PowerOf2Floor(), reduceLoadStoreWidth(), llvm::LLT::scalar(), Shift, and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerMemCpyFamily | ( | MachineInstr & | MI, |
unsigned | MaxLen = 0 |
||
) |
Definition at line 7865 of file LegalizerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), llvm::TargetLoweringBase::getMaxStoresPerMemcpy(), llvm::AMDGPU::HSAMD::Kernel::Arg::Key::IsVolatile, Legalized, MI, shouldLowerMemFuncForSize(), and UnableToLegalize.
Referenced by lower(), and llvm::CombinerHelper::tryCombineMemCpyFamily().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerMemcpyInline | ( | MachineInstr & | MI | ) |
Definition at line 7610 of file LegalizerHelper.cpp.
References assert(), llvm::getIConstantVRegValWithLookThrough(), llvm::AMDGPU::HSAMD::Kernel::Arg::Key::IsVolatile, Legalized, and MI.
LegalizerHelper::LegalizeResult LegalizerHelper::lowerMergeValues | ( | MachineInstr & | MI | ) |
Definition at line 6534 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildIntToPtr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildZExt(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::dbgs(), llvm::LLT::getAddressSpace(), llvm::MachineIRBuilder::getDataLayout(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), I, llvm::DataLayout::isNonIntegralAddressSpace(), llvm::LLT::isPointer(), Legalized, LLVM_DEBUG, MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerMinMax | ( | MachineInstr & | MI | ) |
Definition at line 6370 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildSelect(), llvm::LLT::changeElementSize(), llvm::MachineRegisterInfo::getType(), Legalized, MI, minMaxToCompare(), and MIRBuilder.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerReadWriteRegister | ( | MachineInstr & | MI | ) |
Definition at line 7222 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildCopy(), llvm::StringRef::data(), llvm::MachineIRBuilder::getMF(), llvm::TargetLowering::getRegisterByName(), llvm::MDString::getString(), llvm::MachineRegisterInfo::getType(), llvm::Register::isValid(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerRotate | ( | MachineInstr & | MI | ) |
Definition at line 5904 of file LegalizerHelper.cpp.
References llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LegalizerInfo::isLegalOrCustom(), MI, MIRBuilder, and llvm::MachineIRBuilder::setInstrAndDebugLoc().
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerRotateWithReverseRotate | ( | MachineInstr & | MI | ) |
Definition at line 5890 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildSub(), llvm::MachineRegisterInfo::getType(), Legalized, MI, and MIRBuilder.
LegalizerHelper::LegalizeResult LegalizerHelper::lowerSADDO_SSUBO | ( | MachineInstr & | MI | ) |
Definition at line 6930 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildXor(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, Legalized, LHS, MI, MIRBuilder, and RHS.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerSelect | ( | MachineInstr & | MI | ) |
Definition at line 7269 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildNot(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSExtInReg(), llvm::MachineIRBuilder::buildSExtOrTrunc(), llvm::MachineIRBuilder::buildShuffleSplat(), llvm::LLT::getElementType(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerShlSat | ( | MachineInstr & | MI | ) |
Definition at line 7111 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildShl(), llvm::LLT::changeElementSize(), llvm::APInt::getMaxValue(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SLT, Legalized, LHS, MI, MIRBuilder, and RHS.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerShuffleVector | ( | MachineInstr & | MI | ) |
Definition at line 6687 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildBuildVector(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildExtractVectorElement(), llvm::MachineIRBuilder::buildUndef(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, llvm::BitmaskEnumDetail::Mask(), MI, MIRBuilder, llvm::LLT::scalar(), UnableToLegalize, and llvm::RegState::Undef.
Referenced by llvm::AMDGPULegalizerInfo::legalizeShuffleVector(), and lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerSITOFP | ( | MachineInstr & | MI | ) |
Definition at line 6063 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildFConstant(), llvm::MachineIRBuilder::buildFNeg(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildUITOFP(), llvm::MachineIRBuilder::buildXor(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_NE, Legalized, MI, MIRBuilder, S, llvm::LLT::scalar(), UnableToLegalize, and llvm::Xor.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerSMULH_UMULH | ( | MachineInstr & | MI | ) |
Definition at line 7248 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildMul(), llvm::MachineIRBuilder::buildTrunc(), llvm::LLT::changeElementSize(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), Legalized, LHS, MI, MIRBuilder, Mul, and RHS.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerStore | ( | GStore & | MI | ) |
Definition at line 3113 of file LegalizerHelper.cpp.
References llvm::TargetLoweringBase::allowsMemoryAccess(), llvm::MachineIRBuilder::buildAnyExt(), llvm::MachineIRBuilder::buildAnyExtOrTrunc(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildPtrAdd(), llvm::MachineIRBuilder::buildPtrToInt(), llvm::MachineIRBuilder::buildStore(), llvm::MachineIRBuilder::buildZExtInReg(), llvm::MachineInstr::eraseFromParent(), llvm::Function::getContext(), llvm::MachineIRBuilder::getDataLayout(), llvm::LLT::getElementType(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::getMemoryType(), llvm::MachineIRBuilder::getMF(), llvm::MachineMemOperand::getPointerInfo(), llvm::GLoadStore::getPointerReg(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::LLT::getSizeInBytes(), llvm::MachineRegisterInfo::getType(), llvm::GStore::getValueReg(), llvm::LLT::isPointer(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, llvm::MachineInstr::memoperands_begin(), MIRBuilder, llvm::PowerOf2Ceil(), llvm::PowerOf2Floor(), reduceLoadStoreWidth(), llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerU64ToF32BitOps | ( | MachineInstr & | MI | ) |
Definition at line 5979 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildAnd(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildCTLZ_ZERO_UNDEF(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildTrunc(), E, llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_UGT, Legalized, MI, MIRBuilder, and llvm::LLT::scalar().
Referenced by lowerUITOFP().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerUITOFP | ( | MachineInstr & | MI | ) |
Definition at line 6035 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildFConstant(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineRegisterInfo::getType(), Legalized, lowerU64ToF32BitOps(), MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerUnmergeValues | ( | MachineInstr & | MI | ) |
Definition at line 6575 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildTrunc(), coerceToScalar(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), I, llvm::LLT::isPointer(), Legalized, MI, MIRBuilder, Shift, and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::lowerVectorReduction | ( | MachineInstr & | MI | ) |
Definition at line 7363 of file LegalizerHelper.cpp.
References llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MCInstrInfo::get(), llvm::LLT::getSizeInBits(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isScalar(), Legalized, MI, MIRBuilder, Observer, and UnableToLegalize.
Referenced by lower().
LegalizerHelper::LegalizeResult LegalizerHelper::moreElementsVector | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | MoreTy | ||
) |
Legalize a vector instruction by increasing the number of vector elements involved and ignoring the added elements later.
Definition at line 4832 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildDeleteTrailingVectorElements(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildShuffleSplat(), llvm::MachineIRBuilder::buildUndef(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::LLT::getElementCount(), llvm::LLT::getNumElements(), llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), i, llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, moreElementsVectorDst(), moreElementsVectorPhi(), moreElementsVectorShuffle(), moreElementsVectorSrc(), Observer, and UnableToLegalize.
Referenced by legalizeInstrStep().
void LegalizerHelper::moreElementsVectorDst | ( | MachineInstr & | MI, |
LLT | MoreTy, | ||
unsigned | OpIdx | ||
) |
Legalize a single operand OpIdx
of the machine instruction MI
as a Def by performing it with additional vector elements and extracting the result elements, and replacing the vreg of the operand in place.
Definition at line 1465 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildDeleteTrailingVectorElements(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineIRBuilder::getMBB(), llvm::MachineOperand::getReg(), MI, MIRBuilder, llvm::MachineIRBuilder::setInsertPt(), and llvm::MachineOperand::setReg().
Referenced by llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), moreElementsVector(), moreElementsVectorPhi(), and moreElementsVectorShuffle().
LegalizerHelper::LegalizeResult LegalizerHelper::moreElementsVectorPhi | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | MoreTy | ||
) |
Definition at line 4813 of file LegalizerHelper.cpp.
References assert(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), E, llvm::MachineBasicBlock::getFirstNonPHI(), llvm::MachineBasicBlock::getFirstTerminator(), I, Legalized, MBB, MI, MIRBuilder, moreElementsVectorDst(), moreElementsVectorSrc(), Observer, and llvm::MachineIRBuilder::setInsertPt().
Referenced by moreElementsVector().
LegalizerHelper::LegalizeResult LegalizerHelper::moreElementsVectorShuffle | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | MoreTy | ||
) |
Definition at line 4976 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildShuffleVector(), llvm::LLT::getNumElements(), llvm::MachineRegisterInfo::getType(), I, Legalized, llvm::BitmaskEnumDetail::Mask(), MI, MIRBuilder, moreElementsVectorDst(), moreElementsVectorSrc(), llvm::MachineIRBuilder::setInstrAndDebugLoc(), and UnableToLegalize.
Referenced by moreElementsVector().
void LegalizerHelper::moreElementsVectorSrc | ( | MachineInstr & | MI, |
LLT | MoreTy, | ||
unsigned | OpIdx | ||
) |
Legalize a single operand OpIdx
of the machine instruction MI
as a Use by producing a vector with undefined high elements, extracting the original vector type, and replacing the vreg of the operand in place.
Definition at line 1475 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildPadVectorWithUndefElements(), llvm::MachineInstrBuilder::getReg(), MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by moreElementsVector(), moreElementsVectorPhi(), and moreElementsVectorShuffle().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalar | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Legalize an instruction by reducing the width of the underlying scalar type.
Definition at line 899 of file LegalizerHelper.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addUse(), assert(), llvm::MachineIRBuilder::buildAnyExt(), llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildBuildVector(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildFreeze(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildLoad(), llvm::MachineIRBuilder::buildLoadInstr(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildSExt(), llvm::MachineIRBuilder::buildStore(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineIRBuilder::buildUndef(), llvm::MachineIRBuilder::buildUnmerge(), llvm::MachineIRBuilder::buildXor(), llvm::MachineIRBuilder::buildZExt(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::dbgs(), E, llvm::LLT::getElementCount(), llvm::MachineBasicBlock::getFirstNonPHI(), llvm::MachineBasicBlock::getFirstTerminator(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineIRBuilder::getMBB(), llvm::MachineInstrBuilder::getReg(), getReg(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::ICmpInst::getUnsignedPredicate(), i, I, llvm::SmallVectorImpl< T >::insert(), llvm::ICmpInst::isEquality(), llvm::LLT::isVector(), j(), Legalized, LHS, LLVM_DEBUG, llvm::APInt::lshr(), MBB, MI, MIRBuilder, narrowScalarAddSub(), narrowScalarBasic(), narrowScalarCTLZ(), narrowScalarCTPOP(), narrowScalarCTTZ(), narrowScalarDst(), narrowScalarExt(), narrowScalarExtract(), narrowScalarFPTOI(), narrowScalarInsert(), narrowScalarMul(), narrowScalarSelect(), narrowScalarShift(), narrowScalarSrc(), Observer, llvm::Or, reduceLoadStoreWidth(), RHS, llvm::LLT::scalar(), llvm::MachineIRBuilder::setInsertPt(), llvm::MachineOperand::setReg(), llvm::APInt::trunc(), UnableToLegalize, llvm::LLT::vector(), llvm::Xor, and llvm::zip().
Referenced by llvm::MipsRegisterBankInfo::applyMappingImpl(), llvm::AMDGPURegisterBankInfo::applyMappingImpl(), llvm::AMDGPURegisterBankInfo::applyMappingLoad(), and legalizeInstrStep().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarAddSub | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Definition at line 5082 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildInstr(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::numbers::e, E, llvm::MachineRegisterInfo::getType(), i, I, llvm::LLT::isVector(), Legalized, llvm_unreachable, llvm::makeArrayRef(), MI, MIRBuilder, llvm::SmallVectorImpl< T >::reserve(), llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarBasic | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5384 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildInstr(), E, llvm::MachineRegisterInfo::getType(), I, Legalized, llvm_unreachable, MI, MIRBuilder, and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarCTLZ | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5493 of file LegalizerHelper.cpp.
References B, llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_EQ, llvm::LLT::isScalar(), Legalized, MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarCTPOP | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5565 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAdd(), llvm::MachineIRBuilder::buildCTPOP(), llvm::MachineIRBuilder::buildUnmerge(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isScalar(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarCTTZ | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5529 of file LegalizerHelper.cpp.
References B, llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_EQ, llvm::LLT::isScalar(), Legalized, MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
void LegalizerHelper::narrowScalarDst | ( | MachineInstr & | MI, |
LLT | NarrowTy, | ||
unsigned | OpIdx, | ||
unsigned | ExtOpcode | ||
) |
Definition at line 1456 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildInstr(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineIRBuilder::getMBB(), MI, MIRBuilder, llvm::MachineIRBuilder::setInsertPt(), and llvm::MachineOperand::setReg().
Referenced by narrowScalar(), and narrowScalarFPTOI().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarExt | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5425 of file LegalizerHelper.cpp.
References llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), Legalized, MI, and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarExtract | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5233 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildBuildVector(), llvm::MachineIRBuilder::buildCopy(), llvm::MachineIRBuilder::buildExtract(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), i, llvm::LLT::isVector(), Legalized, MI, llvm::min(), MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarFPTOI | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5208 of file LegalizerHelper.cpp.
References llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::MachineRegisterInfo::getType(), Legalized, MI, narrowScalarDst(), Observer, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarInsert | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5300 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAnyExt(), llvm::MachineIRBuilder::buildExtract(), llvm::MachineIRBuilder::buildInsert(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), E, llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), I, Legalized, MI, llvm::min(), MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarMul | ( | MachineInstr & | MI, |
LLT | Ty | ||
) |
Definition at line 5176 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildMerge(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarSelect | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 5447 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildSelect(), E, llvm::MachineRegisterInfo::getType(), I, llvm::LLT::isVector(), Legalized, llvm_unreachable, MI, MIRBuilder, llvm::MCID::Select, and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarShift | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | Ty | ||
) |
Definition at line 4704 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildICmp(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSelect(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildUnmerge(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getScalarSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_ULT, llvm::LLT::isVector(), Legalized, llvm_unreachable, MI, MIRBuilder, narrowScalarShiftByConstant(), narrowScalarSrc(), Observer, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarShiftByConstant | ( | MachineInstr & | MI, |
const APInt & | Amt, | ||
LLT | HalfTy, | ||
LLT | ShiftAmtTy | ||
) |
Definition at line 4615 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildAShr(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildShl(), llvm::MachineIRBuilder::buildUnmerge(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::LLT::getSizeInBits(), llvm::APInt::isZero(), Legalized, MI, MIRBuilder, and llvm::APInt::ugt().
Referenced by narrowScalarShift().
void LegalizerHelper::narrowScalarSrc | ( | MachineInstr & | MI, |
LLT | NarrowTy, | ||
unsigned | OpIdx | ||
) |
Legalize a single operand OpIdx
of the machine instruction MI
as a Use by truncating the operand's type to NarrowTy
using G_TRUNC, and replacing the vreg of the operand in place.
Definition at line 1440 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildTrunc(), MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by narrowScalar(), and narrowScalarShift().
LegalizerHelper::LegalizeResult LegalizerHelper::reduceLoadStoreWidth | ( | GLoadStore & | MI, |
unsigned | TypeIdx, | ||
LLT | NarrowTy | ||
) |
Definition at line 4067 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildLoad(), llvm::MachineIRBuilder::buildStore(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::dbgs(), E, llvm::MachineInstr::eraseFromParent(), llvm::MachineIRBuilder::getDataLayout(), llvm::MachineFunction::getMachineMemOperand(), llvm::GLoadStore::getMemSize(), llvm::MachineIRBuilder::getMF(), llvm::GLoadStore::getMMO(), getNarrowTypeBreakDown(), llvm::GLoadStore::getPointerReg(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), llvm::GLoadStore::isAtomic(), isBigEndian(), llvm::DataLayout::isBigEndian(), llvm::LLT::isValid(), Legalized, LLVM_DEBUG, llvm::MachineIRBuilder::materializePtrAdd(), MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingLoad(), fewerElementsVector(), lowerLoad(), lowerStore(), and narrowScalar().
LegalizerHelper::LegalizeResult LegalizerHelper::widenScalar | ( | MachineInstr & | MI, |
unsigned | TypeIdx, | ||
LLT | WideTy | ||
) |
Legalize an instruction by performing the operation on a wider scalar type (for example a 16-bit addition can be safely performed at 32-bits precision, ignoring the unused bits).
Definition at line 2058 of file LegalizerHelper.cpp.
References assert(), llvm::MachineIRBuilder::buildConstant(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::buildLShr(), llvm::MachineIRBuilder::buildOr(), llvm::MachineIRBuilder::buildSub(), llvm::MachineIRBuilder::buildTrunc(), llvm::MachineIRBuilder::buildZExtOrTrunc(), llvm::GISelChangeObserver::changedInstr(), llvm::GISelChangeObserver::changingInstr(), llvm::APFloat::convert(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), E, llvm::MCInstrInfo::get(), llvm::ConstantInt::get(), llvm::ConstantFP::get(), llvm::MachineIRBuilder::getBoolExtOp(), llvm::MachineOperand::getCImm(), llvm::Function::getContext(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::LegalizerInfo::getExtOpcodeForWideningConstant(), llvm::MachineBasicBlock::getFirstNonPHI(), llvm::MachineBasicBlock::getFirstTerminator(), llvm::MachineOperand::getFPImm(), llvm::MachineFunction::getFunction(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineIRBuilder::getMBB(), llvm::MachineIRBuilder::getMF(), llvm::APInt::getOneBitSet(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::MachineIRBuilder::getTII(), llvm::MachineRegisterInfo::getType(), llvm::ConstantInt::getValue(), llvm::ConstantFP::getValueAPF(), I, llvm::APFloatBase::IEEEdouble(), llvm::APFloatBase::IEEEsingle(), llvm::LLT::isScalar(), llvm::CmpInst::isSigned(), llvm::LLT::isVector(), Legalized, MBB, MI, MIRBuilder, Observer, llvm::APFloatBase::rmNearestTiesToEven, llvm::MachineOperand::setCImm(), llvm::MachineOperand::setFPImm(), llvm::MachineIRBuilder::setInsertPt(), llvm::APInt::sext(), Shift, UnableToLegalize, llvm::LLT::vector(), widenScalarDst(), widenScalarSrc(), and llvm::APInt::zext().
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingImpl(), and legalizeInstrStep().
void LegalizerHelper::widenScalarDst | ( | MachineInstr & | MI, |
LLT | WideTy, | ||
unsigned | OpIdx = 0 , |
||
unsigned | TruncOpcode = TargetOpcode::G_TRUNC |
||
) |
Legalize a single operand OpIdx
of the machine instruction MI
as a Def by extending the operand's type to WideTy
and truncating it back with the TruncOpcode
, and replacing the vreg of the operand in place.
Definition at line 1447 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildInstr(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::MachineIRBuilder::getInsertPt(), llvm::MachineIRBuilder::getMBB(), MI, MIRBuilder, llvm::MachineIRBuilder::setInsertPt(), and llvm::MachineOperand::setReg().
Referenced by llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), and widenScalar().
void LegalizerHelper::widenScalarSrc | ( | MachineInstr & | MI, |
LLT | WideTy, | ||
unsigned | OpIdx, | ||
unsigned | ExtOpcode | ||
) |
Legalize a single operand OpIdx
of the machine instruction MI
as a Use by extending the operand's type to WideTy
using the specified ExtOpcode
for the extension instruction, and replacing the vreg of the operand in place.
Definition at line 1433 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildInstr(), MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by widenScalar().
Widen OrigReg
to WideTy
by merging to a wider type, padding with G_IMPLICIT_DEF, and producing dead results.
Definition at line 1617 of file LegalizerHelper.cpp.
References llvm::MachineIRBuilder::buildMerge(), llvm::MachineIRBuilder::buildUndef(), llvm::MachineIRBuilder::buildUnmerge(), llvm::MachineRegisterInfo::createGenericVirtualRegister(), llvm::getLCMType(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), llvm::MachineRegisterInfo::getType(), I, MIRBuilder, and llvm::RegState::Undef.
MachineIRBuilder& llvm::LegalizerHelper::MIRBuilder |
Expose MIRBuilder so clients can set their own RecordInsertInstruction functions.
Definition at line 50 of file LegalizerHelper.h.
Referenced by bitcastDst(), bitcastExtractVectorElt(), bitcastInsertVectorElt(), bitcastSrc(), coerceToScalar(), convertPtrToInt(), createStackTemporary(), fewerElementsVectorExtractInsertVectorElt(), fewerElementsVectorMerge(), fewerElementsVectorMultiEltType(), fewerElementsVectorPhi(), fewerElementsVectorReductions(), fewerElementsVectorShuffle(), fewerElementsVectorUnmergeValues(), getVectorElementPointer(), llvm::MipsLegalizerInfo::legalizeCustom(), llvm::AArch64LegalizerInfo::legalizeCustom(), llvm::ARMLegalizerInfo::legalizeCustom(), llvm::SPIRVLegalizerInfo::legalizeCustom(), llvm::AMDGPULegalizerInfo::legalizeCustom(), legalizeInstrStep(), llvm::MipsLegalizerInfo::legalizeIntrinsic(), llvm::AArch64LegalizerInfo::legalizeIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeLoad(), llvm::Legalizer::legalizeMachineFunction(), llvm::AMDGPULegalizerInfo::legalizeMinNumMaxNum(), llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), libcall(), lower(), lowerAbsToAddXor(), lowerAbsToMaxNeg(), lowerAddSubSatToAddoSubo(), lowerAddSubSatToMinMax(), lowerBitcast(), lowerBitCount(), lowerBitreverse(), lowerBswap(), lowerDIVREM(), lowerDynStackAlloc(), lowerExtract(), lowerExtractInsertVectorElt(), lowerFCopySign(), lowerFFloor(), lowerFMad(), lowerFMinNumMaxNum(), lowerFPOWI(), lowerFPTOSI(), lowerFPTOUI(), lowerFPTRUNC_F64_TO_F16(), lowerFunnelShiftAsShifts(), lowerFunnelShiftWithInverse(), lowerInsert(), lowerIntrinsicRound(), lowerLoad(), lowerMergeValues(), lowerMinMax(), lowerReadWriteRegister(), lowerRotate(), lowerRotateWithReverseRotate(), lowerSADDO_SSUBO(), lowerSelect(), lowerShlSat(), lowerShuffleVector(), lowerSITOFP(), lowerSMULH_UMULH(), lowerStore(), lowerU64ToF32BitOps(), lowerUITOFP(), lowerUnmergeValues(), lowerVectorReduction(), moreElementsVector(), moreElementsVectorDst(), moreElementsVectorPhi(), moreElementsVectorShuffle(), moreElementsVectorSrc(), narrowScalar(), narrowScalarAddSub(), narrowScalarBasic(), narrowScalarCTLZ(), narrowScalarCTPOP(), narrowScalarCTTZ(), narrowScalarDst(), narrowScalarExtract(), narrowScalarInsert(), narrowScalarMul(), narrowScalarSelect(), narrowScalarShift(), narrowScalarShiftByConstant(), narrowScalarSrc(), reduceLoadStoreWidth(), widenScalar(), widenScalarDst(), widenScalarSrc(), and widenWithUnmerge().
GISelChangeObserver& llvm::LegalizerHelper::Observer |
To keep track of changes made by the LegalizerHelper.
Definition at line 53 of file LegalizerHelper.h.
Referenced by bitcast(), llvm::AArch64LegalizerInfo::legalizeCustom(), llvm::AMDGPULegalizerInfo::legalizeDSAtomicFPIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeLoad(), llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), lower(), lowerBitCount(), lowerVectorReduction(), moreElementsVector(), moreElementsVectorPhi(), narrowScalar(), narrowScalarFPTOI(), narrowScalarShift(), and widenScalar().