[PATCH] D106163: [SVE] Fix casts to <FixedVectorType> in truncateToMinimalBitwidths

Kerry McLaughlin via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Jul 16 09:28:13 PDT 2021


kmclaughlin created this revision.
kmclaughlin added reviewers: sdesmalen, david-arm, efriedma, DylanFleming-arm.
Herald added subscribers: psnobl, hiraditya, kristof.beyls, tschuett.
kmclaughlin requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Fixes more casts to `<FixedVectorType>` 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.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D106163

Files:
  llvm/lib/Transforms/Vectorize/LoopVectorize.cpp


Index: llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
+++ llvm/lib/Transforms/Vectorize/LoopVectorize.cpp
@@ -4049,19 +4049,19 @@
         // Don't do anything with the operands, just extend the result.
         continue;
       } else if (auto *IE = dyn_cast<InsertElementInst>(I)) {
-        auto Elements = cast<FixedVectorType>(IE->getOperand(0)->getType())
-                            ->getNumElements();
+        auto Elements = cast<VectorType>(IE->getOperand(0)->getType())
+                            ->getElementCount();
         auto *O0 = B.CreateZExtOrTrunc(
             IE->getOperand(0),
-            FixedVectorType::get(ScalarTruncatedTy, Elements));
+            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<ExtractElementInst>(I)) {
-        auto Elements = cast<FixedVectorType>(EE->getOperand(0)->getType())
-                            ->getNumElements();
+        auto Elements = cast<VectorType>(EE->getOperand(0)->getType())
+                            ->getElementCount();
         auto *O0 = B.CreateZExtOrTrunc(
             EE->getOperand(0),
-            FixedVectorType::get(ScalarTruncatedTy, Elements));
+            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.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D106163.359359.patch
Type: text/x-patch
Size: 1666 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20210716/ab221955/attachment.bin>


More information about the llvm-commits mailing list