LLVM  10.0.0svn
Public Member Functions | List of all members
llvm::LegalizeRuleSet Class Reference

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

Public Member Functions

 LegalizeRuleSet ()
 
bool isAliasedByAnother ()
 
void setIsAliasedByAnother ()
 
void aliasTo (unsigned Opcode)
 
unsigned getAlias () const
 
LegalizeRuleSetlegalIf (LegalityPredicate Predicate)
 The instruction is legal if predicate is true. More...
 
LegalizeRuleSetlegalFor (std::initializer_list< LLT > Types)
 The instruction is legal when type index 0 is any type in the given list. More...
 
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. More...
 
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. More...
 
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. More...
 
LegalizeRuleSetlegalForCartesianProduct (std::initializer_list< LLT > Types)
 The instruction is legal when type indexes 0 and 1 are both in the given list. More...
 
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. More...
 
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. More...
 
LegalizeRuleSetalwaysLegal ()
 
LegalizeRuleSetlower ()
 The instruction is lowered. More...
 
LegalizeRuleSetlowerIf (LegalityPredicate Predicate)
 The instruction is lowered if predicate is true. More...
 
LegalizeRuleSetlowerIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 The instruction is lowered if predicate is true. More...
 
LegalizeRuleSetlowerFor (std::initializer_list< LLT > Types)
 The instruction is lowered when type index 0 is any type in the given list. More...
 
LegalizeRuleSetlowerFor (std::initializer_list< LLT > Types, LegalizeMutation Mutation)
 The instruction is lowered when type index 0 is any type in the given list. More...
 
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. More...
 
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. More...
 
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. More...
 
LegalizeRuleSetlowerForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1, std::initializer_list< LLT > Types2)
 The instruction is lowered when when type indexes 0, 1, and 2 are all in their respective lists. More...
 
LegalizeRuleSetlibcallIf (LegalityPredicate Predicate)
 Like legalIf, but for the Libcall action. More...
 
LegalizeRuleSetlibcallFor (std::initializer_list< LLT > Types)
 
LegalizeRuleSetlibcallFor (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. More...
 
LegalizeRuleSetnarrowScalarIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 Narrow the scalar to the one selected by the mutation if the predicate is true. More...
 
LegalizeRuleSetmoreElementsIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 Add more elements to reach the type selected by the mutation if the predicate is true. More...
 
LegalizeRuleSetfewerElementsIf (LegalityPredicate Predicate, LegalizeMutation Mutation)
 Remove elements to reach the type selected by the mutation if the predicate is true. More...
 
LegalizeRuleSetunsupported ()
 The instruction is unsupported. More...
 
LegalizeRuleSetunsupportedIf (LegalityPredicate Predicate)
 
LegalizeRuleSetunsupportedIfMemSizeNotPow2 ()
 
LegalizeRuleSetlowerIfMemSizeNotPow2 ()
 
LegalizeRuleSetcustomIf (LegalityPredicate Predicate)
 
LegalizeRuleSetcustomFor (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. More...
 
LegalizeRuleSetcustomForCartesianProduct (std::initializer_list< LLT > Types)
 
LegalizeRuleSetcustomForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1)
 
LegalizeRuleSetcustom ()
 Unconditionally custom lower. More...
 
LegalizeRuleSetwidenScalarToNextPow2 (unsigned TypeIdx, unsigned MinSize=0)
 Widen the scalar to the next power of two that is at least MinSize. More...
 
LegalizeRuleSetwidenScalarOrEltToNextPow2 (unsigned TypeIdx, unsigned MinSize=0)
 Widen the scalar or vector element type to the next power of two that is at least MinSize. More...
 
LegalizeRuleSetnarrowScalar (unsigned TypeIdx, LegalizeMutation Mutation)
 
LegalizeRuleSetscalarize (unsigned TypeIdx)
 
LegalizeRuleSetminScalarOrElt (unsigned TypeIdx, const LLT &Ty)
 Ensure the scalar or element is at least as wide as Ty. More...
 
LegalizeRuleSetminScalarOrEltIf (LegalityPredicate Predicate, unsigned TypeIdx, const LLT &Ty)
 Ensure the scalar or element is at least as wide as Ty. More...
 
LegalizeRuleSetminScalar (unsigned TypeIdx, const LLT &Ty)
 Ensure the scalar is at least as wide as Ty. More...
 
LegalizeRuleSetmaxScalarOrElt (unsigned TypeIdx, const LLT &Ty)
 Ensure the scalar is at most as wide as Ty. More...
 
LegalizeRuleSetmaxScalar (unsigned TypeIdx, const LLT &Ty)
 Ensure the scalar is at most as wide as Ty. More...
 
LegalizeRuleSetmaxScalarIf (LegalityPredicate Predicate, unsigned TypeIdx, const LLT &Ty)
 Conditionally limit the maximum size of the scalar. More...
 
LegalizeRuleSetclampScalar (unsigned TypeIdx, const LLT &MinTy, const LLT &MaxTy)
 Limit the range of scalar sizes to MinTy and MaxTy. More...
 
LegalizeRuleSetclampScalarOrElt (unsigned TypeIdx, const LLT &MinTy, const LLT &MaxTy)
 Limit the range of scalar sizes to MinTy and MaxTy. More...
 
LegalizeRuleSetminScalarSameAs (unsigned TypeIdx, unsigned LargeTypeIdx)
 Widen the scalar to match the size of another. More...
 
LegalizeRuleSetminScalarEltSameAsIf (LegalityPredicate Predicate, unsigned TypeIdx, unsigned LargeTypeIdx)
 Conditionally widen the scalar or elt to match the size of another. More...
 
LegalizeRuleSetmoreElementsToNextPow2 (unsigned TypeIdx)
 Add more elements to the vector to reach the next power of two. More...
 
LegalizeRuleSetclampMinNumElements (unsigned TypeIdx, const LLT &EltTy, unsigned MinElements)
 Limit the number of elements in EltTy vectors to at least MinElements. More...
 
LegalizeRuleSetclampMaxNumElements (unsigned TypeIdx, const LLT &EltTy, unsigned MaxElements)
 Limit the number of elements in EltTy vectors to at most MaxElements. More...
 
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. More...
 
LegalizeRuleSetfallback ()
 Fallback on the previous implementation. More...
 
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. More...
 
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. More...
 
LegalizeActionStep apply (const LegalityQuery &Query) const
 Apply the ruleset to the given LegalityQuery. More...
 

Detailed Description

Definition at line 317 of file LegalizerInfo.h.

Constructor & Destructor Documentation

◆ LegalizeRuleSet()

llvm::LegalizeRuleSet::LegalizeRuleSet ( )
inline

Definition at line 464 of file LegalizerInfo.h.

Member Function Documentation

◆ aliasTo()

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

◆ alwaysLegal()

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

◆ apply()

LegalizeActionStep LegalizeRuleSet::apply ( const LegalityQuery Query) const

◆ clampMaxNumElements()

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

◆ clampMinNumElements()

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

Limit the number of elements in EltTy vectors to at least MinElements.

Definition at line 856 of file LegalizerInfo.h.

References llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::isVector(), llvm::LegalizeActions::MoreElements, llvm::LegalityQuery::Types, and llvm::LLT::vector().

◆ 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 897 of file LegalizerInfo.h.

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

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

◆ clampScalar()

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

Limit the range of scalar sizes to MinTy and MaxTy.

Definition at line 802 of file LegalizerInfo.h.

References assert(), and llvm::LLT::isScalar().

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo(), and llvm::X86LegalizerInfo::legalizeIntrinsic().

◆ 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 809 of file LegalizerInfo.h.

References maxScalarOrElt().

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

◆ custom()

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

Unconditionally custom lower.

Definition at line 703 of file LegalizerInfo.h.

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

◆ customFor() [1/2]

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

◆ customFor() [2/2]

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 689 of file LegalizerInfo.h.

References llvm::LegalizeActions::Custom.

◆ customForCartesianProduct() [1/2]

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

Definition at line 693 of file LegalizerInfo.h.

References llvm::LegalizeActions::Custom.

◆ customForCartesianProduct() [2/2]

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

Definition at line 697 of file LegalizerInfo.h.

References llvm::LegalizeActions::Custom.

◆ 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 909 of file LegalizerInfo.h.

References add(), llvm::cl::apply(), and llvm::LegalizeActions::UseLegacyRules.

◆ 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 653 of file LegalizerInfo.h.

References llvm::LegalizeActions::FewerElements.

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

◆ getAlias()

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

Definition at line 474 of file LegalizerInfo.h.

◆ isAliasedByAnother()

bool llvm::LegalizeRuleSet::isAliasedByAnother ( )
inline

Definition at line 466 of file LegalizerInfo.h.

◆ legalFor() [1/2]

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

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

Definition at line 484 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal.

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo(), and llvm::X86LegalizerInfo::legalizeIntrinsic().

◆ legalFor() [2/2]

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 489 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal.

◆ 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 509 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal.

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo(), and llvm::X86LegalizerInfo::legalizeIntrinsic().

◆ 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 514 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal.

◆ 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 520 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal.

◆ 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 500 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal, and llvm::LegalityPredicates::typePairAndMemDescInSet().

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

◆ legalForTypeWithAnyImm()

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 494 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal.

◆ legalIf()

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

The instruction is legal if predicate is true.

Definition at line 477 of file LegalizerInfo.h.

References llvm::LegalizeActions::Legal.

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

◆ libcallFor() [1/2]

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

Definition at line 606 of file LegalizerInfo.h.

References llvm::LegalizeActions::Libcall.

◆ libcallFor() [2/2]

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

Definition at line 610 of file LegalizerInfo.h.

References llvm::LegalizeActions::Libcall.

◆ libcallForCartesianProduct() [1/2]

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

Definition at line 614 of file LegalizerInfo.h.

References llvm::LegalizeActions::Libcall.

◆ libcallForCartesianProduct() [2/2]

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

Definition at line 618 of file LegalizerInfo.h.

References llvm::LegalizeActions::Libcall.

◆ libcallIf()

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

Like legalIf, but for the Libcall action.

Definition at line 600 of file LegalizerInfo.h.

References llvm::LegalizeActions::Libcall.

◆ lower()

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

The instruction is lowered.

Definition at line 534 of file LegalizerInfo.h.

References llvm::Lower.

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo(), and llvm::X86LegalizerInfo::legalizeIntrinsic().

◆ 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 560 of file LegalizerInfo.h.

References llvm::LegalizeMutations::changeTo(), and llvm::Lower.

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

◆ 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 566 of file LegalizerInfo.h.

References llvm::Lower.

◆ 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 572 of file LegalizerInfo.h.

References llvm::LegalizeMutations::changeTo(), and llvm::Lower.

◆ 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 578 of file LegalizerInfo.h.

References llvm::Lower.

◆ 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 584 of file LegalizerInfo.h.

References llvm::Lower.

◆ 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 when type indexes 0, 1, and 2 are all in their respective lists.

Definition at line 591 of file LegalizerInfo.h.

References llvm::Lower.

◆ 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 543 of file LegalizerInfo.h.

References llvm::Lower.

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

◆ lowerIf() [2/2]

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

The instruction is lowered if predicate is true.

Definition at line 551 of file LegalizerInfo.h.

References llvm::Lower.

◆ lowerIfMemSizeNotPow2()

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

◆ maxScalar()

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

◆ 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 789 of file LegalizerInfo.h.

References llvm::LegalizeMutations::changeElementTo(), llvm::LLT::getSizeInBits(), llvm::LegalizeActions::NarrowScalar, and llvm::LegalityPredicates::widerThan().

◆ maxScalarOrElt()

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

◆ minScalar()

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 830 of file LegalizerInfo.h.

References llvm::LegalityQuery::Types.

◆ minScalarOrElt()

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

◆ minScalarOrEltIf()

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

◆ minScalarSameAs()

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

Widen the scalar to match the size of another.

Definition at line 815 of file LegalizerInfo.h.

References llvm::LLT::getElementType(), llvm::LLT::isVector(), T, and llvm::LegalityQuery::Types.

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

◆ 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 644 of file LegalizerInfo.h.

References llvm::LegalizeActions::MoreElements.

Referenced by 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 848 of file LegalizerInfo.h.

References llvm::LegalizeActions::MoreElements, llvm::LegalizeMutations::moreElementsToNextPow2(), and llvm::LegalityPredicates::numElementsNotPow2().

◆ narrowScalar()

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

◆ 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 634 of file LegalizerInfo.h.

References llvm::LegalizeActions::NarrowScalar.

◆ scalarize()

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

◆ setIsAliasedByAnother()

void llvm::LegalizeRuleSet::setIsAliasedByAnother ( )
inline

Definition at line 467 of file LegalizerInfo.h.

◆ unsupported()

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

The instruction is unsupported.

Definition at line 662 of file LegalizerInfo.h.

References llvm::LegalizeActions::Unsupported.

◆ unsupportedIf()

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

◆ 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 227 of file LegalizerInfo.cpp.

References llvm::dbgs(), and LLVM_DEBUG.

◆ 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 204 of file LegalizerInfo.cpp.

References llvm::dbgs(), and LLVM_DEBUG.

◆ 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 625 of file LegalizerInfo.h.

References llvm::LegalizeActions::WidenScalar.

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

◆ 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 719 of file LegalizerInfo.h.

References llvm::LegalityPredicates::scalarOrEltSizeNotPow2(), llvm::LegalizeActions::WidenScalar, and llvm::LegalizeMutations::widenScalarOrEltToNextPow2().

◆ 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 not a scalar or is a power of two.

Definition at line 709 of file LegalizerInfo.h.

References llvm::LegalityPredicates::sizeNotPow2(), llvm::LegalizeActions::WidenScalar, and llvm::LegalizeMutations::widenScalarOrEltToNextPow2().

Referenced by llvm::AMDGPULegalizerInfo::AMDGPULegalizerInfo(), and llvm::X86LegalizerInfo::legalizeIntrinsic().


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