From: Nikita Popov Date: Sun, 27 Jun 2021 13:40:43 +0000 (+0200) Subject: [LoadStoreVectorizer] Support opaque pointers X-Git-Tag: llvmorg-14-init~2918 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a9129f8964ed8521f7cd0b25a6a6c6c1ce27fe19;p=platform%2Fupstream%2Fllvm.git [LoadStoreVectorizer] Support opaque pointers There are remaining redundant bitcasts. --- diff --git a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp index a61ebac..3b90997 100644 --- a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp @@ -312,8 +312,8 @@ bool Vectorizer::isConsecutiveAccess(Value *A, Value *B) { return false; // Make sure that A and B are different pointers of the same size type. - Type *PtrATy = PtrA->getType()->getPointerElementType(); - Type *PtrBTy = PtrB->getType()->getPointerElementType(); + Type *PtrATy = getLoadStoreType(A); + Type *PtrBTy = getLoadStoreType(B); if (PtrA == PtrB || PtrATy->isVectorTy() != PtrBTy->isVectorTy() || DL.getTypeStoreSize(PtrATy) != DL.getTypeStoreSize(PtrBTy) || diff --git a/llvm/test/Transforms/LoadStoreVectorizer/X86/opaque-ptr.ll b/llvm/test/Transforms/LoadStoreVectorizer/X86/opaque-ptr.ll new file mode 100644 index 0000000..3d610ea --- /dev/null +++ b/llvm/test/Transforms/LoadStoreVectorizer/X86/opaque-ptr.ll @@ -0,0 +1,21 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py +; RUN: opt -mtriple=x86_64-unknown-linux-gnu -load-store-vectorizer -S < %s | FileCheck %s + +define void @test(ptr %ptr) { +; CHECK-LABEL: @test( +; CHECK-NEXT: [[TMP1:%.*]] = bitcast ptr [[PTR:%.*]] to <2 x i32>* +; CHECK-NEXT: [[TMP2:%.*]] = load <2 x i32>, <2 x i32>* [[TMP1]], align 4 +; CHECK-NEXT: [[L11:%.*]] = extractelement <2 x i32> [[TMP2]], i32 0 +; CHECK-NEXT: [[L22:%.*]] = extractelement <2 x i32> [[TMP2]], i32 1 +; CHECK-NEXT: [[TMP3:%.*]] = bitcast ptr [[PTR]] to <2 x i32>* +; CHECK-NEXT: store <2 x i32> zeroinitializer, <2 x i32>* [[TMP3]], align 4 +; CHECK-NEXT: ret void +; + %ptr2 = getelementptr i32, ptr %ptr, i64 1 + %l1 = load i32, ptr %ptr, align 4 + %l2 = load i32, ptr %ptr2, align 4 + store i32 0, ptr %ptr, align 4 + store i32 0, ptr %ptr2, align 4 + ret void +} +