; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4 ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=znver2 < %s | FileCheck %s define void @test() { ; CHECK-LABEL: define void @test( ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] { ; CHECK-NEXT: bb: ; CHECK-NEXT: br label [[BB1:%.*]] ; CHECK: bb1: ; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, [[BB:%.*]] ], [ [[TMP2:%.*]], [[BB1]] ] ; CHECK-NEXT: [[TMP0:%.*]] = phi <2 x i32> [ zeroinitializer, [[BB]] ], [ [[TMP3:%.*]], [[BB1]] ] ; CHECK-NEXT: [[TMP1:%.*]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> poison, <32 x i32> ; CHECK-NEXT: [[TMP2]] = call i32 @llvm.vector.reduce.mul.v32i32(<32 x i32> [[TMP1]]) ; CHECK-NEXT: [[TMP3]] = shufflevector <2 x i32> [[TMP0]], <2 x i32> poison, <2 x i32> ; CHECK-NEXT: br label [[BB1]] ; bb: br label %bb1 bb1: %phi = phi i32 [ 0, %bb ], [ %mul33, %bb1 ] %phi2 = phi i32 [ 0, %bb ], [ %phi3, %bb1 ] %phi3 = phi i32 [ 0, %bb ], [ %phi2, %bb1 ] %mul = mul i32 %phi2, %phi2 %mul4 = mul i32 %phi3, %mul %mul5 = mul i32 %phi2, %mul4 %mul6 = mul i32 %phi3, %mul5 %mul7 = mul i32 %phi2, %mul6 %mul8 = mul i32 %phi3, %mul7 %mul9 = mul i32 %phi2, %mul8 %mul10 = mul i32 %phi3, %mul9 %mul11 = mul i32 %phi2, %mul10 %mul12 = mul i32 %phi3, %mul11 %mul13 = mul i32 %phi2, %mul12 %mul14 = mul i32 %phi3, %mul13 %mul15 = mul i32 %phi2, %mul14 %mul16 = mul i32 %phi3, %mul15 %mul17 = mul i32 %phi2, %mul16 %mul18 = mul i32 %phi3, %mul17 %mul19 = mul i32 %phi2, %mul18 %mul20 = mul i32 %phi3, %mul19 %mul21 = mul i32 %phi2, %mul20 %mul22 = mul i32 %phi3, %mul21 %mul23 = mul i32 %phi2, %mul22 %mul24 = mul i32 %phi3, %mul23 %mul25 = mul i32 %phi2, %mul24 %mul26 = mul i32 %phi3, %mul25 %mul27 = mul i32 %phi2, %mul26 %mul28 = mul i32 %phi3, %mul27 %mul29 = mul i32 %phi2, %mul28 %mul30 = mul i32 %phi3, %mul29 %mul31 = mul i32 %phi2, %mul30 %mul32 = mul i32 %phi3, %mul31 %mul33 = mul i32 %phi2, %mul32 br label %bb1 }