[PATCH] D107413: [AArch64][GlobalISel] Widen G_FPTO*I before clamping

Jessica Paquette via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 3 17:21:15 PDT 2021


paquette created this revision.
paquette added reviewers: aemerson, jroelofs.
Herald added subscribers: danielkiss, hiraditya, kristof.beyls, rovka.
paquette requested review of this revision.
Herald added a project: LLVM.

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.


https://reviews.llvm.org/D107413

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


Index: llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir
===================================================================
--- llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir
+++ llvm/test/CodeGen/AArch64/GlobalISel/legalize-fptoi.mir
@@ -266,3 +266,48 @@
     %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
Index: llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
===================================================================
--- llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
+++ llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp
@@ -459,10 +459,10 @@
   // 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})


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D107413.363911.patch
Type: text/x-patch
Size: 2559 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210804/00fb4e11/attachment.bin>


More information about the llvm-commits mailing list