diff options
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/LegalityPredicates.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/LegalityPredicates.cpp | 38 |
1 files changed, 34 insertions, 4 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/LegalityPredicates.cpp b/llvm/lib/CodeGen/GlobalISel/LegalityPredicates.cpp index 601d50e9806f..a83742f2138f 100644 --- a/llvm/lib/CodeGen/GlobalISel/LegalityPredicates.cpp +++ b/llvm/lib/CodeGen/GlobalISel/LegalityPredicates.cpp @@ -80,22 +80,46 @@ LegalityPredicate LegalityPredicates::isPointer(unsigned TypeIdx, }; } -LegalityPredicate LegalityPredicates::narrowerThan(unsigned TypeIdx, - unsigned Size) { +LegalityPredicate LegalityPredicates::elementTypeIs(unsigned TypeIdx, + LLT EltTy) { + return [=](const LegalityQuery &Query) { + const LLT QueryTy = Query.Types[TypeIdx]; + return QueryTy.isVector() && QueryTy.getElementType() == EltTy; + }; +} + +LegalityPredicate LegalityPredicates::scalarNarrowerThan(unsigned TypeIdx, + unsigned Size) { return [=](const LegalityQuery &Query) { const LLT QueryTy = Query.Types[TypeIdx]; return QueryTy.isScalar() && QueryTy.getSizeInBits() < Size; }; } -LegalityPredicate LegalityPredicates::widerThan(unsigned TypeIdx, - unsigned Size) { +LegalityPredicate LegalityPredicates::scalarWiderThan(unsigned TypeIdx, + unsigned Size) { return [=](const LegalityQuery &Query) { const LLT QueryTy = Query.Types[TypeIdx]; return QueryTy.isScalar() && QueryTy.getSizeInBits() > Size; }; } +LegalityPredicate LegalityPredicates::smallerThan(unsigned TypeIdx0, + unsigned TypeIdx1) { + return [=](const LegalityQuery &Query) { + return Query.Types[TypeIdx0].getSizeInBits() < + Query.Types[TypeIdx1].getSizeInBits(); + }; +} + +LegalityPredicate LegalityPredicates::largerThan(unsigned TypeIdx0, + unsigned TypeIdx1) { + return [=](const LegalityQuery &Query) { + return Query.Types[TypeIdx0].getSizeInBits() > + Query.Types[TypeIdx1].getSizeInBits(); + }; +} + LegalityPredicate LegalityPredicates::scalarOrEltNarrowerThan(unsigned TypeIdx, unsigned Size) { return [=](const LegalityQuery &Query) { @@ -126,6 +150,12 @@ LegalityPredicate LegalityPredicates::sizeNotPow2(unsigned TypeIdx) { }; } +LegalityPredicate LegalityPredicates::sizeIs(unsigned TypeIdx, unsigned Size) { + return [=](const LegalityQuery &Query) { + return Query.Types[TypeIdx].getSizeInBits() == Size; + }; +} + LegalityPredicate LegalityPredicates::sameSize(unsigned TypeIdx0, unsigned TypeIdx1) { return [=](const LegalityQuery &Query) { |