[PATCH] D140305: [GlobalISel][Legalizer] add minScalarIf action
Ties Stuij via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Dec 19 07:24:38 PST 2022
stuij updated this revision to Diff 483961.
stuij added a comment.
addressed review comment
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D140305/new/
https://reviews.llvm.org/D140305
Files:
llvm/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
llvm/unittests/CodeGen/GlobalISel/LegalizerInfoTest.cpp
Index: llvm/unittests/CodeGen/GlobalISel/LegalizerInfoTest.cpp
===================================================================
--- llvm/unittests/CodeGen/GlobalISel/LegalizerInfoTest.cpp
+++ llvm/unittests/CodeGen/GlobalISel/LegalizerInfoTest.cpp
@@ -321,6 +321,27 @@
EXPECT_ACTION(Unsupported, 0, LLT(), LegalityQuery(G_OR, {v2s16}));
}
+ // Test minScalarIf
+ {
+ bool IfCond = true;
+ LegalizerInfo LI;
+ auto &LegacyInfo = LI.getLegacyLegalizerInfo();
+ LI.getActionDefinitionsBuilder(G_OR)
+ .legalFor({s32})
+ .minScalarIf([&](const LegalityQuery &Query) {
+ return IfCond;
+ }, 0, s32);
+ LegacyInfo.computeTables();
+
+ // Only handle scalars, ignore vectors.
+ EXPECT_ACTION(WidenScalar, 0, s32, LegalityQuery(G_OR, {s16}));
+ EXPECT_ACTION(Unsupported, 0, LLT(), LegalityQuery(G_OR, {v2s16}));
+
+ IfCond = false;
+ EXPECT_ACTION(Unsupported, 0, LLT(), LegalityQuery(G_OR, {s16}));
+ EXPECT_ACTION(Unsupported, 0, LLT(), LegalityQuery(G_OR, {v2s16}));
+ }
+
// Test maxScalar
{
LegalizerInfo LI;
Index: llvm/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
===================================================================
--- llvm/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
+++ llvm/include/llvm/CodeGen/GlobalISel/LegalizerInfo.h
@@ -950,6 +950,22 @@
changeTo(typeIdx(TypeIdx), Ty));
}
+ /// Ensure the scalar is at least as wide as Ty if condition is met.
+ LegalizeRuleSet &minScalarIf(LegalityPredicate Predicate, unsigned TypeIdx,
+ const LLT Ty) {
+ using namespace LegalityPredicates;
+ using namespace LegalizeMutations;
+ return actionIf(
+ LegalizeAction::WidenScalar,
+ [=](const LegalityQuery &Query) {
+ const LLT QueryTy = Query.Types[TypeIdx];
+ return QueryTy.isScalar() &&
+ QueryTy.getSizeInBits() < Ty.getSizeInBits() &&
+ Predicate(Query);
+ },
+ changeTo(typeIdx(TypeIdx), Ty));
+ }
+
/// Ensure the scalar is at most as wide as Ty.
LegalizeRuleSet &maxScalarOrElt(unsigned TypeIdx, const LLT Ty) {
using namespace LegalityPredicates;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D140305.483961.patch
Type: text/x-patch
Size: 2239 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221219/978a84f5/attachment.bin>
More information about the llvm-commits
mailing list