[PATCH] D140305: [GlobalISel][Legalizer] add minScalarIf action

Ties Stuij via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 22 08:21:02 PST 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
stuij marked an inline comment as done.
Closed by commit rG9faff9a09178: [GlobalISel][Legalizer] add minScalarIf action (authored by stuij).

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.484847.patch
Type: text/x-patch
Size: 2239 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20221222/d0c88bfc/attachment.bin>


More information about the llvm-commits mailing list