[llvm] 7d97de6 - [AArch64][GlobalISel] Widen G_FPTO*I before clamping

Jessica Paquette via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 4 10:19:39 PDT 2021


Author: Jessica Paquette
Date: 2021-08-04T10:19:26-07:00
New Revision: 7d97de60b3ecd52e2a427dff661cdd1ca99617e9

URL: https://github.com/llvm/llvm-project/commit/7d97de60b3ecd52e2a427dff661cdd1ca99617e9
DIFF: https://github.com/llvm/llvm-project/commit/7d97de60b3ecd52e2a427dff661cdd1ca99617e9.diff

LOG: [AArch64][GlobalISel] Widen G_FPTO*I before clamping

Going through our legalization rules and doing some cleanup.

Widening and then clamping is usually easier than clamping and then widening.

This allows us to legalize some weird types like s88.

Differential Revision: https://reviews.llvm.org/D107413

Added: 
    

Modified: 
    llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
    llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
index 2bd3889fe602..279fdcf210be 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
@@ -459,10 +459,10 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST)
   // Conversions
   getActionDefinitionsBuilder({G_FPTOSI, G_FPTOUI})
       .legalForCartesianProduct({s32, s64, v2s64, v4s32, v2s32})
-      .clampScalar(0, s32, s64)
       .widenScalarToNextPow2(0)
-      .clampScalar(1, s32, s64)
-      .widenScalarToNextPow2(1);
+      .clampScalar(0, s32, s64)
+      .widenScalarToNextPow2(1)
+      .clampScalar(1, s32, s64);
 
   getActionDefinitionsBuilder({G_SITOFP, G_UITOFP})
       .legalForCartesianProduct({s32, s64, v2s64, v4s32, v2s32})

diff  --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir
index b2ee3a6cc777..6b7b6176d016 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir
@@ -266,3 +266,48 @@ body: |
     %1:_(s128) = G_FPTOSI %0
     $q0 = COPY %1
 ...
+---
+name:            test_fptosi_s88_s88
+body: |
+  bb.0:
+    liveins: $x0
+    ; CHECK-LABEL: name: test_fptosi_s88_s88
+    ; CHECK: [[DEF:%[0-9]+]]:_(s88) = G_IMPLICIT_DEF
+    ; CHECK: [[FPTOSI:%[0-9]+]]:_(s128) = G_FPTOSI [[DEF]](s88)
+    ; CHECK: [[TRUNC:%[0-9]+]]:_(s88) = G_TRUNC [[FPTOSI]](s128)
+    ; CHECK: %trunc:_(s64) = G_TRUNC [[TRUNC]](s88)
+    ; CHECK: $x0 = COPY %trunc(s64)
+    %0:_(s88) = G_IMPLICIT_DEF
+    %1:_(s88) = G_FPTOSI %0
+    %trunc:_(s64) = G_TRUNC %1
+    $x0 = COPY %trunc
+...
+---
+name:            test_fptosi_s88_s64
+body: |
+  bb.0:
+    liveins: $x0
+    ; CHECK-LABEL: name: test_fptosi_s88_s64
+    ; CHECK: [[DEF:%[0-9]+]]:_(s64) = G_IMPLICIT_DEF
+    ; CHECK: [[FPTOSI:%[0-9]+]]:_(s128) = G_FPTOSI [[DEF]](s64)
+    ; CHECK: [[TRUNC:%[0-9]+]]:_(s88) = G_TRUNC [[FPTOSI]](s128)
+    ; CHECK: %trunc:_(s64) = G_TRUNC [[TRUNC]](s88)
+    ; CHECK: $x0 = COPY %trunc(s64)
+    %0:_(s64) = G_IMPLICIT_DEF
+    %1:_(s88) = G_FPTOSI %0
+    %trunc:_(s64) = G_TRUNC %1
+    $x0 = COPY %trunc
+...
+---
+name:            test_fptosi_s64_s88
+body: |
+  bb.0:
+    liveins: $x0
+    ; CHECK-LABEL: name: test_fptosi_s64_s88
+    ; CHECK: [[DEF:%[0-9]+]]:_(s88) = G_IMPLICIT_DEF
+    ; CHECK: [[FPEXT:%[0-9]+]]:_(s128) = G_FPEXT [[DEF]](s88)
+    ; CHECK: [[FPTOSI:%[0-9]+]]:_(s64) = G_FPTOSI [[FPEXT]](s128)
+    ; CHECK: $x0 = COPY [[FPTOSI]](s64)
+    %0:_(s88) = G_IMPLICIT_DEF
+    %1:_(s64) = G_FPTOSI %0
+    $x0 = COPY %1


        


More information about the llvm-commits mailing list