85 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 32; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s3 4define <16 x double> @test(ptr %x, double %v, double %a) {5; CHECK-LABEL: define <16 x double> @test(6; CHECK-SAME: ptr [[X:%.*]], double [[V:%.*]], double [[A:%.*]]) {7; CHECK-NEXT: [[GEP6:%.*]] = getelementptr inbounds double, ptr [[X]], i64 88; CHECK-NEXT: [[GEP8:%.*]] = getelementptr inbounds double, ptr [[X]], i64 99; CHECK-NEXT: [[TMP1:%.*]] = load <6 x double>, ptr [[X]], align 410; CHECK-NEXT: [[TMP6:%.*]] = load <2 x double>, ptr [[GEP6]], align 411; CHECK-NEXT: [[TMP7:%.*]] = load <2 x double>, ptr [[GEP8]], align 412; CHECK-NEXT: [[TMP4:%.*]] = insertelement <16 x double> poison, double [[A]], i32 013; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <16 x double> [[TMP4]], <16 x double> poison, <16 x i32> zeroinitializer14; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x double> poison, double [[V]], i32 015; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x double> [[TMP2]], <4 x double> poison, <4 x i32> zeroinitializer16; CHECK-NEXT: [[TMP8:%.*]] = insertelement <2 x double> poison, double [[V]], i32 017; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <2 x double> [[TMP8]], <2 x double> poison, <2 x i32> zeroinitializer18; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <6 x double> [[TMP1]], <6 x double> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>19; 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; 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 poison, i32 poison, i32 poison, i32 poison, i32 16, i32 17, i32 18, i32 19, i32 poison, i32 poison>21; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <2 x double> [[TMP6]], <2 x double> poison, <16 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>22; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <16 x double> [[TMP12]], <16 x double> [[TMP13]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 16, i32 17, i32 poison, i32 poison, i32 10, i32 11, i32 12, i32 13, i32 poison, i32 poison>23; CHECK-NEXT: [[TMP15:%.*]] = shufflevector <2 x double> [[TMP7]], <2 x double> poison, <16 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>24; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <16 x double> [[TMP14]], <16 x double> [[TMP15]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 10, i32 11, i32 12, i32 13, i32 poison, i32 poison>25; CHECK-NEXT: [[TMP20:%.*]] = shufflevector <2 x double> [[TMP9]], <2 x double> poison, <16 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>26; CHECK-NEXT: [[TMP21:%.*]] = shufflevector <16 x double> [[TMP16]], <16 x double> [[TMP20]], <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 12, i32 13, i32 poison, i32 poison>27; CHECK-NEXT: [[TMP19:%.*]] = shufflevector <16 x double> [[TMP21]], <16 x double> [[TMP20]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 16, i32 17, i32 poison, i32 poison>28; CHECK-NEXT: [[TMP17:%.*]] = shufflevector <16 x double> [[TMP19]], <16 x double> [[TMP20]], <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 16, i32 17>29; CHECK-NEXT: [[TMP18:%.*]] = fadd <16 x double> [[TMP5]], [[TMP17]]30; CHECK-NEXT: ret <16 x double> [[TMP18]]31;32 %gep1 = getelementptr inbounds double, ptr %x, i64 133 %gep2 = getelementptr inbounds double, ptr %x, i64 234 %gep3 = getelementptr inbounds double, ptr %x, i64 335 %gep4 = getelementptr inbounds double, ptr %x, i64 436 %gep5 = getelementptr inbounds double, ptr %x, i64 537 %gep6 = getelementptr inbounds double, ptr %x, i64 838 %gep7 = getelementptr inbounds double, ptr %x, i64 939 %gep8 = getelementptr inbounds double, ptr %x, i64 940 %gep9 = getelementptr inbounds double, ptr %x, i64 1041 %x0 = load double, ptr %x, align 442 %x1 = load double, ptr %gep1, align 443 %x2 = load double, ptr %gep2, align 444 %x3 = load double, ptr %gep3, align 445 %x4 = load double, ptr %gep4, align 446 %x5 = load double, ptr %gep5, align 447 %x6 = load double, ptr %gep6, align 448 %x7 = load double, ptr %gep7, align 449 %x8 = load double, ptr %gep8, align 450 %x9 = load double, ptr %gep9, align 451 %add1 = fadd double %a, %x052 %add2 = fadd double %a, %x153 %add3 = fadd double %a, %x254 %add4 = fadd double %a, %x355 %add5 = fadd double %a, %x456 %add6 = fadd double %a, %x557 %add7 = fadd double %a, %x658 %add8 = fadd double %a, %x759 %add9 = fadd double %a, %x860 %add10 = fadd double %a, %x961 %add11 = fadd double %a, %v62 %add12 = fadd double %a, %v63 %add13 = fadd double %a, %v64 %add14 = fadd double %a, %v65 %add15 = fadd double %a, %v66 %add16 = fadd double %a, %v67 %i0 = insertelement <16 x double> poison, double %add1, i32 068 %i1 = insertelement <16 x double> %i0, double %add2, i32 169 %i2 = insertelement <16 x double> %i1, double %add3, i32 270 %i3 = insertelement <16 x double> %i2, double %add4, i32 371 %i4 = insertelement <16 x double> %i3, double %add5, i32 472 %i5 = insertelement <16 x double> %i4, double %add6, i32 573 %i6 = insertelement <16 x double> %i5, double %add7, i32 674 %i7 = insertelement <16 x double> %i6, double %add8, i32 775 %i8 = insertelement <16 x double> %i7, double %add9, i32 876 %i9 = insertelement <16 x double> %i8, double %add10, i32 977 %i10 = insertelement <16 x double> %i9, double %add11, i32 1078 %i11 = insertelement <16 x double> %i10, double %add12, i32 1179 %i12 = insertelement <16 x double> %i11, double %add13, i32 1280 %i13 = insertelement <16 x double> %i12, double %add14, i32 1381 %i14 = insertelement <16 x double> %i13, double %add15, i32 1482 %i15 = insertelement <16 x double> %i14, double %add16, i32 1583 ret <16 x double> %i1584}85