[llvm] a9129f8 - [LoadStoreVectorizer] Support opaque pointers
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Sun Jun 27 06:42:27 PDT 2021
Author: Nikita Popov
Date: 2021-06-27T15:42:16+02:00
New Revision: a9129f8964ed8521f7cd0b25a6a6c6c1ce27fe19
URL: https://github.com/llvm/llvm-project/commit/a9129f8964ed8521f7cd0b25a6a6c6c1ce27fe19
DIFF: https://github.com/llvm/llvm-project/commit/a9129f8964ed8521f7cd0b25a6a6c6c1ce27fe19.diff
LOG: [LoadStoreVectorizer] Support opaque pointers
There are remaining redundant bitcasts.
Added:
llvm/test/Transforms/LoadStoreVectorizer/X86/opaque-ptr.ll
Modified:
llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
Removed:
################################################################################
diff --git a/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp b/llvm/lib/Transforms/Vectorize/LoadStoreVectorizer.cpp
index a61ebac49c0d0..3b90997100f12 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
diff erent 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 0000000000000..3d610ea1c947f
--- /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
+}
+
More information about the llvm-commits
mailing list