[PATCH] D119980: [SLPVectorizer][OpaquePtrs] Check GEP source element type

Arthur Eubanks via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 16 14:47:38 PST 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG826fae51d2a4: [SLPVectorizer][OpaquePtrs] Check GEP source element type (authored by aeubanks).

Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D119980

Files:
  llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
  llvm/test/Transforms/SLPVectorizer/X86/opaque-ptr-2.ll


Index: llvm/test/Transforms/SLPVectorizer/X86/opaque-ptr-2.ll
===================================================================
--- llvm/test/Transforms/SLPVectorizer/X86/opaque-ptr-2.ll
+++ llvm/test/Transforms/SLPVectorizer/X86/opaque-ptr-2.ll
@@ -6,12 +6,12 @@
 
 define void @test(ptr %arg, ptr %arg1, ptr %arg2) {
 ; CHECK-LABEL: @test(
-; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x ptr> poison, ptr [[ARG1:%.*]], i32 0
-; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x ptr> [[TMP1]], ptr [[ARG2:%.*]], i32 1
-; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr ptr, <2 x ptr> [[TMP2]], <2 x i64> <i64 -1, i64 128>
+; CHECK-NEXT:    [[TMP:%.*]] = getelementptr inbounds i8, ptr [[ARG2:%.*]], i64 128
+; CHECK-NEXT:    [[TMP3:%.*]] = getelementptr inbounds ptr, ptr [[ARG1:%.*]], i64 -1
 ; CHECK-NEXT:    [[TMP4:%.*]] = getelementptr inbounds ptr, ptr [[ARG:%.*]], i64 0
 ; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr inbounds ptr, ptr [[ARG]], i64 1
-; CHECK-NEXT:    store <2 x ptr> [[TMP3]], ptr [[TMP4]], align 8
+; CHECK-NEXT:    store ptr [[TMP3]], ptr [[TMP4]], align 8
+; CHECK-NEXT:    store ptr [[TMP]], ptr [[TMP5]], align 8
 ; CHECK-NEXT:    ret void
 ;
   %tmp = getelementptr inbounds i8, ptr %arg2, i64 128
Index: llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
===================================================================
--- llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
+++ llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp
@@ -4274,9 +4274,9 @@
 
       // We can't combine several GEPs into one vector if they operate on
       // different types.
-      Type *Ty0 = VL0->getOperand(0)->getType();
+      Type *Ty0 = cast<GEPOperator>(VL0)->getSourceElementType();
       for (Value *V : VL) {
-        Type *CurTy = cast<Instruction>(V)->getOperand(0)->getType();
+        Type *CurTy = cast<GEPOperator>(V)->getSourceElementType();
         if (Ty0 != CurTy) {
           LLVM_DEBUG(dbgs()
                      << "SLP: not-vectorizable GEP (different types).\n");


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D119980.409424.patch
Type: text/x-patch
Size: 2003 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220216/41dbccec/attachment.bin>


More information about the llvm-commits mailing list