| ; 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 |
| } |
| |