; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s define float @test() { ; CHECK-LABEL: define float @test() { ; CHECK-NEXT: [[LABEL:.*]]: ; CHECK-NEXT: [[SUB_I102_I:%.*]] = fsub float 0.000000e+00, 0.000000e+00 ; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x float> , float [[SUB_I102_I]], i32 2 ; CHECK-NEXT: [[TMP1:%.*]] = fmul <4 x float> [[TMP0]], ; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x float> [[TMP1]], float 0.000000e+00, i32 1 ; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x float> [[TMP2]], <4 x float> poison, <4 x i32> ; CHECK-NEXT: [[TMP4:%.*]] = shufflevector <4 x float> [[TMP3]], <4 x float> poison, <8 x i32> ; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <8 x float> , <8 x float> [[TMP4]], <8 x i32> ; CHECK-NEXT: [[TMP6:%.*]] = fmul <8 x float> , [[TMP5]] ; CHECK-NEXT: [[TMP7:%.*]] = fadd <8 x float> , [[TMP6]] ; CHECK-NEXT: [[TMP8:%.*]] = fadd <8 x float> [[TMP7]], ; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <4 x float> [[TMP0]], <4 x float> poison, <2 x i32> ; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x float> [[TMP9]], <2 x float> , <2 x i32> ; CHECK-NEXT: [[TMP11:%.*]] = fmul <2 x float> zeroinitializer, [[TMP10]] ; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <4 x float> [[TMP1]], <4 x float> poison, <8 x i32> ; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <8 x float> [[TMP12]], <8 x float> , <8 x i32> ; CHECK-NEXT: [[TMP14:%.*]] = fmul <8 x float> , [[TMP13]] ; CHECK-NEXT: [[TMP15:%.*]] = fadd <8 x float> , [[TMP14]] ; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <8 x float> [[TMP15]], <8 x float> poison, <12 x i32> ; CHECK-NEXT: [[TMP17:%.*]] = shufflevector <12 x float> [[TMP16]], <12 x float> , <12 x i32> ; CHECK-NEXT: [[TMP18:%.*]] = fadd <2 x float> [[TMP11]], zeroinitializer ; CHECK-NEXT: [[TMP19:%.*]] = shufflevector <2 x float> [[TMP18]], <2 x float> poison, <8 x i32> ; CHECK-NEXT: [[TMP20:%.*]] = shufflevector <8 x float> , <8 x float> [[TMP19]], <8 x i32> ; CHECK-NEXT: [[TMP21:%.*]] = fsub <8 x float> [[TMP20]], [[TMP8]] ; CHECK-NEXT: [[TMP22:%.*]] = fadd <12 x float> , [[TMP17]] ; CHECK-NEXT: [[TMP23:%.*]] = shufflevector <12 x float> [[TMP22]], <12 x float> poison, <20 x i32> ; CHECK-NEXT: [[TMP24:%.*]] = shufflevector <8 x float> [[TMP21]], <8 x float> poison, <20 x i32> ; CHECK-NEXT: [[TMP25:%.*]] = shufflevector <20 x float> [[TMP23]], <20 x float> [[TMP24]], <20 x i32> ; CHECK-NEXT: br label %[[REGION_30:.*]] ; CHECK: [[REGION_30]]: ; CHECK-NEXT: [[TMP26:%.*]] = phi <20 x float> [ [[TMP25]], %[[LABEL]] ] ; CHECK-NEXT: [[TMP27:%.*]] = extractelement <20 x float> [[TMP26]], i32 7 ; CHECK-NEXT: ret float [[TMP27]] ; label: %tmp.0.4.vec.extract = extractelement <4 x float> zeroinitializer, i64 0 %tmp.0.0.vec.extract = extractelement <4 x float> zeroinitializer, i64 0 %tmp.12.36.vec.extract = extractelement <4 x float> zeroinitializer, i64 0 %tmp.7.28.vec.extract = extractelement <4 x float> zeroinitializer, i64 0 %tmp.0.12.vec.extract = extractelement <4 x float> zeroinitializer, i64 0 %mul3.i128.i = fmul float 0.000000e+00, 0.000000e+00 %mul3.i138.i = fmul float 0.000000e+00, 0.000000e+00 %sub.i102.i = fsub float 0.000000e+00, 0.000000e+00 %mul.i136.i = fmul float %sub.i102.i, 0.000000e+00 %v.0.4.vec.extract = extractelement <8 x float> zeroinitializer, i64 0 %v.0.24.vec.extract = extractelement <8 x float> zeroinitializer, i64 0 %v.0.28.vec.extract = extractelement <8 x float> zeroinitializer, i64 0 %v.11.48.vec.extract = extractelement <8 x float> zeroinitializer, i64 0 %v.20.72.vec.extract = extractelement <8 x float> zeroinitializer, i64 0 %v.20.76.vec.extract = extractelement <8 x float> zeroinitializer, i64 0 %0 = fmul float %v.0.4.vec.extract, %tmp.0.0.vec.extract %1 = fadd float %0, 0.000000e+00 %2 = fmul float %v.0.28.vec.extract, 0.000000e+00 %3 = fmul float %v.0.28.vec.extract, %tmp.0.0.vec.extract %4 = fadd float %3, 0.000000e+00 %5 = fmul float %tmp.0.4.vec.extract, %v.11.48.vec.extract %6 = fadd float 0.000000e+00, %5 %7 = fmul float %v.20.76.vec.extract, %tmp.0.0.vec.extract %8 = fadd float %7, 0.000000e+00 %9 = fmul float 0.000000e+00, %tmp.0.12.vec.extract %10 = fadd float %2, %9 %11 = fadd float %10, 0.000000e+00 %12 = fsub float 0.000000e+00, %11 %13 = fadd float 0.000000e+00, %1 %14 = fadd float 0.000000e+00, %4 %15 = fadd float 0.000000e+00, %6 %16 = fadd float 0.000000e+00, %8 %17 = fmul float 0.000000e+00, 0.000000e+00 %18 = fmul float 0.000000e+00, %tmp.7.28.vec.extract %19 = fmul float 0.000000e+00, 0.000000e+00 %20 = fmul float 0.000000e+00, 0.000000e+00 %21 = fmul float 0.000000e+00, %tmp.7.28.vec.extract %22 = fmul float 0.000000e+00, 0.000000e+00 %23 = fmul float 0.000000e+00, %tmp.12.36.vec.extract %24 = fadd float %18, %23 %25 = fmul float 0.000000e+00, %tmp.12.36.vec.extract %26 = fadd float %21, %25 %27 = fsub float 0.000000e+00, poison %28 = fadd float %24, 0.000000e+00 %29 = fsub float 0.000000e+00, %28 %30 = fadd float %26, 0.000000e+00 %31 = fsub float 0.000000e+00, %30 %32 = fadd float 0.000000e+00, %17 %33 = fadd float 0.000000e+00, %19 %34 = fadd float 0.000000e+00, %20 %35 = fadd float 0.000000e+00, %22 %36 = fmul float 0.000000e+00, %mul3.i138.i %37 = fmul float %v.0.4.vec.extract, %mul.i136.i %38 = fadd float %37, 0.000000e+00 %39 = fmul float 0.000000e+00, %mul3.i138.i %40 = fmul float %mul3.i138.i, %v.0.24.vec.extract %41 = fadd float 0.000000e+00, %40 %42 = fmul float 0.000000e+00, %mul3.i138.i %43 = fmul float 0.000000e+00, %mul3.i138.i %44 = fmul float %mul3.i138.i, %v.20.72.vec.extract %45 = fadd float 0.000000e+00, %44 %46 = fmul float 0.000000e+00, 1.000000e+00 %47 = fmul float 0.000000e+00, %mul3.i128.i %48 = fadd float %36, %47 %49 = fmul float 0.000000e+00, %mul3.i128.i %50 = fadd float %39, %49 %51 = fmul float 0.000000e+00, %mul3.i128.i %52 = fadd float %42, %51 %53 = fmul float 0.000000e+00, %mul3.i128.i %54 = fadd float %43, %53 %55 = fadd float %46, 0.000000e+00 %56 = fadd float %48, 0.000000e+00 %57 = fsub float %55, %56 %58 = fadd float %50, 0.000000e+00 %59 = fsub float 0.000000e+00, %58 %60 = fadd float %52, 0.000000e+00 %61 = fsub float 0.000000e+00, %60 %62 = fadd float %mul.i136.i, 0.000000e+00 %63 = fadd float %54, 0.000000e+00 %64 = fsub float %62, %63 %65 = fadd float 0.000000e+00, %38 %66 = fadd float 0.000000e+00, %41 %67 = fadd float 0.000000e+00, %45 br label %region.30 region.30: %68 = phi float [ %29, %label ] %69 = phi float [ %66, %label ] %70 = phi float [ %59, %label ] %71 = phi float [ %15, %label ] %72 = phi float [ %34, %label ] %73 = phi float [ poison, %label ] %74 = phi float [ %61, %label ] %75 = phi float [ %16, %label ] %76 = phi float [ %35, %label ] %77 = phi float [ %31, %label ] %78 = phi float [ %67, %label ] %79 = phi float [ %64, %label ] %80 = phi float [ %33, %label ] %81 = phi float [ %12, %label ] %82 = phi float [ %14, %label ] %83 = phi float [ %57, %label ] %84 = phi float [ %65, %label ] %85 = phi float [ %27, %label ] %86 = phi float [ %32, %label ] %87 = phi float [ %13, %label ] ret float %87 }