llvm/llvm/test/Transforms/SLPVectorizer/X86/phi-reordered-reshuffled.ll

; 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> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
; 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> <i32 1, i32 0>
; 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
}