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