blob: 5e85ecd610ebd9a34b049bed57ff850a0f8458e9 [file]
; 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> [ [[TMP17:%.*]], %[[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 0, i32 -1>
; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> <i32 poison, i32 poison, i32 poison, i32 0>, <4 x i32> <i32 0, i32 1, i32 2, i32 7>
; 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 2, i32 7>
; CHECK-NEXT: [[TMP17]] = shufflevector <4 x i32> [[TMP16]], <4 x i32> <i32 poison, i32 poison, i32 poison, i32 0>, <4 x i32> <i32 poison, i32 poison, i32 2, i32 7>
; 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
}