155f7491dSAlexey Bataev; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3 292a6eff6SAlexey Bataev; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s 355f7491dSAlexey Bataev 492a6eff6SAlexey Bataevdefine <16 x double> @test(ptr %x, double %v, double %a) { 592a6eff6SAlexey Bataev; CHECK-LABEL: define <16 x double> @test( 692a6eff6SAlexey Bataev; CHECK-SAME: ptr [[X:%.*]], double [[V:%.*]], double [[A:%.*]]) { 792a6eff6SAlexey Bataev; CHECK-NEXT: [[GEP6:%.*]] = getelementptr inbounds double, ptr [[X]], i64 8 892a6eff6SAlexey Bataev; CHECK-NEXT: [[GEP8:%.*]] = getelementptr inbounds double, ptr [[X]], i64 9 992a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP1:%.*]] = load <6 x double>, ptr [[X]], align 4 1092a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP6:%.*]] = load <2 x double>, ptr [[GEP6]], align 4 1192a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr [[GEP8]], align 4 1292a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP4:%.*]] = insertelement <16 x double> poison, double [[A]], i32 0 1392a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <16 x double> [[TMP4]], <16 x double> poison, <16 x i32> zeroinitializer 1492a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x double> poison, double [[V]], i32 0 1592a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x double> [[TMP2]], <4 x double> poison, <4 x i32> zeroinitializer 1692a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP8:%.*]] = insertelement <2 x double> poison, double [[V]], i32 0 1792a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <2 x double> [[TMP8]], <2 x double> poison, <2 x i32> zeroinitializer 1892a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP10:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v6f64(<16 x double> poison, <6 x double> [[TMP1]], i64 0) 1992a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x double> [[TMP3]], <4 x double> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison> 20*2b1e037aSAlexey Bataev; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <16 x double> [[TMP10]], <16 x double> [[TMP11]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 16, i32 17, i32 18, i32 19, i32 14, i32 15> 2192a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP13:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP12]], <2 x double> [[TMP6]], i64 6) 2292a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP14:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP13]], <2 x double> [[TMP7]], i64 8) 2392a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP15:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP14]], <2 x double> [[TMP9]], i64 10) 2492a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP16:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP15]], <2 x double> [[TMP9]], i64 12) 2592a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP17:%.*]] = call <16 x double> @llvm.vector.insert.v16f64.v2f64(<16 x double> [[TMP16]], <2 x double> [[TMP9]], i64 14) 2692a6eff6SAlexey Bataev; CHECK-NEXT: [[TMP18:%.*]] = fadd <16 x double> [[TMP5]], [[TMP17]] 2792a6eff6SAlexey Bataev; CHECK-NEXT: ret <16 x double> [[TMP18]] 2855f7491dSAlexey Bataev; 2992a6eff6SAlexey Bataev %gep1 = getelementptr inbounds double, ptr %x, i64 1 3092a6eff6SAlexey Bataev %gep2 = getelementptr inbounds double, ptr %x, i64 2 3192a6eff6SAlexey Bataev %gep3 = getelementptr inbounds double, ptr %x, i64 3 3292a6eff6SAlexey Bataev %gep4 = getelementptr inbounds double, ptr %x, i64 4 3392a6eff6SAlexey Bataev %gep5 = getelementptr inbounds double, ptr %x, i64 5 3492a6eff6SAlexey Bataev %gep6 = getelementptr inbounds double, ptr %x, i64 8 3592a6eff6SAlexey Bataev %gep7 = getelementptr inbounds double, ptr %x, i64 9 3692a6eff6SAlexey Bataev %gep8 = getelementptr inbounds double, ptr %x, i64 9 3792a6eff6SAlexey Bataev %gep9 = getelementptr inbounds double, ptr %x, i64 10 3892a6eff6SAlexey Bataev %x0 = load double, ptr %x, align 4 3992a6eff6SAlexey Bataev %x1 = load double, ptr %gep1, align 4 4092a6eff6SAlexey Bataev %x2 = load double, ptr %gep2, align 4 4192a6eff6SAlexey Bataev %x3 = load double, ptr %gep3, align 4 4292a6eff6SAlexey Bataev %x4 = load double, ptr %gep4, align 4 4392a6eff6SAlexey Bataev %x5 = load double, ptr %gep5, align 4 4492a6eff6SAlexey Bataev %x6 = load double, ptr %gep6, align 4 4592a6eff6SAlexey Bataev %x7 = load double, ptr %gep7, align 4 4692a6eff6SAlexey Bataev %x8 = load double, ptr %gep8, align 4 4792a6eff6SAlexey Bataev %x9 = load double, ptr %gep9, align 4 4892a6eff6SAlexey Bataev %add1 = fadd double %a, %x0 4992a6eff6SAlexey Bataev %add2 = fadd double %a, %x1 5092a6eff6SAlexey Bataev %add3 = fadd double %a, %x2 5192a6eff6SAlexey Bataev %add4 = fadd double %a, %x3 5292a6eff6SAlexey Bataev %add5 = fadd double %a, %x4 5392a6eff6SAlexey Bataev %add6 = fadd double %a, %x5 5492a6eff6SAlexey Bataev %add7 = fadd double %a, %x6 5592a6eff6SAlexey Bataev %add8 = fadd double %a, %x7 5692a6eff6SAlexey Bataev %add9 = fadd double %a, %x8 5792a6eff6SAlexey Bataev %add10 = fadd double %a, %x9 5892a6eff6SAlexey Bataev %add11 = fadd double %a, %v 5992a6eff6SAlexey Bataev %add12 = fadd double %a, %v 6092a6eff6SAlexey Bataev %add13 = fadd double %a, %v 6192a6eff6SAlexey Bataev %add14 = fadd double %a, %v 6292a6eff6SAlexey Bataev %add15 = fadd double %a, %v 6392a6eff6SAlexey Bataev %add16 = fadd double %a, %v 6492a6eff6SAlexey Bataev %i0 = insertelement <16 x double> poison, double %add1, i32 0 6592a6eff6SAlexey Bataev %i1 = insertelement <16 x double> %i0, double %add2, i32 1 6692a6eff6SAlexey Bataev %i2 = insertelement <16 x double> %i1, double %add3, i32 2 6792a6eff6SAlexey Bataev %i3 = insertelement <16 x double> %i2, double %add4, i32 3 6892a6eff6SAlexey Bataev %i4 = insertelement <16 x double> %i3, double %add5, i32 4 6992a6eff6SAlexey Bataev %i5 = insertelement <16 x double> %i4, double %add6, i32 5 7092a6eff6SAlexey Bataev %i6 = insertelement <16 x double> %i5, double %add7, i32 6 7192a6eff6SAlexey Bataev %i7 = insertelement <16 x double> %i6, double %add8, i32 7 7292a6eff6SAlexey Bataev %i8 = insertelement <16 x double> %i7, double %add9, i32 8 7392a6eff6SAlexey Bataev %i9 = insertelement <16 x double> %i8, double %add10, i32 9 7492a6eff6SAlexey Bataev %i10 = insertelement <16 x double> %i9, double %add11, i32 10 7592a6eff6SAlexey Bataev %i11 = insertelement <16 x double> %i10, double %add12, i32 11 7692a6eff6SAlexey Bataev %i12 = insertelement <16 x double> %i11, double %add13, i32 12 7792a6eff6SAlexey Bataev %i13 = insertelement <16 x double> %i12, double %add14, i32 13 7892a6eff6SAlexey Bataev %i14 = insertelement <16 x double> %i13, double %add15, i32 14 7992a6eff6SAlexey Bataev %i15 = insertelement <16 x double> %i14, double %add16, i32 15 8092a6eff6SAlexey Bataev ret <16 x double> %i15 8155f7491dSAlexey Bataev} 82