LLVM 22.0.0git
Public Member Functions | List of all members
llvm::LegalizeRuleSet Class Reference

#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"

Public Member Functions

 LegalizeRuleSet ()=default
 
bool isAliasedByAnother ()
 
void setIsAliasedByAnother ()
 
void aliasTo (unsigned Opcode)
 
unsigned getAlias () const
 
unsigned immIdx (unsigned ImmIdx)
 
LegalizeRuleSetlegalIf (LegalityPredicate Predicate)
 The instruction is legal if predicate is true.
 
LegalizeRuleSetlegalFor (std::initializer_list< LLT > Types)
 The instruction is legal when type index 0 is any type in the given list.
 
LegalizeRuleSetlegalFor (bool Pred, std::initializer_list< LLT > Types)
 
LegalizeRuleSetlegalFor (std::initializer_list< std::pair< LLT, LLT > > Types)
 The instruction is legal when type indexes 0 and 1 is any type pair in the given list.
 
LegalizeRuleSetlegalFor (bool Pred, std::initializer_list< std::pair< LLT, LLT > > Types)
 
LegalizeRuleSetlegalFor (bool Pred, std::initializer_list< std::tuple< LLT, LLT, LLT > > Types)
 
LegalizeRuleSetlegalForTypeWithAnyImm (std::initializer_list< LLT > Types)
 The instruction is legal when type index 0 is any type in the given list and imm index 0 is anything.
 
LegalizeRuleSetlegalForTypeWithAnyImm (std::initializer_list< std::pair< LLT, LLT > > Types)
 
LegalizeRuleSetlegalForTypesWithMemDesc (std::initializer_list< LegalityPredicates::TypePairAndMemDesc > TypesAndMemDesc)
 The instruction is legal when type indexes 0 and 1 along with the memory size and minimum alignment is any type and size tuple in the given list.
 
LegalizeRuleSetlegalForCartesianProduct (std::initializer_list< LLT > Types)
 The instruction is legal when type indexes 0 and 1 are both in the given list.
 
LegalizeRuleSetlegalForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1)
 The instruction is legal when type indexes 0 and 1 are both their respective lists.
 
LegalizeRuleSetlegalForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1, std::initializer_list< LLT > Types2)
 The instruction is legal when type indexes 0, 1, and 2 are both their respective lists.
 
LegalizeRuleSetalwaysLegal ()
 
LegalizeRuleSetbitcastIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 The specified type index is coerced if predicate is true.
 
LegalizeRuleSetlower ()
 The instruction is lowered.
 
LegalizeRuleSetlowerIf (LegalityPredicate Predicate)
 The instruction is lowered if predicate is true.
 
LegalizeRuleSetlowerIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 The instruction is lowered if predicate is true.
 
LegalizeRuleSetlowerFor (std::initializer_list< LLT > Types)
 The instruction is lowered when type index 0 is any type in the given list.
 
LegalizeRuleSetlowerFor (std::initializer_list< LLT > Types, LegalizeMutation Mutation)
 The instruction is lowered when type index 0 is any type in the given list.
 
LegalizeRuleSetlowerFor (std::initializer_list< std::pair< LLT, LLT > > Types)
 The instruction is lowered when type indexes 0 and 1 is any type pair in the given list.
 
LegalizeRuleSetlowerFor (std::initializer_list< std::pair< LLT, LLT > > Types, LegalizeMutation Mutation)
 The instruction is lowered when type indexes 0 and 1 is any type pair in the given list.
 
LegalizeRuleSetlowerForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1)
 The instruction is lowered when type indexes 0 and 1 are both in their respective lists.
 
LegalizeRuleSetlowerForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1, std::initializer_list< LLT > Types2)
 The instruction is lowered when type indexes 0, 1, and 2 are all in their respective lists.
 
LegalizeRuleSetlibcall ()
 The instruction is emitted as a library call.
 
LegalizeRuleSetlibcallIf (LegalityPredicate Predicate)
 Like legalIf, but for the Libcall action.
 
LegalizeRuleSetlibcallFor (std::initializer_list< LLT > Types)
 
LegalizeRuleSetlibcallFor (bool Pred, std::initializer_list< LLT > Types)
 
LegalizeRuleSetlibcallFor (std::initializer_list< std::pair< LLT, LLT > > Types)
 
LegalizeRuleSetlibcallFor (bool Pred, std::initializer_list< std::pair< LLT, LLT > > Types)
 
LegalizeRuleSetlibcallForCartesianProduct (std::initializer_list< LLT > Types)
 
LegalizeRuleSetlibcallForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1)
 
LegalizeRuleSetwidenScalarIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 Widen the scalar to the one selected by the mutation if the predicate is true.
 
LegalizeRuleSetnarrowScalarIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 Narrow the scalar to the one selected by the mutation if the predicate is true.
 
LegalizeRuleSetnarrowScalarFor (std::initializer_list< std::pair< LLT, LLT > > Types, LegalizeMutation Mutation)
 Narrow the scalar, specified in mutation, when type indexes 0 and 1 is any type pair in the given list.
 
LegalizeRuleSetmoreElementsIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 Add more elements to reach the type selected by the mutation if the predicate is true.
 
LegalizeRuleSetfewerElementsIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 Remove elements to reach the type selected by the mutation if the predicate is true.
 
LegalizeRuleSetunsupported ()
 The instruction is unsupported.
 
LegalizeRuleSetunsupportedIf (LegalityPredicate Predicate)
 
LegalizeRuleSetunsupportedFor (std::initializer_list< LLT > Types)
 
LegalizeRuleSetunsupportedIfMemSizeNotPow2 ()
 
LegalizeRuleSetlowerIfMemSizeNotPow2 ()
 Lower a memory operation if the memory size, rounded to bytes, is not a power of 2.
 
LegalizeRuleSetlowerIfMemSizeNotByteSizePow2 ()
 Lower a memory operation if the memory access size is not a round power of 2 byte size.
 
LegalizeRuleSetcustomIf (LegalityPredicate Predicate)
 
LegalizeRuleSetcustomFor (std::initializer_list< LLT > Types)
 
LegalizeRuleSetcustomFor (bool Pred, std::initializer_list< LLT > Types)
 
LegalizeRuleSetcustomFor (std::initializer_list< std::pair< LLT, LLT > > Types)
 The instruction is custom when type indexes 0 and 1 is any type pair in the given list.
 
LegalizeRuleSetcustomFor (bool Pred, std::initializer_list< std::pair< LLT, LLT > > Types)
 
LegalizeRuleSetcustomForCartesianProduct (std::initializer_list< LLT > Types)
 
LegalizeRuleSetcustomForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1)
 The instruction is custom when type indexes 0 and 1 are both in their respective lists.
 
LegalizeRuleSetcustomForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1, std::initializer_list< LLT > Types2)
 The instruction is custom when type indexes 0, 1, and 2 are all in their respective lists.
 
LegalizeRuleSetcustomForCartesianProduct (bool Pred, std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1)
 The instruction is custom when the predicate is true and type indexes 0 and 1 are all in their respective lists.
 
LegalizeRuleSetcustom ()
 Unconditionally custom lower.
 
LegalizeRuleSetwidenScalarToNextPow2 (unsigned TypeIdx, unsigned MinSize=0)
 Widen the scalar to the next power of two that is at least MinSize.
 
LegalizeRuleSetwidenScalarToNextMultipleOf (unsigned TypeIdx, unsigned Size)
 Widen the scalar to the next multiple of Size.
 
LegalizeRuleSetwidenScalarOrEltToNextPow2 (unsigned TypeIdx, unsigned MinSize=0)
 Widen the scalar or vector element type to the next power of two that is at least MinSize.
 
LegalizeRuleSetwidenScalarOrEltToNextPow2OrMinSize (unsigned TypeIdx, unsigned MinSize=0)
 Widen the scalar or vector element type to the next power of two that is at least MinSize.
 
LegalizeRuleSetnarrowScalar (unsigned TypeIdx, LegalizeMutation Mutation)
 
LegalizeRuleSetscalarize (unsigned TypeIdx)
 
LegalizeRuleSetscalarizeIf (LegalityPredicate Predicate, unsigned TypeIdx)
 
LegalizeRuleSetminScalarOrElt (unsigned TypeIdx, const LLT Ty)
 Ensure the scalar or element is at least as wide as Ty.
 
LegalizeRuleSetminScalarOrEltIf (LegalityPredicate Predicate, unsigned TypeIdx, const LLT Ty)
 Ensure the scalar or element is at least as wide as Ty.
 
LegalizeRuleSetwidenVectorEltsToVectorMinSize (unsigned TypeIdx, unsigned VectorSize)
 Ensure the vector size is at least as wide as VectorSize by promoting the element.
 
LegalizeRuleSetminScalar (unsigned TypeIdx, const LLT Ty)
 Ensure the scalar is at least as wide as Ty.
 
LegalizeRuleSetminScalar (bool Pred, unsigned TypeIdx, const LLT Ty)
 
LegalizeRuleSetminScalarIf (LegalityPredicate Predicate, unsigned TypeIdx, const LLT Ty)
 Ensure the scalar is at least as wide as Ty if condition is met.
 
LegalizeRuleSetmaxScalarOrElt (unsigned TypeIdx, const LLT Ty)
 Ensure the scalar is at most as wide as Ty.
 
LegalizeRuleSetmaxScalar (unsigned TypeIdx, const LLT Ty)
 Ensure the scalar is at most as wide as Ty.
 
LegalizeRuleSetmaxScalarIf (LegalityPredicate Predicate, unsigned TypeIdx, const LLT Ty)
 Conditionally limit the maximum size of the scalar.
 
LegalizeRuleSetclampScalar (unsigned TypeIdx, const LLT MinTy, const LLT MaxTy)
 Limit the range of scalar sizes to MinTy and MaxTy.
 
LegalizeRuleSetclampScalar (bool Pred, unsigned TypeIdx, const LLT MinTy, const LLT MaxTy)
 
LegalizeRuleSetclampScalarOrElt (unsigned TypeIdx, const LLT MinTy, const LLT MaxTy)
 Limit the range of scalar sizes to MinTy and MaxTy.
 
LegalizeRuleSetminScalarSameAs (unsigned TypeIdx, unsigned LargeTypeIdx)
 Widen the scalar to match the size of another.
 
LegalizeRuleSetmaxScalarSameAs (unsigned TypeIdx, unsigned NarrowTypeIdx)
 Narrow the scalar to match the size of another.
 
LegalizeRuleSetscalarSameSizeAs (unsigned TypeIdx, unsigned SameSizeIdx)
 Change the type TypeIdx to have the same scalar size as type SameSizeIdx.
 
LegalizeRuleSetminScalarEltSameAsIf (LegalityPredicate Predicate, unsigned TypeIdx, unsigned LargeTypeIdx)
 Conditionally widen the scalar or elt to match the size of another.
 
LegalizeRuleSetmaxScalarEltSameAsIf (LegalityPredicate Predicate, unsigned TypeIdx, unsigned SmallTypeIdx)
 Conditionally narrow the scalar or elt to match the size of another.
 
LegalizeRuleSetmoreElementsToNextPow2 (unsigned TypeIdx)
 Add more elements to the vector to reach the next power of two.
 
LegalizeRuleSetclampMinNumElements (unsigned TypeIdx, const LLT EltTy, unsigned MinElements)
 Limit the number of elements in EltTy vectors to at least MinElements.
 
LegalizeRuleSetalignNumElementsTo (unsigned TypeIdx, const LLT EltTy, unsigned NumElts)
 Set number of elements to nearest larger multiple of NumElts.
 
LegalizeRuleSetclampMaxNumElements (unsigned TypeIdx, const LLT EltTy, unsigned MaxElements)
 Limit the number of elements in EltTy vectors to at most MaxElements.
 
LegalizeRuleSetclampNumElements (unsigned TypeIdx, const LLT MinTy, const LLT MaxTy)
 Limit the number of elements for the given vectors to at least MinTy's number of elements and at most MaxTy's number of elements.
 
LegalizeRuleSetclampMaxNumElementsStrict (unsigned TypeIdx, const LLT EltTy, unsigned NumElts)
 Express EltTy vectors strictly using vectors with NumElts elements (or scalars when NumElts equals 1).
 
LegalizeRuleSetfallback ()
 Fallback on the previous implementation.
 
LLVM_ABI bool verifyTypeIdxsCoverage (unsigned NumTypeIdxs) const
 Check if there is no type index which is obviously not handled by the LegalizeRuleSet in any way at all.
 
LLVM_ABI bool verifyImmIdxsCoverage (unsigned NumImmIdxs) const
 Check if there is no imm index which is obviously not handled by the LegalizeRuleSet in any way at all.
 
LLVM_ABI LegalizeActionStep apply (const LegalityQuery &Query) const
 Apply the ruleset to the given LegalityQuery.
 

Detailed Description

Definition at line 438 of file LegalizerInfo.h.

Constructor & Destructor Documentation

◆ LegalizeRuleSet()

llvm::LegalizeRuleSet::LegalizeRuleSet ( )
default

Member Function Documentation

◆ aliasTo()

void llvm::LegalizeRuleSet::aliasTo ( unsigned  Opcode)
inline

◆ alignNumElementsTo()

LegalizeRuleSet & llvm::LegalizeRuleSet::alignNumElementsTo ( unsigned  TypeIdx,
const LLT  EltTy,
unsigned  NumElts 
)
inline

Set number of elements to nearest larger multiple of NumElts.

Definition at line 1238 of file LegalizerInfo.h.

References llvm::alignTo(), llvm::LLT::fixed_vector(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::isFixedVector(), and llvm::LegalityQuery::Types.

Referenced by clampMaxNumElementsStrict().

◆ alwaysLegal()

LegalizeRuleSet & llvm::LegalizeRuleSet::alwaysLegal ( )
inline

◆ apply()

LegalizeActionStep LegalizeRuleSet::apply ( const LegalityQuery Query) const

◆ bitcastIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::bitcastIf ( LegalityPredicate  Predicate,
LegalizeMutation  Mutation 
)
inline

The specified type index is coerced if predicate is true.

Definition at line 696 of file LegalizerInfo.h.

References Mutation.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and llvm::PPCLegalizerInfo::PPCLegalizerInfo().

◆ clampMaxNumElements()

LegalizeRuleSet & llvm::LegalizeRuleSet::clampMaxNumElements ( unsigned  TypeIdx,
const LLT  EltTy,
unsigned  MaxElements 
)
inline

◆ clampMaxNumElementsStrict()

LegalizeRuleSet & llvm::LegalizeRuleSet::clampMaxNumElementsStrict ( unsigned  TypeIdx,
const LLT  EltTy,
unsigned  NumElts 
)
inline

Express EltTy vectors strictly using vectors with NumElts elements (or scalars when NumElts equals 1).

First pad with undef elements to nearest larger multiple of NumElts. Then perform split with all sub-instructions having the same type. Using clampMaxNumElements (non-strict) can result in leftover instruction with different type (fewer elements then NumElts or scalar). No effect if the type is not a vector.

Definition at line 1301 of file LegalizerInfo.h.

References alignNumElementsTo(), and clampMaxNumElements().

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo().

◆ clampMinNumElements()

LegalizeRuleSet & llvm::LegalizeRuleSet::clampMinNumElements ( unsigned  TypeIdx,
const LLT  EltTy,
unsigned  MinElements 
)
inline

◆ clampNumElements()

LegalizeRuleSet & llvm::LegalizeRuleSet::clampNumElements ( unsigned  TypeIdx,
const LLT  MinTy,
const LLT  MaxTy 
)
inline

Limit the number of elements for the given vectors to at least MinTy's number of elements and at most MaxTy's number of elements.

No effect if the type is not a vector or does not have the same element type as the constraints. The element type of MinTy and MaxTy must match.

Definition at line 1281 of file LegalizerInfo.h.

References assert(), clampMaxNumElements(), clampMinNumElements(), llvm::LLT::getElementType(), llvm::LLT::getNumElements(), and llvm::LLT::isScalableVector().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().

◆ clampScalar() [1/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::clampScalar ( bool  Pred,
unsigned  TypeIdx,
const LLT  MinTy,
const LLT  MaxTy 
)
inline

Definition at line 1129 of file LegalizerInfo.h.

References clampScalar().

◆ clampScalar() [2/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::clampScalar ( unsigned  TypeIdx,
const LLT  MinTy,
const LLT  MaxTy 
)
inline

◆ clampScalarOrElt()

LegalizeRuleSet & llvm::LegalizeRuleSet::clampScalarOrElt ( unsigned  TypeIdx,
const LLT  MinTy,
const LLT  MaxTy 
)
inline

Limit the range of scalar sizes to MinTy and MaxTy.

Definition at line 1137 of file LegalizerInfo.h.

References maxScalarOrElt(), and minScalarOrElt().

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo().

◆ custom()

LegalizeRuleSet & llvm::LegalizeRuleSet::custom ( )
inline

◆ customFor() [1/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customFor ( bool  Pred,
std::initializer_list< LLT Types 
)
inline

Definition at line 900 of file LegalizerInfo.h.

◆ customFor() [2/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customFor ( bool  Pred,
std::initializer_list< std::pair< LLT, LLT > >  Types 
)
inline

Definition at line 911 of file LegalizerInfo.h.

◆ customFor() [3/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customFor ( std::initializer_list< LLT Types)
inline

◆ customFor() [4/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customFor ( std::initializer_list< std::pair< LLT, LLT > >  Types)
inline

The instruction is custom when type indexes 0 and 1 is any type pair in the given list.

Definition at line 908 of file LegalizerInfo.h.

◆ customForCartesianProduct() [1/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customForCartesianProduct ( bool  Pred,
std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1 
)
inline

The instruction is custom when the predicate is true and type indexes 0 and 1 are all in their respective lists.

Definition at line 941 of file LegalizerInfo.h.

◆ customForCartesianProduct() [2/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customForCartesianProduct ( std::initializer_list< LLT Types)
inline

◆ customForCartesianProduct() [3/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customForCartesianProduct ( std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1 
)
inline

The instruction is custom when type indexes 0 and 1 are both in their respective lists.

Definition at line 924 of file LegalizerInfo.h.

◆ customForCartesianProduct() [4/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::customForCartesianProduct ( std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1,
std::initializer_list< LLT Types2 
)
inline

The instruction is custom when type indexes 0, 1, and 2 are all in their respective lists.

Definition at line 931 of file LegalizerInfo.h.

◆ customIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::customIf ( LegalityPredicate  Predicate)
inline

◆ fallback()

LegalizeRuleSet & llvm::LegalizeRuleSet::fallback ( )
inline

Fallback on the previous implementation.

This should only be used while porting a rule.

Definition at line 1309 of file LegalizerInfo.h.

◆ fewerElementsIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::fewerElementsIf ( LegalityPredicate  Predicate,
LegalizeMutation  Mutation 
)
inline

Remove elements to reach the type selected by the mutation if the predicate is true.

Definition at line 849 of file LegalizerInfo.h.

References Mutation.

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo().

◆ getAlias()

unsigned llvm::LegalizeRuleSet::getAlias ( ) const
inline

Definition at line 602 of file LegalizerInfo.h.

◆ immIdx()

unsigned llvm::LegalizeRuleSet::immIdx ( unsigned  ImmIdx)
inline

◆ isAliasedByAnother()

bool llvm::LegalizeRuleSet::isAliasedByAnother ( )
inline

Definition at line 594 of file LegalizerInfo.h.

◆ legalFor() [1/5]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalFor ( bool  Pred,
std::initializer_list< LLT Types 
)
inline

Definition at line 625 of file LegalizerInfo.h.

◆ legalFor() [2/5]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalFor ( bool  Pred,
std::initializer_list< std::pair< LLT, LLT > >  Types 
)
inline

Definition at line 635 of file LegalizerInfo.h.

◆ legalFor() [3/5]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalFor ( bool  Pred,
std::initializer_list< std::tuple< LLT, LLT, LLT > >  Types 
)
inline

Definition at line 642 of file LegalizerInfo.h.

◆ legalFor() [4/5]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalFor ( std::initializer_list< LLT Types)
inline

◆ legalFor() [5/5]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalFor ( std::initializer_list< std::pair< LLT, LLT > >  Types)
inline

The instruction is legal when type indexes 0 and 1 is any type pair in the given list.

Definition at line 632 of file LegalizerInfo.h.

◆ legalForCartesianProduct() [1/3]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalForCartesianProduct ( std::initializer_list< LLT Types)
inline

The instruction is legal when type indexes 0 and 1 are both in the given list.

That is, the type pair is in the cartesian product of the list.

Definition at line 671 of file LegalizerInfo.h.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), llvm::ARMLegalizerInfo::ARMLegalizerInfo(), llvm::MipsLegalizerInfo::MipsLegalizerInfo(), llvm::PPCLegalizerInfo::PPCLegalizerInfo(), llvm::SPIRVLegalizerInfo::SPIRVLegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().

◆ legalForCartesianProduct() [2/3]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalForCartesianProduct ( std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1 
)
inline

The instruction is legal when type indexes 0 and 1 are both their respective lists.

Definition at line 676 of file LegalizerInfo.h.

◆ legalForCartesianProduct() [3/3]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalForCartesianProduct ( std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1,
std::initializer_list< LLT Types2 
)
inline

The instruction is legal when type indexes 0, 1, and 2 are both their respective lists.

Definition at line 682 of file LegalizerInfo.h.

◆ legalForTypesWithMemDesc()

LegalizeRuleSet & llvm::LegalizeRuleSet::legalForTypesWithMemDesc ( std::initializer_list< LegalityPredicates::TypePairAndMemDesc TypesAndMemDesc)
inline

The instruction is legal when type indexes 0 and 1 along with the memory size and minimum alignment is any type and size tuple in the given list.

Definition at line 662 of file LegalizerInfo.h.

References llvm::LegalityPredicates::typePairAndMemDescInSet().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and llvm::ARMLegalizerInfo::ARMLegalizerInfo().

◆ legalForTypeWithAnyImm() [1/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalForTypeWithAnyImm ( std::initializer_list< LLT Types)
inline

The instruction is legal when type index 0 is any type in the given list and imm index 0 is anything.

Definition at line 649 of file LegalizerInfo.h.

◆ legalForTypeWithAnyImm() [2/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::legalForTypeWithAnyImm ( std::initializer_list< std::pair< LLT, LLT > >  Types)
inline

Definition at line 654 of file LegalizerInfo.h.

◆ legalIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::legalIf ( LegalityPredicate  Predicate)
inline

◆ libcall()

LegalizeRuleSet & llvm::LegalizeRuleSet::libcall ( )
inline

The instruction is emitted as a library call.

Definition at line 769 of file LegalizerInfo.h.

Referenced by llvm::X86LegalizerInfo::X86LegalizerInfo().

◆ libcallFor() [1/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::libcallFor ( bool  Pred,
std::initializer_list< LLT Types 
)
inline

Definition at line 787 of file LegalizerInfo.h.

◆ libcallFor() [2/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::libcallFor ( bool  Pred,
std::initializer_list< std::pair< LLT, LLT > >  Types 
)
inline

Definition at line 797 of file LegalizerInfo.h.

◆ libcallFor() [3/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::libcallFor ( std::initializer_list< LLT Types)
inline

◆ libcallFor() [4/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::libcallFor ( std::initializer_list< std::pair< LLT, LLT > >  Types)
inline

Definition at line 793 of file LegalizerInfo.h.

◆ libcallForCartesianProduct() [1/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::libcallForCartesianProduct ( std::initializer_list< LLT Types)
inline

Definition at line 803 of file LegalizerInfo.h.

Referenced by llvm::MipsLegalizerInfo::MipsLegalizerInfo().

◆ libcallForCartesianProduct() [2/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::libcallForCartesianProduct ( std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1 
)
inline

Definition at line 807 of file LegalizerInfo.h.

◆ libcallIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::libcallIf ( LegalityPredicate  Predicate)
inline

Like legalIf, but for the Libcall action.

Definition at line 778 of file LegalizerInfo.h.

◆ lower()

LegalizeRuleSet & llvm::LegalizeRuleSet::lower ( )
inline

◆ lowerFor() [1/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerFor ( std::initializer_list< LLT Types)
inline

The instruction is lowered when type index 0 is any type in the given list.

Keep type index 0 as the same type.

Definition at line 731 of file LegalizerInfo.h.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), llvm::ARMLegalizerInfo::ARMLegalizerInfo(), llvm::MipsLegalizerInfo::MipsLegalizerInfo(), and llvm::PPCLegalizerInfo::PPCLegalizerInfo().

◆ lowerFor() [2/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerFor ( std::initializer_list< LLT Types,
LegalizeMutation  Mutation 
)
inline

The instruction is lowered when type index 0 is any type in the given list.

Definition at line 736 of file LegalizerInfo.h.

References Mutation.

◆ lowerFor() [3/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerFor ( std::initializer_list< std::pair< LLT, LLT > >  Types)
inline

The instruction is lowered when type indexes 0 and 1 is any type pair in the given list.

Keep type index 0 as the same type.

Definition at line 742 of file LegalizerInfo.h.

◆ lowerFor() [4/4]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerFor ( std::initializer_list< std::pair< LLT, LLT > >  Types,
LegalizeMutation  Mutation 
)
inline

The instruction is lowered when type indexes 0 and 1 is any type pair in the given list.

Definition at line 747 of file LegalizerInfo.h.

References Mutation.

◆ lowerForCartesianProduct() [1/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerForCartesianProduct ( std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1 
)
inline

The instruction is lowered when type indexes 0 and 1 are both in their respective lists.

Definition at line 753 of file LegalizerInfo.h.

◆ lowerForCartesianProduct() [2/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerForCartesianProduct ( std::initializer_list< LLT Types0,
std::initializer_list< LLT Types1,
std::initializer_list< LLT Types2 
)
inline

The instruction is lowered when type indexes 0, 1, and 2 are all in their respective lists.

Definition at line 760 of file LegalizerInfo.h.

◆ lowerIf() [1/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerIf ( LegalityPredicate  Predicate)
inline

The instruction is lowered if predicate is true.

Keep type index 0 as the same type.

Definition at line 714 of file LegalizerInfo.h.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ lowerIf() [2/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerIf ( LegalityPredicate  Predicate,
LegalizeMutation  Mutation 
)
inline

The instruction is lowered if predicate is true.

Definition at line 722 of file LegalizerInfo.h.

References Mutation.

◆ lowerIfMemSizeNotByteSizePow2()

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerIfMemSizeNotByteSizePow2 ( )
inline

Lower a memory operation if the memory access size is not a round power of 2 byte size.

This is stricter than lowerIfMemSizeNotPow2, and more likely what you want (e.g. this will lower s1, s7 and s24).

Definition at line 886 of file LegalizerInfo.h.

References llvm::LegalityPredicates::memSizeNotByteSizePow2().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ lowerIfMemSizeNotPow2()

LegalizeRuleSet & llvm::LegalizeRuleSet::lowerIfMemSizeNotPow2 ( )
inline

Lower a memory operation if the memory size, rounded to bytes, is not a power of 2.

For example, this will not trigger for s1 or s7, but will for s24.

Definition at line 878 of file LegalizerInfo.h.

References llvm::LegalityPredicates::memSizeInBytesNotPow2().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ maxScalar()

LegalizeRuleSet & llvm::LegalizeRuleSet::maxScalar ( unsigned  TypeIdx,
const LLT  Ty 
)
inline

◆ maxScalarEltSameAsIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::maxScalarEltSameAsIf ( LegalityPredicate  Predicate,
unsigned  TypeIdx,
unsigned  SmallTypeIdx 
)
inline

Conditionally narrow the scalar or elt to match the size of another.

Definition at line 1192 of file LegalizerInfo.h.

References narrowScalarIf(), and llvm::LegalityQuery::Types.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ maxScalarIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::maxScalarIf ( LegalityPredicate  Predicate,
unsigned  TypeIdx,
const LLT  Ty 
)
inline

Conditionally limit the maximum size of the scalar.

For example, when the maximum size of one type depends on the size of another such as extracting N bits from an M bit container.

Definition at line 1107 of file LegalizerInfo.h.

References llvm::LLT::getSizeInBits(), llvm::LLT::isScalar(), and llvm::LegalityQuery::Types.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ maxScalarOrElt()

LegalizeRuleSet & llvm::LegalizeRuleSet::maxScalarOrElt ( unsigned  TypeIdx,
const LLT  Ty 
)
inline

Ensure the scalar is at most as wide as Ty.

Definition at line 1087 of file LegalizerInfo.h.

References llvm::LLT::getScalarSizeInBits().

Referenced by clampScalarOrElt().

◆ maxScalarSameAs()

LegalizeRuleSet & llvm::LegalizeRuleSet::maxScalarSameAs ( unsigned  TypeIdx,
unsigned  NarrowTypeIdx 
)
inline

Narrow the scalar to match the size of another.

Definition at line 1155 of file LegalizerInfo.h.

References llvm::LegalizeMutations::changeElementSizeTo(), and llvm::LegalityQuery::Types.

Referenced by scalarSameSizeAs().

◆ minScalar() [1/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::minScalar ( bool  Pred,
unsigned  TypeIdx,
const LLT  Ty 
)
inline

Definition at line 1064 of file LegalizerInfo.h.

References minScalar().

◆ minScalar() [2/2]

LegalizeRuleSet & llvm::LegalizeRuleSet::minScalar ( unsigned  TypeIdx,
const LLT  Ty 
)
inline

◆ minScalarEltSameAsIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::minScalarEltSameAsIf ( LegalityPredicate  Predicate,
unsigned  TypeIdx,
unsigned  LargeTypeIdx 
)
inline

Conditionally widen the scalar or elt to match the size of another.

Definition at line 1174 of file LegalizerInfo.h.

References llvm::LLT::scalar(), llvm::LegalityQuery::Types, and widenScalarIf().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ minScalarIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::minScalarIf ( LegalityPredicate  Predicate,
unsigned  TypeIdx,
const LLT  Ty 
)
inline

Ensure the scalar is at least as wide as Ty if condition is met.

Definition at line 1071 of file LegalizerInfo.h.

References llvm::LLT::getSizeInBits(), llvm::LLT::isScalar(), and llvm::LegalityQuery::Types.

◆ minScalarOrElt()

LegalizeRuleSet & llvm::LegalizeRuleSet::minScalarOrElt ( unsigned  TypeIdx,
const LLT  Ty 
)
inline

Ensure the scalar or element is at least as wide as Ty.

Definition at line 1016 of file LegalizerInfo.h.

References llvm::LLT::getScalarSizeInBits().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and clampScalarOrElt().

◆ minScalarOrEltIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::minScalarOrEltIf ( LegalityPredicate  Predicate,
unsigned  TypeIdx,
const LLT  Ty 
)
inline

Ensure the scalar or element is at least as wide as Ty.

Definition at line 1025 of file LegalizerInfo.h.

References llvm::LLT::getScalarSizeInBits().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ minScalarSameAs()

LegalizeRuleSet & llvm::LegalizeRuleSet::minScalarSameAs ( unsigned  TypeIdx,
unsigned  LargeTypeIdx 
)
inline

Widen the scalar to match the size of another.

Definition at line 1143 of file LegalizerInfo.h.

References llvm::LegalizeMutations::changeElementSizeTo(), and llvm::LegalityQuery::Types.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and scalarSameSizeAs().

◆ moreElementsIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::moreElementsIf ( LegalityPredicate  Predicate,
LegalizeMutation  Mutation 
)
inline

Add more elements to reach the type selected by the mutation if the predicate is true.

Definition at line 840 of file LegalizerInfo.h.

References Mutation.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo().

◆ moreElementsToNextPow2()

LegalizeRuleSet & llvm::LegalizeRuleSet::moreElementsToNextPow2 ( unsigned  TypeIdx)
inline

Add more elements to the vector to reach the next power of two.

No effect if the type is not a vector or the element count is a power of two.

Definition at line 1211 of file LegalizerInfo.h.

References llvm::LegalizeMutations::moreElementsToNextPow2().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().

◆ narrowScalar()

LegalizeRuleSet & llvm::LegalizeRuleSet::narrowScalar ( unsigned  TypeIdx,
LegalizeMutation  Mutation 
)
inline

Definition at line 996 of file LegalizerInfo.h.

References Mutation.

◆ narrowScalarFor()

LegalizeRuleSet & llvm::LegalizeRuleSet::narrowScalarFor ( std::initializer_list< std::pair< LLT, LLT > >  Types,
LegalizeMutation  Mutation 
)
inline

Narrow the scalar, specified in mutation, when type indexes 0 and 1 is any type pair in the given list.

Definition at line 833 of file LegalizerInfo.h.

References Mutation.

◆ narrowScalarIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::narrowScalarIf ( LegalityPredicate  Predicate,
LegalizeMutation  Mutation 
)
inline

Narrow the scalar to the one selected by the mutation if the predicate is true.

Definition at line 823 of file LegalizerInfo.h.

References Mutation.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and maxScalarEltSameAsIf().

◆ scalarize()

LegalizeRuleSet & llvm::LegalizeRuleSet::scalarize ( unsigned  TypeIdx)
inline

◆ scalarizeIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::scalarizeIf ( LegalityPredicate  Predicate,
unsigned  TypeIdx 
)
inline

◆ scalarSameSizeAs()

LegalizeRuleSet & llvm::LegalizeRuleSet::scalarSameSizeAs ( unsigned  TypeIdx,
unsigned  SameSizeIdx 
)
inline

Change the type TypeIdx to have the same scalar size as type SameSizeIdx.

Definition at line 1168 of file LegalizerInfo.h.

References maxScalarSameAs(), and minScalarSameAs().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().

◆ setIsAliasedByAnother()

void llvm::LegalizeRuleSet::setIsAliasedByAnother ( )
inline

Definition at line 595 of file LegalizerInfo.h.

◆ unsupported()

LegalizeRuleSet & llvm::LegalizeRuleSet::unsupported ( )
inline

The instruction is unsupported.

Definition at line 858 of file LegalizerInfo.h.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ unsupportedFor()

LegalizeRuleSet & llvm::LegalizeRuleSet::unsupportedFor ( std::initializer_list< LLT Types)
inline

Definition at line 866 of file LegalizerInfo.h.

◆ unsupportedIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::unsupportedIf ( LegalityPredicate  Predicate)
inline

Definition at line 862 of file LegalizerInfo.h.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ unsupportedIfMemSizeNotPow2()

LegalizeRuleSet & llvm::LegalizeRuleSet::unsupportedIfMemSizeNotPow2 ( )
inline

◆ verifyImmIdxsCoverage()

bool LegalizeRuleSet::verifyImmIdxsCoverage ( unsigned  NumImmIdxs) const

Check if there is no imm index which is obviously not handled by the LegalizeRuleSet in any way at all.

Precondition
Type indices of the opcode form a dense [0, NumTypeIdxs) set.

Definition at line 248 of file LegalizerInfo.cpp.

References llvm::dbgs(), llvm::SmallBitVector::find_first_unset(), LLVM_DEBUG, and VerboseVerifyLegalizerInfo.

Referenced by llvm::LegalizerInfo::verify().

◆ verifyTypeIdxsCoverage()

bool LegalizeRuleSet::verifyTypeIdxsCoverage ( unsigned  NumTypeIdxs) const

Check if there is no type index which is obviously not handled by the LegalizeRuleSet in any way at all.

Precondition
Type indices of the opcode form a dense [0, NumTypeIdxs) set.

Definition at line 217 of file LegalizerInfo.cpp.

References llvm::dbgs(), llvm::SmallBitVector::find_first_unset(), LLVM_DEBUG, and VerboseVerifyLegalizerInfo.

Referenced by llvm::LegalizerInfo::verify().

◆ widenScalarIf()

LegalizeRuleSet & llvm::LegalizeRuleSet::widenScalarIf ( LegalityPredicate  Predicate,
LegalizeMutation  Mutation 
)
inline

Widen the scalar to the one selected by the mutation if the predicate is true.

Definition at line 814 of file LegalizerInfo.h.

References Mutation.

Referenced by minScalarEltSameAsIf().

◆ widenScalarOrEltToNextPow2()

LegalizeRuleSet & llvm::LegalizeRuleSet::widenScalarOrEltToNextPow2 ( unsigned  TypeIdx,
unsigned  MinSize = 0 
)
inline

Widen the scalar or vector element type to the next power of two that is at least MinSize.

No effect if the scalar size is a power of two.

Definition at line 976 of file LegalizerInfo.h.

References llvm::LegalizeMutations::widenScalarOrEltToNextPow2().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ widenScalarOrEltToNextPow2OrMinSize()

LegalizeRuleSet & llvm::LegalizeRuleSet::widenScalarOrEltToNextPow2OrMinSize ( unsigned  TypeIdx,
unsigned  MinSize = 0 
)
inline

Widen the scalar or vector element type to the next power of two that is at least MinSize.

No effect if the scalar size is a power of two.

Definition at line 986 of file LegalizerInfo.h.

References llvm::LegalizeMutations::widenScalarOrEltToNextPow2().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().

◆ widenScalarToNextMultipleOf()

LegalizeRuleSet & llvm::LegalizeRuleSet::widenScalarToNextMultipleOf ( unsigned  TypeIdx,
unsigned  Size 
)
inline

Widen the scalar to the next multiple of Size.

No effect if the type is not a scalar or is a multiple of Size.

Definition at line 966 of file LegalizerInfo.h.

References Size, and llvm::LegalizeMutations::widenScalarOrEltToNextMultipleOf().

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo().

◆ widenScalarToNextPow2()

LegalizeRuleSet & llvm::LegalizeRuleSet::widenScalarToNextPow2 ( unsigned  TypeIdx,
unsigned  MinSize = 0 
)
inline

Widen the scalar to the next power of two that is at least MinSize.

No effect if the type is a power of two, except if the type is smaller than MinSize, or if the type is a vector type.

Definition at line 956 of file LegalizerInfo.h.

References llvm::LegalizeMutations::widenScalarOrEltToNextPow2().

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo(), llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo(), llvm::M68kLegalizerInfo::M68kLegalizerInfo(), llvm::RISCVLegalizerInfo::RISCVLegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().

◆ widenVectorEltsToVectorMinSize()

LegalizeRuleSet & llvm::LegalizeRuleSet::widenVectorEltsToVectorMinSize ( unsigned  TypeIdx,
unsigned  VectorSize 
)
inline

Ensure the vector size is at least as wide as VectorSize by promoting the element.

Definition at line 1037 of file LegalizerInfo.h.

References llvm::LLT::fixed_vector(), llvm::LLT::getNumElements(), llvm::LLT::getSizeInBits(), llvm::LLT::isFixedVector(), llvm::LLT::scalar(), and llvm::LegalityQuery::Types.

Referenced by llvm::AArch64LegalizerInfo::AArch64LegalizerInfo().


The documentation for this class was generated from the following files: