[PATCH] D129136: [VectorCombine] Avoid creating shuffle for extract-extract pattern on scalable vector.

Sander de Smalen via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jul 7 01:37:55 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG519d7876cbee: [VectorCombine] Avoid creating shuffle for extract-extract pattern on scalable… (authored by sdesmalen).

Changed prior to commit:
  https://reviews.llvm.org/D129136?vs=442241&id=442818#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129136/new/

https://reviews.llvm.org/D129136

Files:
  llvm/lib/Transforms/Vectorize/VectorCombine.cpp
  llvm/test/Transforms/VectorCombine/AArch64/extract-scalable.ll


Index: llvm/test/Transforms/VectorCombine/AArch64/extract-scalable.ll
===================================================================
--- llvm/test/Transforms/VectorCombine/AArch64/extract-scalable.ll
+++ llvm/test/Transforms/VectorCombine/AArch64/extract-scalable.ll
@@ -20,3 +20,20 @@
   %r = xor i1 %cmp1, %cmp2
   ret i1 %r
 }
+
+; Test that VectorCombine doesn't try to create a shufflevector for
+; an extract-extract pattern on a scalable vector type.
+define i32 @extract_extract(<vscale x 4 x i32> %vec) {
+; CHECK-LABEL: @extract_extract(
+; CHECK-NEXT:    [[ELT0:%.*]] = extractelement <vscale x 4 x i32> [[VEC:%.*]], i32 0
+; CHECK-NEXT:    [[ELT1:%.*]] = extractelement <vscale x 4 x i32> [[VEC]], i32 1
+; CHECK-NEXT:    [[IDX:%.*]] = add i32 [[ELT0]], [[ELT1]]
+; CHECK-NEXT:    [[ELTIDX:%.*]] = extractelement <vscale x 4 x i32> [[VEC]], i32 [[IDX]]
+; CHECK-NEXT:    ret i32 [[ELTIDX]]
+;
+  %elt0 = extractelement <vscale x 4 x i32> %vec, i32 0
+  %elt1 = extractelement <vscale x 4 x i32> %vec, i32 1
+  %idx = add i32 %elt0, %elt1
+  %eltidx = extractelement <vscale x 4 x i32> %vec, i32 %idx
+  ret i32 %eltidx;
+}
Index: llvm/lib/Transforms/Vectorize/VectorCombine.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/VectorCombine.cpp
+++ llvm/lib/Transforms/Vectorize/VectorCombine.cpp
@@ -414,6 +414,10 @@
 static ExtractElementInst *translateExtract(ExtractElementInst *ExtElt,
                                             unsigned NewIndex,
                                             IRBuilder<> &Builder) {
+  // Shufflevectors can only be created for fixed-width vectors.
+  if (!isa<FixedVectorType>(ExtElt->getOperand(0)->getType()))
+    return nullptr;
+
   // If the extract can be constant-folded, this code is unsimplified. Defer
   // to other passes to handle that.
   Value *X = ExtElt->getVectorOperand();


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D129136.442818.patch
Type: text/x-patch
Size: 1905 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220707/a68e1a1c/attachment.bin>


More information about the llvm-commits mailing list