[llvm] 56a6686 - [AArch64][GlobalISel] Don't form truncstores in postlegalizer-lowering for s128.

Amara Emerson via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 20 00:20:56 PDT 2021


Author: Amara Emerson
Date: 2021-07-20T00:04:34-07:00
New Revision: 56a6686e0c45798dfda2f1b91ff921536c7c5e33

URL: https://github.com/llvm/llvm-project/commit/56a6686e0c45798dfda2f1b91ff921536c7c5e33
DIFF: https://github.com/llvm/llvm-project/commit/56a6686e0c45798dfda2f1b91ff921536c7c5e33.diff

LOG: [AArch64][GlobalISel] Don't form truncstores in postlegalizer-lowering for s128.

We don't support truncating s128 stores, so don't form them.

Added: 
    

Modified: 
    llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
    llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-lowering-truncstore.mir

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp b/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
index 45f2d81e7910a..84ecb4ba6964b 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64PostLegalizerLowering.cpp
@@ -959,7 +959,10 @@ static bool matchFormTruncstore(MachineInstr &MI, MachineRegisterInfo &MRI,
   if (MRI.getType(DstReg).isVector())
     return false;
   // Match a store of a truncate.
-  return mi_match(DstReg, MRI, m_GTrunc(m_Reg(SrcReg)));
+  if (!mi_match(DstReg, MRI, m_GTrunc(m_Reg(SrcReg))))
+    return false;
+  // Only form truncstores for value types of max 64b.
+  return MRI.getType(SrcReg).getSizeInBits() <= 64;
 }
 
 static bool applyFormTruncstore(MachineInstr &MI, MachineRegisterInfo &MRI,

diff  --git a/llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-lowering-truncstore.mir b/llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-lowering-truncstore.mir
index d302e7f68c581..e96fae4dde5b0 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-lowering-truncstore.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/postlegalizer-lowering-truncstore.mir
@@ -32,3 +32,19 @@ body: |
     %trunc:_(<4 x s8>) = G_TRUNC %val
     G_STORE %trunc(<4 x s8>), %ptr(p0) :: (store (<4 x s8>))
 ...
+---
+name:            truncstore_too_large
+legalized:       true
+body: |
+  bb.0.entry:
+    liveins: $x0
+    ; CHECK-LABEL: name: truncstore_too_large
+    ; CHECK: %ptr:_(p0) = COPY $x0
+    ; CHECK: %val:_(s128) = COPY $q0
+    ; CHECK: %trunc:_(s32) = G_TRUNC %val(s128)
+    ; CHECK: G_STORE %trunc(s32), %ptr(p0) :: (store (s32))
+    %ptr:_(p0) = COPY $x0
+    %val:_(s128) = COPY $q0
+    %trunc:_(s32) = G_TRUNC %val
+    G_STORE %trunc(s32), %ptr(p0) :: (store (s32))
+...


        


More information about the llvm-commits mailing list