From: Kerry McLaughlin Date: Mon, 26 Jul 2021 09:55:15 +0000 (+0100) Subject: [SVE] Fix casts to in truncateToMinimalBitwidths X-Git-Tag: llvmorg-14-init~286 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=e484e1ae03325823c469684d7d1532f2aadbe98d;p=platform%2Fupstream%2Fllvm.git [SVE] Fix casts to in truncateToMinimalBitwidths Fixes more casts to `` for the cases where the instruction is a Insert/ExtractElementInst. For fixed-width, this part of truncateToMinimalBitWidths is tested by AArch64/type-shrinkage-insertelt.ll. I attempted to write a test case for this part of truncateToMinimalBitWidths which uses scalable vectors, but was unable to add one. The tests in type-shrinkage-insertelt.ll rely on scalarization to create extract element instructions for instance, which is not possible for scalable vectors. Reviewed By: david-arm Differential Revision: https://reviews.llvm.org/D106163 --- diff --git a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp index 197228c..a841be1 100644 --- a/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp +++ b/llvm/lib/Transforms/Vectorize/LoopVectorize.cpp @@ -4049,19 +4049,17 @@ void InnerLoopVectorizer::truncateToMinimalBitwidths(VPTransformState &State) { // Don't do anything with the operands, just extend the result. continue; } else if (auto *IE = dyn_cast(I)) { - auto Elements = cast(IE->getOperand(0)->getType()) - ->getNumElements(); + auto Elements = + cast(IE->getOperand(0)->getType())->getElementCount(); auto *O0 = B.CreateZExtOrTrunc( - IE->getOperand(0), - FixedVectorType::get(ScalarTruncatedTy, Elements)); + IE->getOperand(0), VectorType::get(ScalarTruncatedTy, Elements)); auto *O1 = B.CreateZExtOrTrunc(IE->getOperand(1), ScalarTruncatedTy); NewI = B.CreateInsertElement(O0, O1, IE->getOperand(2)); } else if (auto *EE = dyn_cast(I)) { - auto Elements = cast(EE->getOperand(0)->getType()) - ->getNumElements(); + auto Elements = + cast(EE->getOperand(0)->getType())->getElementCount(); auto *O0 = B.CreateZExtOrTrunc( - EE->getOperand(0), - FixedVectorType::get(ScalarTruncatedTy, Elements)); + EE->getOperand(0), VectorType::get(ScalarTruncatedTy, Elements)); NewI = B.CreateExtractElement(O0, EE->getOperand(2)); } else { // If we don't know what to do, be conservative and don't do anything.