[llvm] 7958682 - [AArch64] Minor changes and sanity checks in relation to https://reviews.llvm.org/D135229

Nilanjana Basu via llvm-commits llvm-commits at lists.llvm.org
Thu Dec 15 12:09:50 PST 2022


Author: Nilanjana Basu
Date: 2022-12-16T01:39:29+05:30
New Revision: 795868285db9e8916418cc83f74416b0775d20dc

URL: https://github.com/llvm/llvm-project/commit/795868285db9e8916418cc83f74416b0775d20dc
DIFF: https://github.com/llvm/llvm-project/commit/795868285db9e8916418cc83f74416b0775d20dc.diff

LOG: [AArch64] Minor changes and sanity checks in relation to https://reviews.llvm.org/D135229

Added: 
    

Modified: 
    llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 04c9ff82fa4b..f6501a4439d1 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -13929,8 +13929,12 @@ static void createTblForTrunc(TruncInst *TI, bool IsLittleEndian) {
          "Unsupported destination vector element type");
   unsigned SrcElemTySz =
       cast<IntegerType>(SrcTy->getElementType())->getBitWidth();
-  unsigned TruncFactor =
-      SrcElemTySz / cast<IntegerType>(DstTy->getElementType())->getBitWidth();
+  unsigned DstElemTySz =
+      cast<IntegerType>(DstTy->getElementType())->getBitWidth();
+  assert((SrcElemTySz % DstElemTySz == 0) &&
+         "Cannot lower truncate to tbl instructions for a source element size "
+         "that is not divisible by the destination element size");
+  unsigned TruncFactor = SrcElemTySz / DstElemTySz;
   assert((SrcElemTySz == 16 || SrcElemTySz == 32 || SrcElemTySz == 64) &&
          "Unsupported source vector element type size");
   Type *VecTy = FixedVectorType::get(Builder.getInt8Ty(), 16);
@@ -13942,12 +13946,11 @@ static void createTblForTrunc(TruncInst *TI, bool IsLittleEndian) {
   SmallVector<Constant *, 16> MaskConst;
   for (int Itr = 0; Itr < 16; Itr++) {
     if (Itr < NumElements)
-      MaskConst.push_back(ConstantInt::get(
-          Builder.getInt8Ty(), IsLittleEndian
-                                   ? Itr * TruncFactor
-                                   : Itr * TruncFactor + (TruncFactor - 1)));
+      MaskConst.push_back(Builder.getInt8(
+          IsLittleEndian ? Itr * TruncFactor
+                         : Itr * TruncFactor + (TruncFactor - 1)));
     else
-      MaskConst.push_back(ConstantInt::get(Builder.getInt8Ty(), 255));
+      MaskConst.push_back(Builder.getInt8(255));
   }
 
   int MaxTblSz = 128 * 4;
@@ -13970,7 +13973,7 @@ static void createTblForTrunc(TruncInst *TI, bool IsLittleEndian) {
     Parts.push_back(Builder.CreateBitCast(
         Builder.CreateShuffleVector(TI->getOperand(0), ShuffleLanes), VecTy));
 
-    if (Parts.size() >= 4) {
+    if (Parts.size() == 4) {
       auto *F = Intrinsic::getDeclaration(TI->getModule(),
                                           Intrinsic::aarch64_neon_tbl4, VecTy);
       Parts.push_back(ConstantVector::get(MaskConst));


        


More information about the llvm-commits mailing list