[llvm] dc37f53 - [LoadStoreVectorizer] Add test for inaccessiblememonly call (NFC)
Nikita Popov via llvm-commits
llvm-commits at lists.llvm.org
Tue Aug 31 13:12:54 PDT 2021
Author: Nikita Popov
Date: 2021-08-31T22:12:45+02:00
New Revision: dc37f5374cd350a732e8009ed2d319c810b24ab1
URL: https://github.com/llvm/llvm-project/commit/dc37f5374cd350a732e8009ed2d319c810b24ab1
DIFF: https://github.com/llvm/llvm-project/commit/dc37f5374cd350a732e8009ed2d319c810b24ab1.diff
LOG: [LoadStoreVectorizer] Add test for inaccessiblememonly call (NFC)
Added:
Modified:
llvm/test/Transforms/LoadStoreVectorizer/int_sideeffect.ll
Removed:
################################################################################
diff --git a/llvm/test/Transforms/LoadStoreVectorizer/int_sideeffect.ll b/llvm/test/Transforms/LoadStoreVectorizer/int_sideeffect.ll
index 07487b5780395..078efff9be46e 100644
--- a/llvm/test/Transforms/LoadStoreVectorizer/int_sideeffect.ll
+++ b/llvm/test/Transforms/LoadStoreVectorizer/int_sideeffect.ll
@@ -1,3 +1,4 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -S < %s -load-store-vectorizer | FileCheck %s
; RUN: opt -S < %s -passes='function(load-store-vectorizer)' | FileCheck %s
@@ -5,23 +6,75 @@ declare void @llvm.sideeffect()
; load-store vectorization across a @llvm.sideeffect.
-; CHECK-LABEL: test
-; CHECK: load <4 x float>
-; CHECK: store <4 x float>
-define void @test(float* %p) {
- %p0 = getelementptr float, float* %p, i64 0
- %p1 = getelementptr float, float* %p, i64 1
- %p2 = getelementptr float, float* %p, i64 2
- %p3 = getelementptr float, float* %p, i64 3
- %l0 = load float, float* %p0, align 16
- %l1 = load float, float* %p1
- %l2 = load float, float* %p2
- call void @llvm.sideeffect()
- %l3 = load float, float* %p3
- store float %l0, float* %p0, align 16
- call void @llvm.sideeffect()
- store float %l1, float* %p1
- store float %l2, float* %p2
- store float %l3, float* %p3
- ret void
+define void @test_sideeffect(float* %p) {
+; CHECK-LABEL: @test_sideeffect(
+; CHECK-NEXT: [[P0:%.*]] = getelementptr float, float* [[P:%.*]], i64 0
+; CHECK-NEXT: [[TMP1:%.*]] = bitcast float* [[P0]] to <4 x float>*
+; CHECK-NEXT: [[TMP2:%.*]] = load <4 x float>, <4 x float>* [[TMP1]], align 16
+; CHECK-NEXT: [[L01:%.*]] = extractelement <4 x float> [[TMP2]], i32 0
+; CHECK-NEXT: [[L12:%.*]] = extractelement <4 x float> [[TMP2]], i32 1
+; CHECK-NEXT: [[L23:%.*]] = extractelement <4 x float> [[TMP2]], i32 2
+; CHECK-NEXT: [[L34:%.*]] = extractelement <4 x float> [[TMP2]], i32 3
+; CHECK-NEXT: call void @llvm.sideeffect()
+; CHECK-NEXT: call void @llvm.sideeffect()
+; CHECK-NEXT: [[TMP3:%.*]] = insertelement <4 x float> undef, float [[L01]], i32 0
+; CHECK-NEXT: [[TMP4:%.*]] = insertelement <4 x float> [[TMP3]], float [[L12]], i32 1
+; CHECK-NEXT: [[TMP5:%.*]] = insertelement <4 x float> [[TMP4]], float [[L23]], i32 2
+; CHECK-NEXT: [[TMP6:%.*]] = insertelement <4 x float> [[TMP5]], float [[L34]], i32 3
+; CHECK-NEXT: [[TMP7:%.*]] = bitcast float* [[P0]] to <4 x float>*
+; CHECK-NEXT: store <4 x float> [[TMP6]], <4 x float>* [[TMP7]], align 16
+; CHECK-NEXT: ret void
+;
+ %p0 = getelementptr float, float* %p, i64 0
+ %p1 = getelementptr float, float* %p, i64 1
+ %p2 = getelementptr float, float* %p, i64 2
+ %p3 = getelementptr float, float* %p, i64 3
+ %l0 = load float, float* %p0, align 16
+ %l1 = load float, float* %p1
+ %l2 = load float, float* %p2
+ call void @llvm.sideeffect()
+ %l3 = load float, float* %p3
+ store float %l0, float* %p0, align 16
+ call void @llvm.sideeffect()
+ store float %l1, float* %p1
+ store float %l2, float* %p2
+ store float %l3, float* %p3
+ ret void
+}
+
+declare void @foo()
+
+define void @test_inaccessiblememonly(float* %p) {
+; CHECK-LABEL: @test_inaccessiblememonly(
+; CHECK-NEXT: [[P0:%.*]] = getelementptr float, float* [[P:%.*]], i64 0
+; CHECK-NEXT: [[P1:%.*]] = getelementptr float, float* [[P]], i64 1
+; CHECK-NEXT: [[P2:%.*]] = getelementptr float, float* [[P]], i64 2
+; CHECK-NEXT: [[P3:%.*]] = getelementptr float, float* [[P]], i64 3
+; CHECK-NEXT: [[L0:%.*]] = load float, float* [[P0]], align 16
+; CHECK-NEXT: [[L1:%.*]] = load float, float* [[P1]], align 4
+; CHECK-NEXT: [[L2:%.*]] = load float, float* [[P2]], align 4
+; CHECK-NEXT: call void @foo() #[[ATTR1:[0-9]+]]
+; CHECK-NEXT: [[L3:%.*]] = load float, float* [[P3]], align 4
+; CHECK-NEXT: store float [[L0]], float* [[P0]], align 16
+; CHECK-NEXT: call void @foo() #[[ATTR1]]
+; CHECK-NEXT: store float [[L1]], float* [[P1]], align 4
+; CHECK-NEXT: store float [[L2]], float* [[P2]], align 4
+; CHECK-NEXT: store float [[L3]], float* [[P3]], align 4
+; CHECK-NEXT: ret void
+;
+ %p0 = getelementptr float, float* %p, i64 0
+ %p1 = getelementptr float, float* %p, i64 1
+ %p2 = getelementptr float, float* %p, i64 2
+ %p3 = getelementptr float, float* %p, i64 3
+ %l0 = load float, float* %p0, align 16
+ %l1 = load float, float* %p1
+ %l2 = load float, float* %p2
+ call void @foo() inaccessiblememonly nounwind
+ %l3 = load float, float* %p3
+ store float %l0, float* %p0, align 16
+ call void @foo() inaccessiblememonly nounwind
+ store float %l1, float* %p1
+ store float %l2, float* %p2
+ store float %l3, float* %p3
+ ret void
}
More information about the llvm-commits
mailing list