; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; RUN: opt -passes=slp-vectorizer -S -slp-threshold=-99999 -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s

define i32 @test() {
; CHECK-LABEL: define i32 @test() {
; CHECK-NEXT:  [[BB:.*]]:
; CHECK-NEXT:    br label %[[BB1:.*]]
; CHECK:       [[BB1]]:
; CHECK-NEXT:    [[TMP0:%.*]] = phi <4 x i32> [ [[TMP16:%.*]], %[[BB24:.*]] ], [ <i32 poison, i32 poison, i32 0, i32 0>, %[[BB]] ]
; CHECK-NEXT:    [[TMP1:%.*]] = phi <4 x i32> [ [[TMP13:%.*]], %[[BB24]] ], [ <i32 poison, i32 poison, i32 0, i32 0>, %[[BB]] ]
; CHECK-NEXT:    br i1 false, label %[[BB4:.*]], label %[[BB11:.*]]
; CHECK:       [[BB4]]:
; CHECK-NEXT:    [[TMP2:%.*]] = phi <2 x double> [ zeroinitializer, %[[BB1]] ]
; CHECK-NEXT:    [[TMP3:%.*]] = phi <4 x i32> [ [[TMP0]], %[[BB1]] ]
; CHECK-NEXT:    br label %[[BB19:.*]]
; CHECK:       [[BB11]]:
; CHECK-NEXT:    br i1 false, label %[[BB12:.*]], label %[[BB16:.*]]
; CHECK:       [[BB12]]:
; CHECK-NEXT:    [[TMP4:%.*]] = or <4 x i32> [[TMP1]], <i32 poison, i32 poison, i32 0, i32 0>
; CHECK-NEXT:    br label %[[BB13:.*]]
; CHECK:       [[BB13]]:
; CHECK-NEXT:    [[TMP5:%.*]] = phi <4 x i32> [ [[TMP4]], %[[BB12]] ]
; CHECK-NEXT:    br label %[[BB16]]
; CHECK:       [[BB16]]:
; CHECK-NEXT:    [[TMP6:%.*]] = phi <4 x i32> [ <i32 poison, i32 poison, i32 0, i32 0>, %[[BB11]] ], [ [[TMP5]], %[[BB13]] ]
; CHECK-NEXT:    br label %[[BB19]]
; CHECK:       [[BB19]]:
; CHECK-NEXT:    [[PHI22:%.*]] = phi double [ 0.000000e+00, %[[BB4]] ], [ 0.000000e+00, %[[BB16]] ]
; CHECK-NEXT:    [[TMP7:%.*]] = phi <4 x i32> [ <i32 poison, i32 poison, i32 0, i32 0>, %[[BB4]] ], [ [[TMP6]], %[[BB16]] ]
; CHECK-NEXT:    [[TMP8:%.*]] = or <4 x i32> [[TMP7]], <i32 poison, i32 poison, i32 0, i32 0>
; CHECK-NEXT:    br label %[[BB24]]
; CHECK:       [[BB24]]:
; CHECK-NEXT:    [[TMP9:%.*]] = lshr <4 x i32> [[TMP8]], <i32 poison, i32 poison, i32 0, i32 0>
; CHECK-NEXT:    [[TMP10:%.*]] = and <4 x i32> [[TMP9]], <i32 poison, i32 poison, i32 -1, i32 0>
; CHECK-NEXT:    [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> <i32 poison, i32 poison, i32 0, i32 poison>, <4 x i32> <i32 0, i32 1, i32 6, i32 3>
; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> <i32 poison, i32 poison, i32 0, i32 poison>, <4 x i32> <i32 0, i32 1, i32 6, i32 3>
; CHECK-NEXT:    [[TMP13]] = lshr <4 x i32> [[TMP11]], [[TMP12]]
; CHECK-NEXT:    [[TMP14:%.*]] = lshr <4 x i32> [[TMP11]], [[TMP10]]
; CHECK-NEXT:    [[TMP15:%.*]] = or <4 x i32> [[TMP11]], [[TMP10]]
; CHECK-NEXT:    [[TMP16]] = shufflevector <4 x i32> [[TMP14]], <4 x i32> [[TMP15]], <4 x i32> <i32 poison, i32 poison, i32 6, i32 3>
; CHECK-NEXT:    br label %[[BB1]]
;
bb:
  br label %bb1

bb1:
  %phi = phi i32 [ %lshr25, %bb24 ], [ 0, %bb ]
  %phi2 = phi i32 [ %or26, %bb24 ], [ 0, %bb ]
  %phi3 = phi i32 [ 0, %bb24 ], [ 0, %bb ]
  br i1 false, label %bb4, label %bb11

bb4:
  %phi6 = phi i32 [ poison, %bb1 ]
  %phi7 = phi i32 [ poison, %bb1 ]
  %phi9 = phi i32 [ %phi2, %bb1 ]
  %phi10 = phi i32 [ %phi, %bb1 ]
  %0 = phi <2 x double> [ zeroinitializer, %bb1 ]
  br label %bb19

bb11:
  br i1 false, label %bb12, label %bb16

bb12:
  %or = or i32 0, %phi3
  br label %bb13

bb13:
  %phi14 = phi i32 [ %phi, %bb12 ]
  %phi15 = phi i32 [ %or, %bb12 ]
  br label %bb16

bb16:
  %phi17 = phi i32 [ 0, %bb11 ], [ %phi14, %bb13 ]
  %phi18 = phi i32 [ 0, %bb11 ], [ %phi15, %bb13 ]
  br label %bb19

bb19:
  %phi20 = phi i32 [ 0, %bb4 ], [ %phi17, %bb16 ]
  %phi21 = phi i32 [ 0, %bb4 ], [ %phi18, %bb16 ]
  %phi22 = phi double [ 0.000000e+00, %bb4 ], [ 0.000000e+00, %bb16 ]
  %or23 = or i32 %phi21, 0
  br label %bb24

bb24:
  %lshr = lshr i32 %phi20, 0
  %and = and i32 %lshr, 0
  %lshr25 = lshr i32 %phi, %and
  %or26 = or i32 0, %or23
  br label %bb1
}

