[GlobalIsel][X86] Move G_SDIV/G_SREM/G_UDIV/G_UREM legalization before legacy handlin...
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 2 Jun 2023 14:46:24 +0000 (15:46 +0100)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 2 Jun 2023 15:07:48 +0000 (16:07 +0100)
llvm/lib/Target/X86/X86LegalizerInfo.cpp

index 4262fbe..92e2d56 100644 (file)
@@ -117,6 +117,14 @@ X86LegalizerInfo::X86LegalizerInfo(const X86Subtarget &STI,
       .clampScalar(0, s8, sMaxScalar)
       .scalarize(0);
 
+  // integer divisions
+  getActionDefinitionsBuilder({G_SDIV, G_SREM, G_UDIV, G_UREM})
+      .legalIf([=](const LegalityQuery &Query) -> bool {
+        return typeInSet(0, {s8, s16, s32})(Query) ||
+               (Is64Bit && typeInSet(0, {s64})(Query));
+      })
+      .clampScalar(0, s8, sMaxScalar);
+
   // bswap
   getActionDefinitionsBuilder(G_BSWAP)
       .legalIf([=](const LegalityQuery &Query) {
@@ -237,12 +245,7 @@ void X86LegalizerInfo::setLegalizerInfo32bit() {
         .widenScalarToNextPow2(0, /*Min*/ 8);
     getActionDefinitionsBuilder(G_INTTOPTR).legalFor({{p0, s32}});
 
-    // Shifts and SDIV
-    getActionDefinitionsBuilder(
-        {G_SDIV, G_SREM, G_UDIV, G_UREM})
-      .legalFor({s8, s16, s32})
-      .clampScalar(0, s8, s32);
-
+    // Shifts
     getActionDefinitionsBuilder(
         {G_SHL, G_LSHR, G_ASHR})
       .legalFor({{s8, s8}, {s16, s8}, {s32, s8}})
@@ -354,12 +357,6 @@ void X86LegalizerInfo::setLegalizerInfo64bit() {
       .clampScalar(1, s32, s64)
       .widenScalarToNextPow2(1);
 
-  // Divisions
-  getActionDefinitionsBuilder(
-      {G_SDIV, G_SREM, G_UDIV, G_UREM})
-      .legalFor({s8, s16, s32, s64})
-      .clampScalar(0, s8, s64);
-
   // Shifts
   getActionDefinitionsBuilder(
     {G_SHL, G_LSHR, G_ASHR})