xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/int_sideeffect.ll (revision 580210a0c938531ef9fd79f9ffedb93eeb2e66c2)
1cee313d2SEric Christopher; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
23be72f40SBjorn Pettersson; RUN: opt -S < %s -passes=slp-vectorizer -slp-max-reg-size=128 -slp-min-reg-size=128 | FileCheck %s
3cee313d2SEric Christopher
4cee313d2SEric Christopherdeclare void @llvm.sideeffect()
5cee313d2SEric Christopher
6cee313d2SEric Christopher; SLP vectorization across a @llvm.sideeffect.
7cee313d2SEric Christopher
8*580210a0SNikita Popovdefine void @test_sideeffect(ptr %p) {
9bf8b69bbSNikita Popov; CHECK-LABEL: @test_sideeffect(
10cee313d2SEric Christopher; CHECK-NEXT:    call void @llvm.sideeffect()
1148cc9287SPhilip Reames; CHECK-NEXT:    call void @llvm.sideeffect()
12*580210a0SNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x float>, ptr [[P:%.*]], align 4
13*580210a0SNikita Popov; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr [[P]], align 4
14cee313d2SEric Christopher; CHECK-NEXT:    ret void
15cee313d2SEric Christopher;
16*580210a0SNikita Popov  %p1 = getelementptr float, ptr %p, i64 1
17*580210a0SNikita Popov  %p2 = getelementptr float, ptr %p, i64 2
18*580210a0SNikita Popov  %p3 = getelementptr float, ptr %p, i64 3
19*580210a0SNikita Popov  %l0 = load float, ptr %p
20*580210a0SNikita Popov  %l1 = load float, ptr %p1
21*580210a0SNikita Popov  %l2 = load float, ptr %p2
22cee313d2SEric Christopher  call void @llvm.sideeffect()
23*580210a0SNikita Popov  %l3 = load float, ptr %p3
24*580210a0SNikita Popov  store float %l0, ptr %p
25cee313d2SEric Christopher  call void @llvm.sideeffect()
26*580210a0SNikita Popov  store float %l1, ptr %p1
27*580210a0SNikita Popov  store float %l2, ptr %p2
28*580210a0SNikita Popov  store float %l3, ptr %p3
29cee313d2SEric Christopher  ret void
30cee313d2SEric Christopher}
31bf8b69bbSNikita Popov
32bf8b69bbSNikita Popovdeclare void @foo()
33bf8b69bbSNikita Popov
34*580210a0SNikita Popovdefine void @test_inaccessiblememonly(ptr %p) {
35bf8b69bbSNikita Popov; CHECK-LABEL: @test_inaccessiblememonly(
36bf8b69bbSNikita Popov; CHECK-NEXT:    call void @foo() #[[ATTR1:[0-9]+]]
3748cc9287SPhilip Reames; CHECK-NEXT:    call void @foo() #[[ATTR1]]
38*580210a0SNikita Popov; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x float>, ptr [[P:%.*]], align 4
39*580210a0SNikita Popov; CHECK-NEXT:    store <4 x float> [[TMP2]], ptr [[P]], align 4
40bf8b69bbSNikita Popov; CHECK-NEXT:    ret void
41bf8b69bbSNikita Popov;
42*580210a0SNikita Popov  %p1 = getelementptr float, ptr %p, i64 1
43*580210a0SNikita Popov  %p2 = getelementptr float, ptr %p, i64 2
44*580210a0SNikita Popov  %p3 = getelementptr float, ptr %p, i64 3
45*580210a0SNikita Popov  %l0 = load float, ptr %p
46*580210a0SNikita Popov  %l1 = load float, ptr %p1
47*580210a0SNikita Popov  %l2 = load float, ptr %p2
48bf8b69bbSNikita Popov  call void @foo() inaccessiblememonly
49*580210a0SNikita Popov  %l3 = load float, ptr %p3
50*580210a0SNikita Popov  store float %l0, ptr %p
51bf8b69bbSNikita Popov  call void @foo() inaccessiblememonly
52*580210a0SNikita Popov  store float %l1, ptr %p1
53*580210a0SNikita Popov  store float %l2, ptr %p2
54*580210a0SNikita Popov  store float %l3, ptr %p3
55bf8b69bbSNikita Popov  ret void
56bf8b69bbSNikita Popov}
57