[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