|
LLVM 24.0.0git
|
#include "llvm/CodeGen/GlobalISel/LegalizerHelper.h"
Classes | |
| struct | ShiftParams |
Public Types | |
| enum | LegalizeResult { AlreadyLegal , Legalized , UnableToLegalize } |
Public Attributes | |
| MachineIRBuilder & | MIRBuilder |
| Expose MIRBuilder so clients can set their own RecordInsertInstruction functions. | |
| GISelChangeObserver & | Observer |
| To keep track of changes made by the LegalizerHelper. | |
Definition at line 49 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 67 of file LegalizerHelper.h.
| LegalizerHelper::LegalizerHelper | ( | MachineFunction & | MF, |
| GISelChangeObserver & | Observer, | ||
| MachineIRBuilder & | B, | ||
| const LibcallLoweringInfo * | Libcalls = nullptr ) |
Definition at line 105 of file LegalizerHelper.cpp.
References getLegalizerInfo(), getTargetLowering(), MIRBuilder, and Observer.
| LegalizerHelper::LegalizerHelper | ( | MachineFunction & | MF, |
| const LegalizerInfo & | LI, | ||
| GISelChangeObserver & | Observer, | ||
| MachineIRBuilder & | B, | ||
| const LibcallLoweringInfo * | Libcalls = nullptr, | ||
| GISelValueTracking * | VT = nullptr ) |
Definition at line 113 of file LegalizerHelper.cpp.
References B(), getTargetLowering(), MIRBuilder, and Observer.
| LegalizerHelper::LegalizeResult LegalizerHelper::bitcast | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Legalize an instruction by replacing the value type.
Definition at line 4611 of file LegalizerHelper.cpp.
References bitcastConcatVector(), bitcastDst(), bitcastExtractSubvector(), bitcastExtractVectorElt(), bitcastInsertSubvector(), bitcastInsertVectorElt(), bitcastShuffleVector(), bitcastSrc(), llvm::MachineMemOperand::clearRanges(), llvm::dbgs(), llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getSizeInBits(), Legalized, LLVM_DEBUG, MI, Observer, llvm::MachineMemOperand::setType(), and UnableToLegalize.
Referenced by legalizeInstrStep().
| LegalizerHelper::LegalizeResult LegalizerHelper::bitcastConcatVector | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | CastTy ) |
Definition at line 4109 of file LegalizerHelper.cpp.
References llvm::dyn_cast(), llvm::LLT::getScalarType(), MI, and UnableToLegalize.
Referenced by bitcast().
| 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 2257 of file LegalizerHelper.cpp.
References MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by bitcast(), llvm::AMDGPULegalizerInfo::legalizeBufferLoad(), and llvm::AMDGPULegalizerInfo::legalizeSBufferLoad().
| LegalizerHelper::LegalizeResult LegalizerHelper::bitcastExtractSubvector | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | CastTy ) |
This attempts to bitcast G_EXTRACT_SUBVECTOR to CastTy.
<vscale x 8 x i1> = G_EXTRACT_SUBVECTOR <vscale x 16 x i1>, N
===>
<vscale x 2 x i1> = G_BITCAST <vscale x 16 x i1> <vscale x 1 x i8> = G_EXTRACT_SUBVECTOR <vscale x 2 x i1>, N / 8 <vscale x 8 x i1> = G_BITCAST <vscale x 1 x i8>
Definition at line 4188 of file LegalizerHelper.cpp.
References llvm::cast(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::divideCoefficientBy(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::LLT::getSizeInBits(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, UnableToLegalize, and llvm::LLT::vector().
Referenced by bitcast().
| 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 3900 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementCount(), getBitcastWiderVectorElementOffset(), llvm::LLT::getElementType(), llvm::ElementCount::getFixed(), llvm::LLT::getNumElements(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), I, llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, llvm::Log2_32(), MI, MIRBuilder, and UnableToLegalize.
Referenced by bitcast().
| LegalizerHelper::LegalizeResult LegalizerHelper::bitcastInsertSubvector | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | CastTy ) |
This attempts to bitcast G_INSERT_SUBVECTOR to CastTy.
<vscale x 16 x i1> = G_INSERT_SUBVECTOR <vscale x 16 x i1>, <vscale x 8 x i1>, N
===>
<vscale x 2 x i8> = G_BITCAST <vscale x 16 x i1> <vscale x 1 x i8> = G_BITCAST <vscale x 8 x i1> <vscale x 2 x i8> = G_INSERT_SUBVECTOR <vscale x 2 x i8>, <vscale x 1 x i8>, N / 8 <vscale x 16 x i1> = G_BITCAST <vscale x 2 x i8>
Definition at line 4251 of file LegalizerHelper.cpp.
References llvm::cast(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::divideCoefficientBy(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::LLT::getSizeInBits(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, UnableToLegalize, and llvm::LLT::vector().
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 4036 of file LegalizerHelper.cpp.
References buildBitFieldInsert(), getBitcastWiderVectorElementOffset(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBits(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, llvm::Log2_32(), MI, MIRBuilder, and UnableToLegalize.
Referenced by bitcast().
| LegalizerHelper::LegalizeResult LegalizerHelper::bitcastShuffleVector | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | CastTy ) |
Definition at line 4154 of file LegalizerHelper.cpp.
References llvm::cast(), llvm::LLT::changeElementType(), llvm::LLT::getElementCount(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), Legalized, 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 2252 of file LegalizerHelper.cpp.
References MI, and MIRBuilder.
Referenced by bitcast().
| Register LegalizerHelper::buildConstantShiftPart | ( | unsigned | Opcode, |
| unsigned | PartIdx, | ||
| unsigned | NumParts, | ||
| ArrayRef< Register > | SrcParts, | ||
| const ShiftParams & | Params, | ||
| LLT | TargetTy, | ||
| LLT | ShiftAmtTy ) |
Generates a single output part for constant shifts using direct indexing.
Calculates which source parts contribute and how they're combined.
Definition at line 6564 of file LegalizerHelper.cpp.
References assert(), llvm::LegalizerHelper::ShiftParams::BitShift, llvm::getIConstantVRegVal(), llvm::Hi, llvm::LegalizerHelper::ShiftParams::InvBitShift, llvm_unreachable, llvm::Lo, MIRBuilder, llvm::LegalizerHelper::ShiftParams::SignBit, llvm::LegalizerHelper::ShiftParams::WordShift, and llvm::LegalizerHelper::ShiftParams::Zero.
Referenced by narrowScalarShiftByConstantMultiway().
| Register LegalizerHelper::buildVariableShiftPart | ( | unsigned | Opcode, |
| Register | MainOperand, | ||
| Register | ShiftAmt, | ||
| LLT | TargetTy, | ||
| Register | CarryOperand = Register() ) |
Generates a shift part with carry for variable shifts.
Combines main operand shifted by BitShift with carry bits from adjacent operand.
Definition at line 6641 of file LegalizerHelper.cpp.
References getReg(), llvm::LLT::getScalarSizeInBits(), llvm::CmpInst::ICMP_EQ, llvm::LLT::integer(), llvm::Register::isValid(), and MIRBuilder.
Referenced by narrowScalarShiftMultiway().
Cast the given value to an LLT::integer 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 2162 of file LegalizerHelper.cpp.
References assert(), DL, llvm::LLT::integer(), MIRBuilder, and Register.
Referenced by lowerUnmergeValues().
| LegalizerHelper::LegalizeResult LegalizerHelper::conversionLibcall | ( | MachineInstr & | MI, |
| Type * | ToType, | ||
| Type * | FromType, | ||
| LostDebugLocObserver & | LocObserver, | ||
| bool | IsSigned = false ) const |
Definition at line 786 of file LegalizerHelper.cpp.
References createLibcall(), llvm::CallLowering::BaseArgInfo::Flags, getConvRTLibDesc(), llvm::LegalizeActions::Libcall, and MI.
Referenced by libcall().
| LegalizerHelper::LegalizeResult LegalizerHelper::createAtomicLibcall | ( | MachineInstr & | MI | ) | const |
Definition at line 948 of file LegalizerHelper.cpp.
References llvm::append_range(), llvm::CallLowering::CallLoweringInfo::CallConv, llvm::MachineOperand::CreateES(), llvm::StringRef::data(), llvm::dbgs(), llvm::IntegerType::get(), llvm::PointerType::get(), llvm::StructType::get(), llvm::RTLIB::RuntimeLibcallsInfo::getLibcallImplName(), getOutlineAtomicLibcall(), llvm::LLT::getSizeInBits(), Legalized, LLVM_DEBUG, llvm_unreachable, MI, MIRBuilder, Opc, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::Success, and UnableToLegalize.
Referenced by libcall().
| LegalizerHelper::LegalizeResult LegalizerHelper::createLibcall | ( | const char * | Name, |
| const CallLowering::ArgInfo & | Result, | ||
| ArrayRef< CallLowering::ArgInfo > | Args, | ||
| CallingConv::ID | CC, | ||
| LostDebugLocObserver & | LocObserver, | ||
| MachineInstr * | MI = nullptr ) const |
Helper function that creates a libcall to the given Name using the given calling convention CC.
Definition at line 598 of file LegalizerHelper.cpp.
References llvm::append_range(), assert(), llvm::CallLowering::CallLoweringInfo::CallConv, CC, llvm::LostDebugLocObserver::checkpoint(), llvm::MachineOperand::CreateES(), hasSwiftErrorArg(), isLibCallInTailPosition(), Legalized, MI, MIRBuilder, llvm::Next, and UnableToLegalize.
Referenced by conversionLibcall(), createLibcall(), llvm::ARMLegalizerInfo::legalizeCustom(), libcall(), and simpleLibcall().
| LegalizerHelper::LegalizeResult LegalizerHelper::createLibcall | ( | RTLIB::Libcall | Libcall, |
| const CallLowering::ArgInfo & | Result, | ||
| ArrayRef< CallLowering::ArgInfo > | Args, | ||
| LostDebugLocObserver & | LocObserver, | ||
| MachineInstr * | MI = nullptr ) const |
Helper function that creates the given libcall.
Definition at line 646 of file LegalizerHelper.cpp.
References CC, createLibcall(), llvm::RTLIB::RuntimeLibcallsInfo::getLibcallImplName(), llvm::LegalizeActions::Libcall, MI, and UnableToLegalize.
| LegalizerHelper::LegalizeResult LegalizerHelper::createMemLibcall | ( | MachineRegisterInfo & | MRI, |
| MachineInstr & | MI, | ||
| LostDebugLocObserver & | LocObserver ) const |
Create a libcall to memcpy et al.
Definition at line 803 of file LegalizerHelper.cpp.
References llvm::append_range(), assert(), llvm::CallLowering::CallLoweringInfo::CallConv, llvm::LostDebugLocObserver::checkpoint(), llvm::MachineOperand::CreateES(), llvm::StringRef::data(), llvm::dbgs(), llvm::IntegerType::get(), llvm::PointerType::get(), llvm::LLT::getAddressSpace(), llvm::RTLIB::RuntimeLibcallsInfo::getLibcallImplName(), llvm::LLT::getSizeInBits(), llvm::Type::getVoidTy(), hasSwiftErrorArg(), isLibCallInTailPosition(), llvm::LLT::isPointer(), Legalized, LLVM_DEBUG, llvm_unreachable, MI, MIRBuilder, llvm::Next, Opc, and UnableToLegalize.
Referenced by libcall().
| MachineInstrBuilder LegalizerHelper::createStackStoreLoad | ( | const DstOp & | Res, |
| const SrcOp & | Val ) |
Create a store of Val to a stack temporary and return a load as the same type as Res.
Definition at line 5213 of file LegalizerHelper.cpp.
References createStackTemporary(), llvm::DstOp::getLLTTy(), llvm::SrcOp::getLLTTy(), getStackTemporaryAlignment(), and MIRBuilder.
| 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 5200 of file LegalizerHelper.cpp.
References llvm::MachineFrameInfo::CreateStackObject(), DL, llvm::MachinePointerInfo::getFixedStack(), llvm::MachineFunction::getFrameInfo(), MIRBuilder, and llvm::LLT::pointer().
Referenced by createStackStoreLoad(), createStackTemporaryForVector(), lowerExtractInsertVectorElt(), lowerFPExtAndTruncMem(), and lowerVECTOR_COMPRESS().
| LegalizerHelper::LegalizeResult LegalizerHelper::equalizeVectorShuffleLengths | ( | MachineInstr & | MI | ) |
Equalize source and destination vector sizes of G_SHUFFLE_VECTOR.
Definition at line 7243 of file LegalizerHelper.cpp.
References llvm::alignTo(), llvm::SmallVectorTemplateCommon< T, typename >::begin(), llvm::LLT::changeVectorElementCount(), llvm::copy(), llvm::LLT::getElementType(), llvm::ElementCount::getFixed(), I, Legalized, MI, MIRBuilder, moreElementsVectorDst(), and llvm::Undef.
Referenced by moreElementsVectorShuffle().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsBitcast | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 6013 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::changeVectorElementCount(), llvm::LLT::getElementType(), llvm::ElementCount::getFixed(), llvm::LLT::getSizeInBits(), getUnmergeResults(), Legalized, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and UnableToLegalize.
Referenced by fewerElementsVector().
| 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 5803 of file LegalizerHelper.cpp.
References assert(), llvm::cast(), fewerElementsBitcast(), fewerElementsVectorExtractInsertVectorElt(), fewerElementsVectorMerge(), fewerElementsVectorMultiEltType(), fewerElementsVectorPhi(), fewerElementsVectorReductions(), fewerElementsVectorSeqReductions(), fewerElementsVectorShuffle(), fewerElementsVectorUnmergeValues(), llvm::LLT::getElementCount(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBits(), GISEL_VECREDUCE_CASES_NONSEQ, llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isKnownMultipleOf(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, reduceLoadStoreWidth(), and UnableToLegalize.
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingLoad(), and legalizeInstrStep().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorExtractInsertVectorElt | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 5622 of file LegalizerHelper.cpp.
References assert(), llvm::extractParts(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getNumElements(), llvm::LLT::isVector(), Legalized, lowerExtractInsertVectorElt(), MI, and MIRBuilder.
Referenced by fewerElementsVector().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorMerge | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 5536 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::getNumElements(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, llvm::Offset, llvm::SmallVectorTemplateBase< T, bool >::push_back(), 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 5364 of file LegalizerHelper.cpp.
References llvm::append_range(), assert(), broadcastSrcOp(), llvm::extractVectorParts(), hasSameNumEltsOnAllVectorOperands(), I, llvm::is_contained(), Legalized, makeDstOps(), MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::size(), and Uses.
Referenced by fewerElementsVector().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorPhi | ( | GenericMachineInstr & | MI, |
| unsigned | NumElts ) |
Definition at line 5434 of file LegalizerHelper.cpp.
References llvm::extractVectorParts(), llvm::MachineBasicBlock::getFirstTerminatorForward(), Legalized, makeDstOps(), MBB, MI, MIRBuilder, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
Referenced by fewerElementsVector().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorReductions | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 6190 of file LegalizerHelper.cpp.
References assert(), llvm::cast(), llvm::SmallVectorImpl< T >::clear(), llvm::SmallVectorImpl< T >::emplace_back(), llvm::extractParts(), llvm::LLT::getNumElements(), getReg(), llvm::isPowerOf2_32(), llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by fewerElementsVector().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorSeqReductions | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 6283 of file LegalizerHelper.cpp.
References assert(), llvm::extractParts(), llvm::LLT::isScalar(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by fewerElementsVector().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorShuffle | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 6050 of file LegalizerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, assert(), llvm::LLT::changeElementCount(), llvm::extractParts(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::Hi, High, llvm::LLT::integer(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, llvm::Lo, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and UnableToLegalize.
Referenced by fewerElementsVector().
| LegalizerHelper::LegalizeResult LegalizerHelper::fewerElementsVectorUnmergeValues | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 5487 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), I, llvm::LLT::isVector(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by fewerElementsVector().
| Register LegalizerHelper::getDynStackAllocTargetPtr | ( | Register | SPReg, |
| Register | AllocSize, | ||
| Align | Alignment, | ||
| LLT | PtrTy ) |
Definition at line 9844 of file LegalizerHelper.cpp.
References llvm::Alloc, llvm::LLT::getSizeInBits(), llvm::LLT::integer(), llvm::IntPtrTy, MIRBuilder, llvm::APInt::negate(), and SPReg.
Referenced by lowerDynStackAlloc().
|
inline |
Expose LegalizerInfo so the clients can re-use.
Definition at line 81 of file LegalizerHelper.h.
Referenced by LegalizerHelper().
|
inline |
Definition at line 83 of file LegalizerHelper.h.
Return the alignment to use for a stack temporary object with the given type.
Definition at line 5189 of file LegalizerHelper.cpp.
References llvm::MinAlign(), and llvm::PowerOf2Ceil().
Referenced by createStackStoreLoad(), createStackTemporaryForVector(), legalizeSpvExtractElt(), legalizeSpvInsertElt(), lowerExtractInsertVectorElt(), lowerFPExtAndTruncMem(), and lowerVECTOR_COMPRESS().
|
inline |
Definition at line 82 of file LegalizerHelper.h.
Referenced by LegalizerHelper(), and LegalizerHelper().
|
inline |
Definition at line 84 of file LegalizerHelper.h.
Referenced by llvm::AMDGPULegalizerInfo::buildMultiply(), and llvm::AMDGPULegalizerInfo::legalizeFPow().
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 5248 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::changeElementSize(), clampVectorIndex(), DL, llvm::LLT::getElementType(), llvm::LLT::getSizeInBits(), MIRBuilder, and llvm::Mul.
Referenced by lowerExtractInsertVectorElt(), lowerVECTOR_COMPRESS(), and llvm::CombinerHelper::matchCombineExtractedVectorLoad().
| 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 122 of file LegalizerHelper.cpp.
References AlreadyLegal, llvm::LegalizeActions::Bitcast, bitcast(), llvm::Custom, llvm::dbgs(), llvm::LegalizeActions::FewerElements, fewerElementsVector(), llvm::isa(), llvm::LegalizeActions::Legal, Legalized, llvm::LegalizeActions::Libcall, llvm::libcall, LLVM_DEBUG, llvm::Lower, lower(), MI, MIRBuilder, llvm::LegalizeActions::MoreElements, moreElementsVector(), llvm::LegalizeActions::NarrowScalar, narrowScalar(), UnableToLegalize, llvm::LegalizeActions::WidenScalar, and widenScalar().
Referenced by llvm::legalizeMachineFunction().
| LegalizerHelper::LegalizeResult LegalizerHelper::libcall | ( | MachineInstr & | MI, |
| LostDebugLocObserver & | LocObserver ) |
Legalize an instruction by emiting a runtime library call instead.
Definition at line 1331 of file LegalizerHelper.cpp.
References conversionLibcall(), createAtomicLibcall(), createLibcall(), createMemLibcall(), llvm::dbgs(), llvm::IntegerType::get(), getFloatTypeForLLT(), llvm::Type::getIntNTy(), getRTLibDesc(), llvm::LLT::getSizeInBits(), Legalized, llvm::LegalizeActions::Libcall, LLVM_DEBUG, MI, MIRBuilder, simpleLibcall(), llvm::Size, and UnableToLegalize.
| 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 4699 of file LegalizerHelper.cpp.
References assert(), llvm::cast(), llvm::LLT::changeElementType(), llvm::LLT::getNumElements(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::APInt::getSignMask(), llvm::LLT::getSizeInBits(), GISEL_VECREDUCE_CASES_NONSEQ, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULT, llvm::LLT::integer(), Legalized, lowerAbsDiffToMinMax(), lowerAbsDiffToSelect(), lowerAbsToAddXor(), lowerAddSubSatToAddoSubo(), lowerAddSubSatToMinMax(), lowerBitcast(), lowerBitCount(), lowerBitreverse(), lowerBswap(), lowerDIVREM(), lowerDynStackAlloc(), lowerEXT(), lowerExtract(), lowerExtractInsertVectorElt(), lowerFAbs(), lowerFConstant(), lowerFCopySign(), lowerFFloor(), lowerFMad(), lowerFMinimumMaximum(), lowerFMinNumMaxNum(), lowerFMODF(), lowerFPEXT(), lowerFPOWI(), lowerFPTOINT_SAT(), lowerFPTOSI(), lowerFPTOUI(), lowerFPTRUNC(), lowerFunnelShift(), lowerInsert(), lowerIntrinsicRound(), lowerISFPCLASS(), lowerLoad(), lowerMemCpyFamily(), lowerMergeValues(), lowerMinMax(), lowerMulfix(), lowerReadWriteRegister(), lowerRotate(), lowerSADDE(), lowerSADDO_SSUBO(), lowerSelect(), lowerShlSat(), lowerShuffleVector(), lowerSITOFP(), lowerSMULH_UMULH(), lowerSSUBE(), lowerStackRestore(), lowerStackSave(), lowerStore(), lowerThreewayCompare(), lowerTRUNC(), lowerTruncSat(), lowerUITOFP(), lowerUnmergeValues(), lowerVAArg(), lowerVECTOR_COMPRESS(), lowerVectorReduction(), MI, MIRBuilder, Observer, llvm::SmallVectorTemplateBase< T, bool >::push_back(), TII, UnableToLegalize, and llvm::Vector.
Referenced by legalizeInstrStep().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerAbsDiffToMinMax | ( | MachineInstr & | MI | ) |
Definition at line 10888 of file LegalizerHelper.cpp.
References assert(), Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerAbsDiffToSelect | ( | MachineInstr & | MI | ) |
Definition at line 10865 of file LegalizerHelper.cpp.
References assert(), llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_UGT, Legalized, MI, MIRBuilder, and llvm::LLT::scalar().
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerAbsToAddXor | ( | MachineInstr & | MI | ) |
Definition at line 10820 of file LegalizerHelper.cpp.
References llvm::Add, llvm::LLT::getScalarSizeInBits(), Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerAbsToCNeg | ( | MachineInstr & | MI | ) |
Definition at line 10852 of file LegalizerHelper.cpp.
References llvm::CmpInst::ICMP_SGT, llvm::LLT::integer(), Legalized, MI, MIRBuilder, and llvm::Sub.
Referenced by llvm::AArch64LegalizerInfo::legalizeCustom().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerAbsToMaxNeg | ( | MachineInstr & | MI | ) |
Definition at line 10837 of file LegalizerHelper.cpp.
References Legalized, MI, MIRBuilder, and llvm::Sub.
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingImpl(), and llvm::RISCVLegalizerInfo::legalizeCustom().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerAddSubSatToAddoSubo | ( | MachineInstr & | MI | ) |
Definition at line 10250 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementSize(), llvm::APInt::getSignedMinValue(), Legalized, llvm_unreachable, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerAddSubSatToMinMax | ( | MachineInstr & | MI | ) |
Definition at line 10175 of file LegalizerHelper.cpp.
References llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::Hi, Legalized, llvm_unreachable, llvm::Lo, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerBitcast | ( | MachineInstr & | MI | ) |
Definition at line 3764 of file LegalizerHelper.cpp.
References llvm::LLT::changeVectorElementCount(), llvm::LLT::getElementType(), llvm::ElementCount::getFixed(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::getKnownMinValue(), llvm::LLT::getScalarSizeInBits(), getUnmergePieces(), llvm::LLT::integer(), llvm::LLT::isByteSized(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::isKnownMultipleOf(), Legalized, MI, MIRBuilder, UnableToLegalize, and llvm::LLT::vector().
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerBitCount | ( | MachineInstr & | MI | ) |
Definition at line 7985 of file LegalizerHelper.cpp.
References assert(), B(), llvm::Custom, llvm::APInt::getSplat(), llvm::CmpInst::ICMP_EQ, llvm::LegalizeActions::Legal, Legalized, llvm::LegalizeActions::Libcall, MI, MIRBuilder, Observer, Opc, llvm::PowerOf2Ceil(), llvm::Size, TII, UnableToLegalize, llvm::LegalizeActions::WidenScalar, and llvm::Xor.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerBitreverse | ( | MachineInstr & | MI | ) |
Definition at line 10425 of file LegalizerHelper.cpp.
References llvm::LLT::fixed_vector(), llvm::APInt::getSplat(), llvm::LLT::integer(), MI, MIRBuilder, llvm::Size, and SwapN().
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerBswap | ( | MachineInstr & | MI | ) |
Definition at line 10380 of file LegalizerHelper.cpp.
References llvm::APInt::getBitsSet(), Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerConstant | ( | MachineInstr & | MI | ) |
Definition at line 3736 of file LegalizerHelper.cpp.
References emitLoadFromConstantPool(), llvm::MachineOperand::getCImm(), Legalized, MI, and MIRBuilder.
Referenced by llvm::ARMLegalizerInfo::legalizeCustom(), and llvm::RISCVLegalizerInfo::legalizeCustom().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerDIVREM | ( | MachineInstr & | MI | ) |
Definition at line 10803 of file LegalizerHelper.cpp.
References Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerDynStackAlloc | ( | MachineInstr & | MI | ) |
Definition at line 9868 of file LegalizerHelper.cpp.
References llvm::assumeAligned(), getDynStackAllocTargetPtr(), llvm::TargetSubtargetInfo::getFrameLowering(), llvm::MachineFunction::getSubtarget(), Legalized, MI, MIRBuilder, SPReg, llvm::TargetFrameLowering::StackGrowsUp, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerEXT | ( | MachineInstr & | MI | ) |
Definition at line 8336 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementCount(), llvm::LLT::changeElementSize(), llvm::details::FixedOrScalableQuantity< LeafTy, ValueTy >::divideCoefficientBy(), llvm::LLT::getElementCount(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::isPowerOf2_32(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerExtract | ( | MachineInstr & | MI | ) |
Definition at line 9913 of file LegalizerHelper.cpp.
References llvm::dbgs(), DL, llvm::LLT::integer(), Legalized, LLVM_DEBUG, MI, MIRBuilder, llvm::Offset, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by llvm::AMDGPULegalizerInfo::legalizeExtract(), and 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 9646 of file LegalizerHelper.cpp.
References llvm::commonAlignment(), createStackTemporary(), llvm::dbgs(), llvm::extractParts(), llvm::LLT::getElementType(), llvm::TypeSize::getFixed(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBytes(), getStackTemporaryAlignment(), getVectorElementPointer(), llvm::MachinePointerInfo::getWithOffset(), llvm::LLT::isByteSized(), Legalized, LLVM_DEBUG, llvm::MIPatternMatch::m_ICst(), MI, llvm::MIPatternMatch::mi_match(), MIRBuilder, llvm::Offset, and UnableToLegalize.
Referenced by fewerElementsVectorExtractInsertVectorElt(), and lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFAbs | ( | MachineInstr & | MI | ) |
Definition at line 10912 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::APInt::getSignedMaxValue(), llvm::LLT::integer(), Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFConstant | ( | MachineInstr & | MI | ) |
Definition at line 3747 of file LegalizerHelper.cpp.
References llvm::TargetLoweringBase::Bitcast, emitLoadFromConstantPool(), llvm::ConstantFP::getValueAPF(), Imm, Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFCopySign | ( | MachineInstr & | MI | ) |
Definition at line 9309 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::MachineInstr::Disjoint, llvm::APInt::getLowBitsSet(), llvm::APInt::getSignMask(), llvm::LLT::integer(), Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFFloor | ( | MachineInstr & | MI | ) |
Definition at line 9540 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_ONE, llvm::LLT::integer(), Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFMad | ( | MachineInstr & | MI | ) |
Definition at line 9493 of file LegalizerHelper.cpp.
References Legalized, MI, MIRBuilder, and llvm::Mul.
Referenced by llvm::AMDGPULegalizerInfo::legalizeFMad(), and lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFMinimumMaximum | ( | MachineInstr & | MI | ) |
Definition at line 9421 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::CmpInst::FCMP_OEQ, llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_ORD, llvm::fcNegZero, llvm::fcPosZero, llvm::fcZero, llvm::MachineInstr::FmNoNans, llvm::MachineInstr::FmNsz, llvm::getFltSemanticForLLT(), llvm::APFloat::getNaN(), getReg(), llvm::LLT::integer(), llvm::KnownFPClass::isKnownNever(), llvm::LLT::isScalar(), Legalized, MI, MIRBuilder, and Opc.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFMinNumMaxNum | ( | MachineInstr & | MI | ) |
Definition at line 9373 of file LegalizerHelper.cpp.
References llvm::MachineInstr::FmNoNans, Legalized, llvm_unreachable, MI, and MIRBuilder.
Referenced by llvm::AMDGPULegalizerInfo::legalizeMinNumMaxNum(), and lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFMODF | ( | MachineInstr & | MI | ) |
Definition at line 9203 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::CmpInst::FCMP_OEQ, llvm::MachineInstr::FmNoInfs, llvm::getFltSemanticForLLT(), llvm::APFloat::getInf(), llvm::LLT::integer(), Legalized, MI, MIRBuilder, and Select.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPEXT | ( | MachineInstr & | MI | ) |
Definition at line 8951 of file LegalizerHelper.cpp.
References lowerFPEXT_BF16(), lowerFPExtAndTruncMem(), and MI.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPEXT_BF16 | ( | MachineInstr & | MI | ) |
Definition at line 8928 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::changeElementType(), llvm::LLT::float32(), llvm::LLT::integer(), Legalized, MI, and MIRBuilder.
Referenced by lowerFPEXT().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPExtAndTruncMem | ( | MachineInstr & | MI | ) |
Definition at line 8888 of file LegalizerHelper.cpp.
References assert(), createStackTemporary(), llvm::MachineFunction::getMachineMemOperand(), llvm::LLT::getSizeInBytes(), getStackTemporaryAlignment(), Legalized, MI, MIRBuilder, llvm::MachineMemOperand::MOLoad, and llvm::MachineMemOperand::MOStore.
Referenced by lowerFPEXT(), and lowerFPTRUNC().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPOWI | ( | MachineInstr & | MI | ) |
Definition at line 9193 of file LegalizerHelper.cpp.
References Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTOINT_SAT | ( | MachineInstr & | MI | ) |
Definition at line 8790 of file LegalizerHelper.cpp.
References llvm::APFloat::convertFromAPInt(), llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_OLT, llvm::CmpInst::FCMP_ULT, llvm::CmpInst::FCMP_UNO, llvm::MachineInstr::FmNoNans, llvm::getFltSemanticForLLT(), llvm::APInt::getMaxValue(), llvm::APInt::getMinValue(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::LLT::integer(), Legalized, MI, MIRBuilder, llvm::APFloatBase::opInexact, and llvm::APFloatBase::rmTowardZero.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTOSI | ( | MachineInstr & | MI | ) |
Definition at line 8725 of file LegalizerHelper.cpp.
References llvm::Exponent, llvm::APInt::getSignMask(), llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, Legalized, MI, MIRBuilder, S1, S32, S64, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTOUI | ( | MachineInstr & | MI | ) |
Definition at line 8685 of file LegalizerHelper.cpp.
References llvm::APFloat::convertFromAPInt(), llvm::CmpInst::FCMP_ULT, llvm::FSub, llvm::APInt::getSignMask(), llvm::APInt::getZero(), llvm::APFloatBase::IEEEdouble(), llvm::APFloatBase::IEEEsingle(), Legalized, MI, MIRBuilder, llvm::APFloatBase::rmNearestTiesToEven, S1, S32, S64, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTRUNC | ( | MachineInstr & | MI | ) |
Definition at line 9179 of file LegalizerHelper.cpp.
References lowerFPExtAndTruncMem(), lowerFPTRUNC_F32_TO_BF16(), lowerFPTRUNC_F64_TO_BF16(), lowerFPTRUNC_F64_TO_F16(), and MI.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTRUNC_F32_TO_BF16 | ( | MachineInstr & | MI | ) |
Definition at line 9078 of file LegalizerHelper.cpp.
References llvm::Add, assert(), llvm::LLT::bfloat16(), llvm::LLT::changeElementType(), llvm::CmpInst::FCMP_UNO, llvm::LLT::float32(), llvm::MachineInstr::FmNoNans, llvm::LLT::integer(), Legalized, MI, and MIRBuilder.
Referenced by lowerFPTRUNC().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTRUNC_F64_TO_BF16 | ( | MachineInstr & | MI | ) |
Definition at line 9166 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::bfloat16(), llvm::LLT::changeElementType(), llvm::LLT::float32(), llvm::LLT::float64(), Legalized, lowerRoundInexactToOdd(), MI, and MIRBuilder.
Referenced by lowerFPTRUNC().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFPTRUNC_F64_TO_F16 | ( | MachineInstr & | MI | ) |
Definition at line 8962 of file LegalizerHelper.cpp.
References assert(), B(), D(), llvm::LLT::float16(), llvm::LLT::float32(), llvm::LLT::float64(), llvm::MachineInstr::FmAfn, I, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, llvm::LLT::integer(), Legalized, MI, MIRBuilder, N, S1, llvm::LLT::scalar(), UnableToLegalize, and llvm::V1.
Referenced by lowerFPTRUNC().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFunnelShift | ( | MachineInstr & | MI | ) |
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFunnelShiftAsShifts | ( | MachineInstr & | MI | ) |
Definition at line 8252 of file LegalizerHelper.cpp.
References llvm::MachineInstr::Disjoint, llvm::LLT::getScalarSizeInBits(), isNonZeroModBitWidth(), isNonZeroModBitWidthOrUndef(), llvm::isPowerOf2_32(), Legalized, MI, MIRBuilder, llvm::MachineInstr::NoFlags, X, and Y.
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerFunnelShiftWithInverse | ( | MachineInstr & | MI | ) |
Definition at line 8213 of file LegalizerHelper.cpp.
References getReg(), llvm::LLT::getScalarSizeInBits(), isNonZeroModBitWidthOrUndef(), llvm::isPowerOf2_32(), Legalized, MI, MIRBuilder, UnableToLegalize, X, and Y.
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerInsert | ( | MachineInstr & | MI | ) |
Definition at line 9984 of file LegalizerHelper.cpp.
References llvm::dbgs(), DL, llvm::LLT::getAddressSpace(), llvm::APInt::getBitsSetWithWrap(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBits(), llvm::LLT::isPointer(), llvm::LLT::isPointerOrPointerVector(), llvm::LLT::isScalar(), llvm::LLT::isVector(), Legalized, LLVM_DEBUG, MI, MIRBuilder, llvm::Offset, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::LLT::scalar(), and UnableToLegalize.
Referenced by llvm::AMDGPULegalizerInfo::legalizeInsert(), and lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerIntrinsicRound | ( | MachineInstr & | MI | ) |
Definition at line 9507 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::CmpInst::FCMP_OGE, llvm::LLT::integer(), Legalized, MI, MIRBuilder, T, and X.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerISFPCLASS | ( | MachineInstr & | MI | ) |
Definition at line 10552 of file LegalizerHelper.cpp.
References llvm::APFloat::bitcastToAPInt(), llvm::LLT::changeElementType(), llvm::fcAllFlags, llvm::fcFinite, llvm::fcInf, llvm::fcNan, llvm::fcNegFinite, llvm::fcNegNormal, llvm::fcNegSubnormal, llvm::fcNone, llvm::fcNormal, llvm::fcPosFinite, llvm::fcPosInf, llvm::fcPosNormal, llvm::fcPosSubnormal, llvm::fcPosZero, llvm::fcQNan, llvm::fcSubnormal, llvm::fcZero, llvm::APInt::getActiveBits(), llvm::APInt::getAllOnes(), llvm::getFltSemanticForLLT(), llvm::getImm(), llvm::APFloat::getInf(), llvm::APFloat::getLargest(), llvm::APInt::getOneBitSet(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignMask(), llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_UGE, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULT, llvm::LLT::integer(), Legalized, MI, MIRBuilder, and llvm::APInt::shl().
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerLoad | ( | GAnyLoad & | MI | ) |
Definition at line 4308 of file LegalizerHelper.cpp.
References llvm::bit_floor(), llvm::LLT::changeElementSize(), llvm::LLT::changeToInteger(), llvm::LLT::changeVectorElementCount(), llvm::MachineInstr::eraseFromParent(), llvm::GMemOperation::getAlign(), llvm::Function::getContext(), llvm::GAnyLoad::getDstReg(), llvm::LLT::getElementType(), llvm::ElementCount::getFixed(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::getMemoryType(), llvm::GMemOperation::getMMO(), llvm::LLT::getNumElements(), llvm::MachineInstr::getOpcode(), llvm::MachineMemOperand::getPointerInfo(), llvm::GLoadStore::getPointerReg(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), llvm::LLT::getSizeInBytes(), llvm::LLT::integer(), llvm::isa(), llvm::LLT::isPointer(), llvm::isPowerOf2_32(), llvm::isPowerOf2_64(), llvm::LLT::isVector(), Legalized, MIRBuilder, llvm::NextPowerOf2(), llvm::PowerOf2Ceil(), reduceLoadStoreWidth(), and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerMemCpyFamily | ( | MachineInstr & | MI, |
| Register | Dst, | ||
| Register | Src, | ||
| uint64_t | KnownLen, | ||
| Align | Alignment, | ||
| bool | DstAlignCanChange, | ||
| ArrayRef< LLT > | MemOps ) |
Definition at line 11399 of file LegalizerHelper.cpp.
References assert(), Legalized, MI, Opc, and UnableToLegalize.
Referenced by llvm::CombinerHelper::applyCombineMemCpyFamily(), lower(), lowerMemCpyFamily(), and llvm::CombinerHelper::tryCombineMemCpyFamily().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerMemCpyFamily | ( | MachineInstr & | MI, |
| unsigned | MaxLen = 0 ) |
Definition at line 11428 of file LegalizerHelper.cpp.
References llvm::canLowerMemCpyFamily(), lowerMemCpyFamily(), MI, and UnableToLegalize.
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerMergeValues | ( | MachineInstr & | MI | ) |
Definition at line 9566 of file LegalizerHelper.cpp.
References AbstractManglingParser< Derived, Alloc >::NumOps, llvm::dbgs(), I, llvm::LLT::integer(), Legalized, LLVM_DEBUG, MI, MIRBuilder, llvm::Offset, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerMinMax | ( | MachineInstr & | MI | ) |
Definition at line 9247 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::LLT::integer(), Legalized, MI, minMaxToCompare(), and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerMulfix | ( | MachineInstr & | MI | ) |
Definition at line 11015 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::changeElementSize(), Legalized, MI, MIRBuilder, and llvm::Mul.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerReadWriteRegister | ( | MachineInstr & | MI | ) |
Definition at line 10494 of file LegalizerHelper.cpp.
References llvm::cast(), llvm::StringRef::data(), llvm::LLVMContext::diagnose(), llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::MDString::getString(), Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerRotate | ( | MachineInstr & | MI | ) |
Definition at line 8446 of file LegalizerHelper.cpp.
References MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerRotateWithReverseRotate | ( | MachineInstr & | MI | ) |
Definition at line 8435 of file LegalizerHelper.cpp.
References Legalized, MI, and MIRBuilder.
Definition at line 9123 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::CmpInst::FCMP_OGT, llvm::CmpInst::FCMP_UEQ, llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::CmpInst::ICMP_NE, llvm::LLT::integer(), and MIRBuilder.
Referenced by lowerFPTRUNC_F64_TO_BF16().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerSADDE | ( | MachineInstr & | MI | ) |
Definition at line 10131 of file LegalizerHelper.cpp.
References llvm::CmpInst::ICMP_SLT, Legalized, MI, MIRBuilder, and T.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerSADDO_SSUBO | ( | MachineInstr & | MI | ) |
Definition at line 10087 of file LegalizerHelper.cpp.
References llvm::CmpInst::ICMP_SLT, Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerSelect | ( | MachineInstr & | MI | ) |
Definition at line 10724 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementType(), llvm::LLT::integer(), llvm::LLT::isPointerOrPointerVector(), Legalized, MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerShlSat | ( | MachineInstr & | MI | ) |
Definition at line 10316 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::changeElementSize(), llvm::APInt::getMaxValue(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::CmpInst::ICMP_NE, llvm::CmpInst::ICMP_SLT, Legalized, MI, and MIRBuilder.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerShuffleVector | ( | MachineInstr & | MI | ) |
Definition at line 9718 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::getScalarType(), Legalized, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::LLT::scalar(), llvm::DenseMapBase< StorageT, KeyT, ValueT, KeyInfoT, BucketT >::try_emplace(), and llvm::Undef.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerSITOFP | ( | MachineInstr & | MI | ) |
Definition at line 8639 of file LegalizerHelper.cpp.
References llvm::False, llvm::CmpInst::ICMP_NE, llvm::LLT::integer(), Legalized, loweri64tof16ITOFP(), MI, MIRBuilder, llvm::True, UnableToLegalize, and llvm::Xor.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerSMULH_UMULH | ( | MachineInstr & | MI | ) |
Definition at line 10530 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementSize(), llvm::LLT::getScalarSizeInBits(), Legalized, MI, MIRBuilder, and llvm::Mul.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerSSUBE | ( | MachineInstr & | MI | ) |
Definition at line 10153 of file LegalizerHelper.cpp.
References llvm::CmpInst::ICMP_SLT, Legalized, MI, MIRBuilder, and T.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerStackRestore | ( | MachineInstr & | MI | ) |
Definition at line 9902 of file LegalizerHelper.cpp.
References Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerStackSave | ( | MachineInstr & | MI | ) |
Definition at line 9891 of file LegalizerHelper.cpp.
References Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerStore | ( | GStore & | MI | ) |
Definition at line 4472 of file LegalizerHelper.cpp.
References llvm::bit_floor(), llvm::MachineInstr::eraseFromParent(), llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::getMemoryType(), llvm::MachineMemOperand::getPointerInfo(), llvm::GLoadStore::getPointerReg(), llvm::LLT::getSizeInBits(), llvm::LLT::getSizeInBytes(), llvm::GAnyStore::getValueReg(), llvm::LLT::integer(), llvm::IntPtrTy, llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, llvm::MachineInstr::memoperands_begin(), MIRBuilder, llvm::PowerOf2Ceil(), reduceLoadStoreWidth(), scalarizeVectorBooleanStore(), and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerThreewayCompare | ( | MachineInstr & | MI | ) |
Definition at line 9261 of file LegalizerHelper.cpp.
References llvm::cast(), llvm::LLT::changeElementSize(), llvm::getApproximateEVTForLLT(), llvm::CmpInst::ICMP_SGT, llvm::CmpInst::ICMP_SLT, llvm::CmpInst::ICMP_UGT, llvm::CmpInst::ICMP_ULT, llvm::LLT::isVector(), Legalized, MI, MIRBuilder, std::swap(), llvm::TargetLoweringBase::UndefinedBooleanContent, and llvm::TargetLoweringBase::ZeroOrNegativeOneBooleanContent.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerTRUNC | ( | MachineInstr & | MI | ) |
Definition at line 8378 of file LegalizerHelper.cpp.
References assert(), llvm::LLT::changeElementCount(), llvm::LLT::changeElementSize(), llvm::extractParts(), llvm::LLT::getNumElements(), llvm::LLT::getScalarSizeInBits(), llvm::isPowerOf2_32(), llvm::LLT::isVector(), Legalized, Merge, MI, MIRBuilder, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerTruncSat | ( | MachineInstr & | MI | ) |
Definition at line 10348 of file LegalizerHelper.cpp.
References llvm::APInt::getAllOnes(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::APInt::getZero(), Legalized, llvm_unreachable, MI, MIRBuilder, and Opc.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerU64ToF32WithSITOFP | ( | MachineInstr & | MI | ) |
Definition at line 8522 of file LegalizerHelper.cpp.
References assert(), llvm::CmpInst::ICMP_SLT, Legalized, MI, MIRBuilder, S1, S32, S64, and llvm::LLT::scalar().
Referenced by lowerUITOFP().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerU64ToF64BitFloatOps | ( | MachineInstr & | MI | ) |
Definition at line 8557 of file LegalizerHelper.cpp.
References assert(), llvm::bit_cast(), Legalized, MI, MIRBuilder, S32, S64, and llvm::LLT::scalar().
Referenced by lowerUITOFP().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerUITOFP | ( | MachineInstr & | MI | ) |
Definition at line 8609 of file LegalizerHelper.cpp.
References llvm::False, Legalized, loweri64tof16ITOFP(), lowerU64ToF32WithSITOFP(), lowerU64ToF64BitFloatOps(), MI, MIRBuilder, llvm::LLT::scalar(), llvm::True, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerUnmergeValues | ( | MachineInstr & | MI | ) |
Definition at line 9606 of file LegalizerHelper.cpp.
References coerceToInteger(), llvm::LLT::getSizeInBits(), I, llvm::LLT::isPointer(), Legalized, MI, MIRBuilder, llvm::Offset, and UnableToLegalize.
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerVAArg | ( | MachineInstr & | MI | ) |
Definition at line 10967 of file LegalizerHelper.cpp.
References A(), DL, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::MachineFunction::getMachineMemOperand(), llvm::LLT::getSizeInBits(), llvm::getTypeForLLT(), Legalized, llvm::Log2(), MI, MIRBuilder, llvm::MachineMemOperand::MOLoad, llvm::MachineMemOperand::MOStore, and llvm::LLT::scalar().
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerVECTOR_COMPRESS | ( | llvm::MachineInstr & | MI | ) |
Definition at line 9759 of file LegalizerHelper.cpp.
References createStackTemporary(), llvm::LLT::getElementType(), llvm::TypeSize::getFixed(), llvm::LLT::getNumElements(), llvm::MachineInstrBuilder::getReg(), llvm::LLT::getSizeInBits(), getStackTemporaryAlignment(), llvm::MachinePointerInfo::getUnknownStack(), getVectorElementPointer(), I, llvm::CmpInst::ICMP_UGT, llvm::LLT::integer(), llvm::isConstantOrConstantSplatVector(), Legalized, llvm::MIPatternMatch::m_GImplicitDef(), MI, llvm::MIPatternMatch::mi_match(), MIRBuilder, and llvm::report_fatal_error().
Referenced by lower().
| LegalizerHelper::LegalizeResult LegalizerHelper::lowerVectorReduction | ( | MachineInstr & | MI | ) |
Definition at line 10949 of file LegalizerHelper.cpp.
References llvm::LLT::getSizeInBits(), 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 6974 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementCount(), llvm::LLT::changeElementType(), llvm::LLT::changeVectorElementType(), llvm::ElementCount::get(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::getScalarType(), llvm::LLT::isScalable(), Legalized, MI, MIRBuilder, moreElementsVectorDst(), moreElementsVectorPhi(), moreElementsVectorShuffle(), moreElementsVectorSrc(), Observer, Opc, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::MachineOperand::setReg(), llvm::SmallVectorTemplateCommon< T, typename >::size(), 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 2236 of file LegalizerHelper.cpp.
References llvm::MachineOperand::getReg(), MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by equalizeVectorShuffleLengths(), llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), moreElementsVector(), moreElementsVectorPhi(), and moreElementsVectorShuffle().
| LegalizerHelper::LegalizeResult LegalizerHelper::moreElementsVectorPhi | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | MoreTy ) |
Definition at line 6918 of file LegalizerHelper.cpp.
References assert(), llvm::MachineBasicBlock::getFirstTerminator(), I, Legalized, MBB, MI, MIRBuilder, moreElementsVectorDst(), moreElementsVectorSrc(), and Observer.
Referenced by moreElementsVector().
| LegalizerHelper::LegalizeResult LegalizerHelper::moreElementsVectorShuffle | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | MoreTy ) |
Definition at line 7315 of file LegalizerHelper.cpp.
References equalizeVectorShuffleLengths(), llvm::LLT::getNumElements(), I, Legalized, MI, MIRBuilder, moreElementsVectorDst(), moreElementsVectorSrc(), 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 2246 of file LegalizerHelper.cpp.
References 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 1559 of file LegalizerHelper.cpp.
References llvm::MachineInstrBuilder::add(), llvm::MachineInstrBuilder::addUse(), llvm::append_range(), assert(), llvm::SmallVectorTemplateCommon< T, typename >::back(), C(), llvm::cast(), llvm::LLT::changeElementType(), llvm::dbgs(), llvm::SmallVectorTemplateCommon< T, typename >::empty(), llvm::extractParts(), llvm::MachineBasicBlock::getFirstTerminatorForward(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getSizeInBits(), llvm::MachineMemOperand::getSizeInBits(), llvm::ICmpInst::getUnsignedPredicate(), llvm::LocationSize::getValue(), I, llvm::CmpInst::ICMP_EQ, llvm::isa(), llvm::ICmpInst::isEquality(), llvm::LLT::isVector(), Legalized, LLVM_DEBUG, llvm::APInt::lshr(), MBB, MI, MIRBuilder, narrowScalarAddSub(), narrowScalarBasic(), narrowScalarCTLS(), narrowScalarCTLZ(), narrowScalarCTPOP(), narrowScalarCTTZ(), narrowScalarDst(), narrowScalarExt(), narrowScalarExtract(), narrowScalarFLDEXP(), narrowScalarFPTOI(), narrowScalarInsert(), narrowScalarMul(), narrowScalarSelect(), narrowScalarShift(), narrowScalarSrc(), Observer, llvm::Offset, llvm::SmallVectorTemplateBase< T, bool >::push_back(), reduceLoadStoreWidth(), llvm::LLT::scalar(), llvm::MachineOperand::setReg(), llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::APInt::trunc(), UnableToLegalize, llvm::Xor, and llvm::zip().
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingImpl(), llvm::MipsRegisterBankInfo::applyMappingImpl(), llvm::AMDGPURegisterBankInfo::applyMappingLoad(), and legalizeInstrStep().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarAddSub | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 7423 of file LegalizerHelper.cpp.
References llvm::SmallVectorImpl< T >::append(), llvm::ArrayRef(), llvm::extractParts(), llvm::LLT::integer(), Legalized, llvm_unreachable, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorImpl< T >::reserve(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarBasic | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7723 of file LegalizerHelper.cpp.
References assert(), llvm::extractParts(), I, Legalized, llvm_unreachable, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarCTLS | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7895 of file LegalizerHelper.cpp.
References B(), llvm::LLT::getSizeInBits(), llvm::Hi, llvm::CmpInst::ICMP_EQ, Legalized, llvm::Lo, MI, MIRBuilder, llvm::LLT::scalar(), and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarCTLZ | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7831 of file LegalizerHelper.cpp.
References B(), llvm::LLT::getSizeInBits(), llvm::CmpInst::ICMP_EQ, llvm::LLT::integer(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarCTPOP | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7937 of file LegalizerHelper.cpp.
References llvm::LLT::getSizeInBits(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarCTTZ | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7863 of file LegalizerHelper.cpp.
References B(), llvm::LLT::getSizeInBits(), llvm::CmpInst::ICMP_EQ, llvm::LLT::integer(), Legalized, MI, MIRBuilder, and UnableToLegalize.
Referenced by narrowScalar().
| void LegalizerHelper::narrowScalarDst | ( | MachineInstr & | MI, |
| LLT | NarrowTy, | ||
| unsigned | OpIdx, | ||
| unsigned | ExtOpcode ) |
Definition at line 2227 of file LegalizerHelper.cpp.
References MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by narrowScalar(), and narrowScalarFPTOI().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarExt | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7764 of file LegalizerHelper.cpp.
References llvm::LLT::isVector(), Legalized, MI, and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarExtract | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7575 of file LegalizerHelper.cpp.
References llvm::extractParts(), llvm::LLT::getSizeInBits(), llvm::LLT::integer(), Legalized, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarFLDEXP | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7960 of file LegalizerHelper.cpp.
References B(), llvm::LLT::getScalarSizeInBits(), Legalized, llvm::maxIntN(), MI, llvm::minIntN(), MIRBuilder, Observer, and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarFPTOI | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7549 of file LegalizerHelper.cpp.
References llvm::LLT::float16(), llvm::LLT::getScalarSizeInBits(), Legalized, MI, narrowScalarDst(), Observer, and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarInsert | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7642 of file LegalizerHelper.cpp.
References llvm::SmallVectorImpl< T >::append(), llvm::extractParts(), llvm::LLT::getSizeInBits(), I, Legalized, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::LLT::scalar(), llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarMul | ( | MachineInstr & | MI, |
| LLT | Ty ) |
Definition at line 7519 of file LegalizerHelper.cpp.
References llvm::extractParts(), llvm::LLT::getSizeInBits(), Legalized, MI, MIRBuilder, llvm::Size, and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarSelect | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 7785 of file LegalizerHelper.cpp.
References llvm::extractParts(), I, Legalized, llvm_unreachable, MI, MIRBuilder, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Select, llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarShift | ( | MachineInstr & | MI, |
| unsigned | TypeIdx, | ||
| LLT | Ty ) |
Definition at line 6435 of file LegalizerHelper.cpp.
References llvm::LLT::changeElementSize(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::LLT::getSizeInBits(), llvm::Hi, llvm::CmpInst::ICMP_EQ, llvm::CmpInst::ICMP_ULT, llvm::LLT::integer(), llvm::LLT::isScalar(), llvm::LLT::isValid(), llvm::LLT::isVector(), Legalized, llvm_unreachable, llvm::Lo, MI, MIRBuilder, narrowScalarShiftByConstant(), narrowScalarShiftMultiway(), narrowScalarSrc(), Observer, and UnableToLegalize.
Referenced by narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarShiftByConstant | ( | MachineInstr & | MI, |
| const APInt & | Amt, | ||
| LLT | HalfTy, | ||
| LLT | ShiftAmtTy ) |
Definition at line 6347 of file LegalizerHelper.cpp.
References llvm::LLT::getSizeInBits(), llvm::Hi, llvm::APInt::isZero(), Legalized, llvm::Lo, MI, MIRBuilder, Register, and llvm::APInt::ugt().
Referenced by narrowScalarShift().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarShiftByConstantMultiway | ( | MachineInstr & | MI, |
| const APInt & | Amt, | ||
| LLT | TargetTy, | ||
| LLT | ShiftAmtTy ) |
Optimized path for constant shift amounts using static indexing.
Directly calculates which source parts contribute to each output part without generating runtime select chains.
Definition at line 6705 of file LegalizerHelper.cpp.
References assert(), llvm::LegalizerHelper::ShiftParams::BitShift, buildConstantShiftPart(), llvm::extractParts(), llvm::LLT::getScalarSizeInBits(), llvm::APInt::getZExtValue(), I, llvm::LegalizerHelper::ShiftParams::InvBitShift, llvm::APInt::isZero(), Legalized, MI, MIRBuilder, llvm::LegalizerHelper::ShiftParams::SignBit, llvm::SmallVectorTemplateCommon< T, typename >::size(), llvm::LegalizerHelper::ShiftParams::WordShift, and llvm::LegalizerHelper::ShiftParams::Zero.
Referenced by narrowScalarShiftMultiway().
| LegalizerHelper::LegalizeResult LegalizerHelper::narrowScalarShiftMultiway | ( | MachineInstr & | MI, |
| LLT | TargetTy ) |
Multi-way shift legalization: directly split wide shifts into target-sized parts in a single step, avoiding recursive binary splitting.
Definition at line 6765 of file LegalizerHelper.cpp.
References assert(), buildVariableShiftPart(), llvm::extractParts(), llvm::getIConstantVRegValWithLookThrough(), llvm::LLT::getScalarSizeInBits(), I, llvm::CmpInst::ICMP_EQ, llvm::LLT::integer(), llvm::isPowerOf2_32(), Legalized, llvm_unreachable, llvm::Log2_32(), MI, MIRBuilder, and narrowScalarShiftByConstantMultiway().
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 2202 of file LegalizerHelper.cpp.
References MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by narrowScalar(), and narrowScalarShift().
| LegalizerHelper::LegalizeResult LegalizerHelper::reduceLoadStoreWidth | ( | GLoadStore & | MI, |
| unsigned | TypeIdx, | ||
| LLT | NarrowTy ) |
Definition at line 5702 of file LegalizerHelper.cpp.
References llvm::dbgs(), llvm::MachineInstr::eraseFromParent(), llvm::extractParts(), llvm::MachineFunction::getMachineMemOperand(), llvm::GMemOperation::getMemSize(), llvm::GMemOperation::getMMO(), getNarrowTypeBreakDown(), llvm::GLoadStore::getPointerReg(), llvm::GenericMachineInstr::getReg(), llvm::LLT::getSizeInBits(), llvm::LocationSize::getValue(), llvm::LLT::integer(), llvm::isa(), llvm::GMemOperation::isAtomic(), isBigEndian(), llvm::LLT::isByteSized(), llvm::LLT::isValid(), Legalized, LLVM_DEBUG, MIRBuilder, llvm::Offset, llvm::SmallVectorTemplateCommon< T, typename >::size(), and UnableToLegalize.
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingLoad(), fewerElementsVector(), lowerLoad(), lowerStore(), and narrowScalar().
| LegalizerHelper::LegalizeResult LegalizerHelper::scalarizeVectorBooleanStore | ( | GStore & | MI | ) |
Given a store of a boolean vector, scalarize it.
Definition at line 4567 of file LegalizerHelper.cpp.
References assert(), llvm::MachineInstr::eraseFromParent(), llvm::MachineFunction::getDataLayout(), llvm::LLT::getElementType(), llvm::MachineFunction::getMachineMemOperand(), llvm::MachineMemOperand::getMemoryType(), llvm::LLT::getNumElements(), llvm::MachineMemOperand::getPointerInfo(), llvm::GLoadStore::getPointerReg(), llvm::LLT::getSizeInBits(), llvm::GAnyStore::getValueReg(), I, llvm::LLT::integer(), llvm::DataLayout::isBigEndian(), llvm::LLT::isByteSized(), Legalized, llvm::MachineInstr::memoperands_begin(), MIRBuilder, and UnableToLegalize.
Referenced by lowerStore().
| LegalizerHelper::LegalizeResult LegalizerHelper::simpleLibcall | ( | MachineInstr & | MI, |
| MachineIRBuilder & | MIRBuilder, | ||
| unsigned | Size, | ||
| Type * | OpType, | ||
| LostDebugLocObserver & | LocObserver ) const |
Definition at line 664 of file LegalizerHelper.cpp.
References createLibcall(), llvm::drop_begin(), getRTLibDesc(), llvm::LegalizeActions::Libcall, MI, MIRBuilder, and llvm::Size.
Referenced by libcall().
| 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 2802 of file LegalizerHelper.cpp.
References assert(), llvm::APFloat::bitcastToAPInt(), llvm::cast(), llvm::LLT::changeElementType(), llvm::LLT::changeVectorElementType(), llvm::MachineInstr::Disjoint, llvm::APInt::getAllOnes(), llvm::getApproximateEVTForLLT(), llvm::MachineOperand::getCImm(), llvm::LLT::getElementCount(), llvm::LLT::getElementType(), llvm::MachineBasicBlock::getFirstTerminatorForward(), llvm::MachineOperand::getFPImm(), llvm::MachineFunction::getMachineMemOperand(), llvm::APInt::getOneBitSet(), llvm::MachineMemOperand::getPointerInfo(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::getScalarType(), llvm::APInt::getSignedMaxValue(), llvm::APInt::getSignedMinValue(), llvm::LLT::getSizeInBits(), llvm::ConstantInt::getValue(), llvm::ConstantFP::getValueAPF(), I, llvm::CmpInst::ICMP_NE, llvm::CmpInst::isSigned(), llvm::LLT::isVector(), Legalized, MBB, MI, MIRBuilder, llvm::MachineInstr::NoSWrap, llvm::MachineInstr::NoUWrap, Observer, llvm::MachineOperand::setCImm(), llvm::APInt::sext(), UnableToLegalize, llvm::LLT::vector(), widenScalarDst(), widenScalarDstUsingFPTrunc(), widenScalarSrc(), widenScalarSrcUsingFPExt(), 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 2209 of file LegalizerHelper.cpp.
References MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingImpl(), llvm::RISCVLegalizerInfo::legalizeCustom(), llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), and widenScalar().
| void LegalizerHelper::widenScalarDstUsingFPTrunc | ( | MachineInstr & | MI, |
| LLT | WideTy, | ||
| unsigned | OpIdx = 0 ) |
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 G_FPTRUNC, and replacing the vreg of the operand in place.
Flags are copied from MI to the new trunc.
Definition at line 2218 of file LegalizerHelper.cpp.
References MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by 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 2187 of file LegalizerHelper.cpp.
References MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by llvm::AMDGPURegisterBankInfo::applyMappingImpl(), llvm::RISCVLegalizerInfo::legalizeCustom(), llvm::RISCVLegalizerInfo::legalizeIntrinsic(), and widenScalar().
| void LegalizerHelper::widenScalarSrcUsingFPExt | ( | MachineInstr & | MI, |
| LLT | WideTy, | ||
| unsigned | OpIdx ) |
Legalize a single operand OpIdx of the machine instruction MI as a Use by extending the operand's type to WideTy using the G_FPEXT for the extension instruction, and replacing the vreg of the operand in place.
Flags are copied from MI to the new extend.
Definition at line 2194 of file LegalizerHelper.cpp.
References MI, MIRBuilder, and llvm::MachineOperand::setReg().
Referenced by widenScalar().
| MachineIRBuilder& llvm::LegalizerHelper::MIRBuilder |
Expose MIRBuilder so clients can set their own RecordInsertInstruction functions.
Definition at line 53 of file LegalizerHelper.h.
Referenced by bitcastDst(), bitcastExtractSubvector(), bitcastExtractVectorElt(), bitcastInsertSubvector(), bitcastInsertVectorElt(), bitcastShuffleVector(), bitcastSrc(), buildConstantShiftPart(), llvm::AMDGPULegalizerInfo::buildMultiply(), buildVariableShiftPart(), coerceToInteger(), convertPtrToInt(), createAtomicLibcall(), createLibcall(), createMemLibcall(), createStackStoreLoad(), createStackTemporary(), createStackTemporaryForVector(), equalizeVectorShuffleLengths(), fewerElementsBitcast(), fewerElementsVector(), fewerElementsVectorExtractInsertVectorElt(), fewerElementsVectorMerge(), fewerElementsVectorMultiEltType(), fewerElementsVectorPhi(), fewerElementsVectorReductions(), fewerElementsVectorSeqReductions(), fewerElementsVectorShuffle(), fewerElementsVectorUnmergeValues(), getDynStackAllocTargetPtr(), getVectorElementPointer(), llvm::AMDGPULegalizerInfo::legalizeBufferLoad(), llvm::AMDGPULegalizerInfo::legalizeBufferStore(), llvm::AArch64LegalizerInfo::legalizeCustom(), llvm::AMDGPULegalizerInfo::legalizeCustom(), llvm::ARMLegalizerInfo::legalizeCustom(), llvm::MipsLegalizerInfo::legalizeCustom(), llvm::RISCVLegalizerInfo::legalizeCustom(), llvm::SPIRVLegalizerInfo::legalizeCustom(), llvm::X86LegalizerInfo::legalizeCustom(), legalizeElementwiseIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeExtract(), legalizeExtractVectorElt(), llvm::AMDGPULegalizerInfo::legalizeFPow(), llvm::AMDGPULegalizerInfo::legalizeInsert(), legalizeInsertVectorElt(), legalizeInstrStep(), llvm::AArch64LegalizerInfo::legalizeIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeIntrinsic(), llvm::MipsLegalizerInfo::legalizeIntrinsic(), llvm::RISCVLegalizerInfo::legalizeIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeLaneOp(), legalizeLoad(), llvm::AMDGPULegalizerInfo::legalizeLoad(), llvm::legalizeMachineFunction(), llvm::AMDGPULegalizerInfo::legalizeMinNumMaxNum(), llvm::AMDGPULegalizerInfo::legalizeMul(), LegalizerHelper(), LegalizerHelper(), llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), llvm::AMDGPULegalizerInfo::legalizeSBufferPrefetch(), legalizeSpvBitcast(), legalizeSpvConstComposite(), legalizeSpvExtractElt(), legalizeSpvInsertElt(), legalizeStore(), llvm::AMDGPULegalizerInfo::legalizeStore(), llvm::AMDGPULegalizerInfo::legalizeTrap(), llvm::AMDGPULegalizerInfo::legalizeTrapEndpgm(), llvm::AMDGPULegalizerInfo::legalizeTrapHsa(), libcall(), lower(), lowerAbsDiffToMinMax(), lowerAbsDiffToSelect(), lowerAbsToAddXor(), lowerAbsToCNeg(), lowerAbsToMaxNeg(), lowerAddSubSatToAddoSubo(), lowerAddSubSatToMinMax(), lowerBitcast(), lowerBitCount(), lowerBitreverse(), lowerBswap(), lowerConstant(), lowerDIVREM(), lowerDynStackAlloc(), lowerEXT(), lowerExtract(), lowerExtractInsertVectorElt(), lowerFAbs(), lowerFConstant(), lowerFCopySign(), lowerFFloor(), lowerFMad(), lowerFMinimumMaximum(), lowerFMinNumMaxNum(), lowerFMODF(), lowerFPEXT_BF16(), lowerFPExtAndTruncMem(), lowerFPOWI(), lowerFPTOINT_SAT(), lowerFPTOSI(), lowerFPTOUI(), lowerFPTRUNC_F32_TO_BF16(), lowerFPTRUNC_F64_TO_BF16(), lowerFPTRUNC_F64_TO_F16(), lowerFunnelShiftAsShifts(), lowerFunnelShiftWithInverse(), lowerInsert(), lowerIntrinsicRound(), lowerISFPCLASS(), lowerLoad(), lowerMergeValues(), lowerMinMax(), lowerMulfix(), lowerReadWriteRegister(), lowerRotate(), lowerRotateWithReverseRotate(), lowerRoundInexactToOdd(), lowerSADDE(), lowerSADDO_SSUBO(), lowerSelect(), lowerShlSat(), lowerShuffleVector(), lowerSITOFP(), lowerSMULH_UMULH(), lowerSSUBE(), lowerStackRestore(), lowerStackSave(), lowerStore(), lowerThreewayCompare(), lowerTRUNC(), lowerTruncSat(), lowerU64ToF32WithSITOFP(), lowerU64ToF64BitFloatOps(), lowerUITOFP(), lowerUnmergeValues(), lowerVAArg(), lowerVECTOR_COMPRESS(), lowerVectorReduction(), moreElementsVector(), moreElementsVectorDst(), moreElementsVectorPhi(), moreElementsVectorShuffle(), moreElementsVectorSrc(), narrowScalar(), narrowScalarAddSub(), narrowScalarBasic(), narrowScalarCTLS(), narrowScalarCTLZ(), narrowScalarCTPOP(), narrowScalarCTTZ(), narrowScalarDst(), narrowScalarExtract(), narrowScalarFLDEXP(), narrowScalarInsert(), narrowScalarMul(), narrowScalarSelect(), narrowScalarShift(), narrowScalarShiftByConstant(), narrowScalarShiftByConstantMultiway(), narrowScalarShiftMultiway(), narrowScalarSrc(), reduceLoadStoreWidth(), scalarizeVectorBooleanStore(), simpleLibcall(), widenScalar(), widenScalarDst(), widenScalarDstUsingFPTrunc(), widenScalarSrc(), and widenScalarSrcUsingFPExt().
| GISelChangeObserver& llvm::LegalizerHelper::Observer |
To keep track of changes made by the LegalizerHelper.
Definition at line 56 of file LegalizerHelper.h.
Referenced by bitcast(), llvm::AMDGPULegalizerInfo::legalizeBufferLoad(), llvm::AArch64LegalizerInfo::legalizeCustom(), llvm::RISCVLegalizerInfo::legalizeCustom(), llvm::AMDGPULegalizerInfo::legalizeExtract(), llvm::AArch64LegalizerInfo::legalizeIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeIntrinsic(), llvm::RISCVLegalizerInfo::legalizeIntrinsic(), llvm::AMDGPULegalizerInfo::legalizeLoad(), LegalizerHelper(), LegalizerHelper(), llvm::AMDGPULegalizerInfo::legalizeSBufferLoad(), llvm::AMDGPULegalizerInfo::legalizeSBufferPrefetch(), llvm::AMDGPULegalizerInfo::legalizeStore(), llvm::AMDGPULegalizerInfo::legalizeTrapEndpgm(), llvm::AMDGPULegalizerInfo::legalizeTrapHsa(), lower(), lowerBitCount(), lowerVectorReduction(), moreElementsVector(), moreElementsVectorPhi(), narrowScalar(), narrowScalarFLDEXP(), narrowScalarFPTOI(), narrowScalarShift(), and widenScalar().