LLVM
8.0.1
|
#include "llvm/CodeGen/GlobalISel/LegalizerInfo.h"
Public Member Functions | |
LegalizeRuleSet () | |
bool | isAliasedByAnother () |
void | setIsAliasedByAnother () |
void | aliasTo (unsigned Opcode) |
unsigned | getAlias () const |
LegalizeRuleSet & | legalIf (LegalityPredicate Predicate) |
The instruction is legal if predicate is true. More... | |
LegalizeRuleSet & | legalFor (std::initializer_list< LLT > Types) |
The instruction is legal when type index 0 is any type in the given list. More... | |
LegalizeRuleSet & | legalFor (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... | |
LegalizeRuleSet & | legalForTypesWithMemSize (std::initializer_list< LegalityPredicates::TypePairAndMemSize > TypesAndMemSize) |
The instruction is legal when type indexes 0 and 1 along with the memory size is any type and size tuple in the given list. More... | |
LegalizeRuleSet & | legalForCartesianProduct (std::initializer_list< LLT > Types) |
The instruction is legal when type indexes 0 and 1 are both in the given list. More... | |
LegalizeRuleSet & | legalForCartesianProduct (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... | |
LegalizeRuleSet & | lower () |
The instruction is lowered. More... | |
LegalizeRuleSet & | lowerIf (LegalityPredicate Predicate) |
The instruction is lowered if predicate is true. More... | |
LegalizeRuleSet & | lowerIf (LegalityPredicate Predicate, LegalizeMutation Mutation) |
The instruction is lowered if predicate is true. More... | |
LegalizeRuleSet & | lowerFor (std::initializer_list< LLT > Types) |
The instruction is lowered when type index 0 is any type in the given list. More... | |
LegalizeRuleSet & | lowerFor (std::initializer_list< LLT > Types, LegalizeMutation Mutation) |
The instruction is lowered when type index 0 is any type in the given list. More... | |
LegalizeRuleSet & | lowerFor (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... | |
LegalizeRuleSet & | lowerFor (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... | |
LegalizeRuleSet & | lowerForCartesianProduct (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... | |
LegalizeRuleSet & | lowerForCartesianProduct (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... | |
LegalizeRuleSet & | libcallIf (LegalityPredicate Predicate) |
Like legalIf, but for the Libcall action. More... | |
LegalizeRuleSet & | libcallFor (std::initializer_list< LLT > Types) |
LegalizeRuleSet & | libcallFor (std::initializer_list< std::pair< LLT, LLT >> Types) |
LegalizeRuleSet & | libcallForCartesianProduct (std::initializer_list< LLT > Types) |
LegalizeRuleSet & | libcallForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1) |
LegalizeRuleSet & | widenScalarIf (LegalityPredicate Predicate, LegalizeMutation Mutation) |
Widen the scalar to the one selected by the mutation if the predicate is true. More... | |
LegalizeRuleSet & | narrowScalarIf (LegalityPredicate Predicate, LegalizeMutation Mutation) |
Narrow the scalar to the one selected by the mutation if the predicate is true. More... | |
LegalizeRuleSet & | moreElementsIf (LegalityPredicate Predicate, LegalizeMutation Mutation) |
Add more elements to reach the type selected by the mutation if the predicate is true. More... | |
LegalizeRuleSet & | fewerElementsIf (LegalityPredicate Predicate, LegalizeMutation Mutation) |
Remove elements to reach the type selected by the mutation if the predicate is true. More... | |
LegalizeRuleSet & | unsupported () |
The instruction is unsupported. More... | |
LegalizeRuleSet & | unsupportedIf (LegalityPredicate Predicate) |
LegalizeRuleSet & | unsupportedIfMemSizeNotPow2 () |
LegalizeRuleSet & | customIf (LegalityPredicate Predicate) |
LegalizeRuleSet & | customFor (std::initializer_list< LLT > Types) |
LegalizeRuleSet & | customForCartesianProduct (std::initializer_list< LLT > Types) |
LegalizeRuleSet & | customForCartesianProduct (std::initializer_list< LLT > Types0, std::initializer_list< LLT > Types1) |
LegalizeRuleSet & | widenScalarToNextPow2 (unsigned TypeIdx, unsigned MinSize=0) |
Widen the scalar to the next power of two that is at least MinSize. More... | |
LegalizeRuleSet & | narrowScalar (unsigned TypeIdx, LegalizeMutation Mutation) |
LegalizeRuleSet & | minScalar (unsigned TypeIdx, const LLT &Ty) |
Ensure the scalar is at least as wide as Ty. More... | |
LegalizeRuleSet & | maxScalar (unsigned TypeIdx, const LLT &Ty) |
Ensure the scalar is at most as wide as Ty. More... | |
LegalizeRuleSet & | maxScalarIf (LegalityPredicate Predicate, unsigned TypeIdx, const LLT &Ty) |
Conditionally limit the maximum size of the scalar. More... | |
LegalizeRuleSet & | clampScalar (unsigned TypeIdx, const LLT &MinTy, const LLT &MaxTy) |
Limit the range of scalar sizes to MinTy and MaxTy. More... | |
LegalizeRuleSet & | minScalarSameAs (unsigned TypeIdx, unsigned LargeTypeIdx) |
Widen the scalar to match the size of another. More... | |
LegalizeRuleSet & | moreElementsToNextPow2 (unsigned TypeIdx) |
Add more elements to the vector to reach the next power of two. More... | |
LegalizeRuleSet & | clampMinNumElements (unsigned TypeIdx, const LLT &EltTy, unsigned MinElements) |
Limit the number of elements in EltTy vectors to at least MinElements. More... | |
LegalizeRuleSet & | clampMaxNumElements (unsigned TypeIdx, const LLT &EltTy, unsigned MaxElements) |
Limit the number of elements in EltTy vectors to at most MaxElements. More... | |
LegalizeRuleSet & | clampNumElements (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... | |
LegalizeRuleSet & | fallback () |
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... | |
LegalizeActionStep | apply (const LegalityQuery &Query) const |
Apply the ruleset to the given LegalityQuery. More... | |
Definition at line 269 of file LegalizerInfo.h.
|
inline |
Definition at line 393 of file LegalizerInfo.h.
|
inline |
Definition at line 397 of file LegalizerInfo.h.
References assert(), and llvm::SmallVectorBase::empty().
Referenced by llvm::LegalizerInfo::aliasActionDefinitions().
LegalizeActionStep LegalizeRuleSet::apply | ( | const LegalityQuery & | Query | ) | const |
Apply the ruleset to the given LegalityQuery.
Definition at line 62 of file LegalizerInfo.cpp.
References assert(), llvm::dbgs(), llvm::LegalizeActions::FewerElements, LLVM_DEBUG, llvm::LegalizeActions::Lower, llvm::LegalizeActions::MoreElements, Mutation, llvm::LegalityQuery::print(), llvm::LegalityQuery::Types, llvm::LegalizeActions::Unsupported, and llvm::LegalizeActions::UseLegacyRules.
Referenced by llvm::LegalizerInfo::getAction().
|
inline |
Limit the number of elements in EltTy vectors to at most MaxElements.
Definition at line 698 of file LegalizerInfo.h.
References llvm::LegalizeActions::FewerElements, llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::isVector(), Query(), llvm::LegalityQuery::Types, and llvm::LLT::vector().
|
inline |
Limit the number of elements in EltTy vectors to at least MinElements.
Definition at line 680 of file LegalizerInfo.h.
References llvm::LLT::getElementType(), llvm::LLT::getNumElements(), llvm::LLT::getScalarSizeInBits(), llvm::LLT::isVector(), llvm::LegalizeActions::MoreElements, Query(), llvm::LegalityQuery::Types, and llvm::LLT::vector().
|
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 723 of file LegalizerInfo.h.
References assert(), llvm::LLT::getElementType(), and llvm::LLT::getNumElements().
|
inline |
Limit the range of scalar sizes to MinTy and MaxTy.
Definition at line 649 of file LegalizerInfo.h.
References assert(), and llvm::LLT::isScalar().
Referenced by llvm::X86LegalizerInfo::X86LegalizerInfo().
|
inline |
Definition at line 588 of file LegalizerInfo.h.
References llvm::LegalizeActions::Custom.
|
inline |
Definition at line 591 of file LegalizerInfo.h.
References llvm::LegalizeActions::Custom.
|
inline |
Definition at line 595 of file LegalizerInfo.h.
References llvm::LegalizeActions::Custom.
|
inline |
Definition at line 582 of file LegalizerInfo.h.
References llvm::LegalizeActions::Custom.
|
inline |
Fallback on the previous implementation.
This should only be used while porting a rule.
Definition at line 735 of file LegalizerInfo.h.
References llvm::ARM_AM::add, llvm::cl::apply(), Query(), and llvm::LegalizeActions::UseLegacyRules.
|
inline |
Remove elements to reach the type selected by the mutation if the predicate is true.
Definition at line 562 of file LegalizerInfo.h.
References llvm::LegalizeActions::FewerElements.
|
inline |
Definition at line 403 of file LegalizerInfo.h.
|
inline |
Definition at line 395 of file LegalizerInfo.h.
|
inline |
The instruction is legal when type index 0 is any type in the given list.
Definition at line 413 of file LegalizerInfo.h.
References llvm::LegalizeActions::Legal.
Referenced by llvm::MipsLegalizerInfo::MipsLegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().
|
inline |
The instruction is legal when type indexes 0 and 1 is any type pair in the given list.
Definition at line 418 of file LegalizerInfo.h.
References llvm::LegalizeActions::Legal.
|
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 432 of file LegalizerInfo.h.
References llvm::LegalizeActions::Legal.
Referenced by llvm::MipsLegalizerInfo::MipsLegalizerInfo(), and llvm::X86LegalizerInfo::X86LegalizerInfo().
|
inline |
The instruction is legal when type indexes 0 and 1 are both their respective lists.
Definition at line 437 of file LegalizerInfo.h.
References llvm::LegalizeActions::Legal.
|
inline |
The instruction is legal when type indexes 0 and 1 along with the memory size is any type and size tuple in the given list.
Definition at line 423 of file LegalizerInfo.h.
References llvm::LegalizeActions::Legal, and llvm::LegalityPredicates::typePairAndMemSizeInSet().
|
inline |
The instruction is legal if predicate is true.
Definition at line 406 of file LegalizerInfo.h.
References llvm::LegalizeActions::Legal.
|
inline |
Definition at line 515 of file LegalizerInfo.h.
References llvm::LegalizeActions::Libcall.
Referenced by llvm::MipsLegalizerInfo::MipsLegalizerInfo().
|
inline |
Definition at line 519 of file LegalizerInfo.h.
References llvm::LegalizeActions::Libcall.
|
inline |
Definition at line 523 of file LegalizerInfo.h.
References llvm::LegalizeActions::Libcall.
|
inline |
Definition at line 527 of file LegalizerInfo.h.
References llvm::LegalizeActions::Libcall.
|
inline |
Like legalIf, but for the Libcall action.
Definition at line 509 of file LegalizerInfo.h.
References llvm::LegalizeActions::Libcall.
|
inline |
|
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 469 of file LegalizerInfo.h.
References llvm::LegalizeMutations::changeTo(), and llvm::Lower.
Referenced by llvm::MipsLegalizerInfo::MipsLegalizerInfo().
|
inline |
The instruction is lowered when type index 0 is any type in the given list.
Definition at line 475 of file LegalizerInfo.h.
References llvm::Lower.
|
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 481 of file LegalizerInfo.h.
References llvm::LegalizeMutations::changeTo(), and llvm::Lower.
|
inline |
The instruction is lowered when type indexes 0 and 1 is any type pair in the given list.
Definition at line 487 of file LegalizerInfo.h.
References llvm::Lower.
|
inline |
The instruction is lowered when type indexes 0 and 1 are both in their respective lists.
Definition at line 493 of file LegalizerInfo.h.
References llvm::Lower.
|
inline |
The instruction is lowered when when type indexes 0, 1, and 2 are all in their respective lists.
Definition at line 500 of file LegalizerInfo.h.
References llvm::Lower.
|
inline |
The instruction is lowered if predicate is true.
Keep type index 0 as the same type.
Definition at line 452 of file LegalizerInfo.h.
References llvm::Lower.
|
inline |
The instruction is lowered if predicate is true.
Definition at line 460 of file LegalizerInfo.h.
References llvm::Lower.
|
inline |
Ensure the scalar is at most as wide as Ty.
Definition at line 625 of file LegalizerInfo.h.
References llvm::LegalizeMutations::changeTo(), llvm::LLT::getSizeInBits(), llvm::LegalizeActions::NarrowScalar, and llvm::LegalityPredicates::widerThan().
|
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 636 of file LegalizerInfo.h.
References llvm::LegalizeMutations::changeTo(), llvm::LLT::getSizeInBits(), llvm::LegalizeActions::NarrowScalar, Query(), and llvm::LegalityPredicates::widerThan().
|
inline |
Ensure the scalar is at least as wide as Ty.
Definition at line 616 of file LegalizerInfo.h.
References llvm::LegalizeMutations::changeTo(), llvm::LLT::getSizeInBits(), llvm::LegalityPredicates::narrowerThan(), and llvm::LegalizeActions::WidenScalar.
Referenced by llvm::MipsLegalizerInfo::MipsLegalizerInfo().
|
inline |
Widen the scalar to match the size of another.
Definition at line 656 of file LegalizerInfo.h.
References Query(), and llvm::LegalityQuery::Types.
|
inline |
Add more elements to reach the type selected by the mutation if the predicate is true.
Definition at line 553 of file LegalizerInfo.h.
References llvm::LegalizeActions::MoreElements.
|
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 672 of file LegalizerInfo.h.
References llvm::LegalizeActions::MoreElements, llvm::LegalizeMutations::moreElementsToNextPow2(), and llvm::LegalityPredicates::numElementsNotPow2().
|
inline |
Definition at line 609 of file LegalizerInfo.h.
References llvm::LegalityPredicates::isScalar(), and llvm::LegalizeActions::NarrowScalar.
|
inline |
Narrow the scalar to the one selected by the mutation if the predicate is true.
Definition at line 543 of file LegalizerInfo.h.
References llvm::LegalizeActions::NarrowScalar.
|
inline |
Definition at line 396 of file LegalizerInfo.h.
|
inline |
The instruction is unsupported.
Definition at line 571 of file LegalizerInfo.h.
References llvm::LegalizeActions::Unsupported.
|
inline |
Definition at line 574 of file LegalizerInfo.h.
References llvm::LegalizeActions::Unsupported.
|
inline |
Definition at line 577 of file LegalizerInfo.h.
References llvm::LegalityPredicates::memSizeInBytesNotPow2(), and llvm::LegalizeActions::Unsupported.
Check if there is no type index which is obviously not handled by the LegalizeRuleSet in any way at all.
NumTypeIdxs
) set. Definition at line 88 of file LegalizerInfo.cpp.
References llvm::dbgs(), and LLVM_DEBUG.
Referenced by llvm::LegalizerInfo::verify().
|
inline |
Widen the scalar to the one selected by the mutation if the predicate is true.
Definition at line 534 of file LegalizerInfo.h.
References llvm::LegalizeActions::WidenScalar.
|
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 602 of file LegalizerInfo.h.
References llvm::LegalityPredicates::sizeNotPow2(), llvm::LegalizeActions::WidenScalar, and llvm::LegalizeMutations::widenScalarToNextPow2().
Referenced by llvm::X86LegalizerInfo::X86LegalizerInfo().