| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6 |
| ; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=i686-pc-windows-msvc -mcpu=pentium4 | FileCheck %s |
| |
| define i32 @test() { |
| ; CHECK-LABEL: define i32 @test( |
| ; CHECK-SAME: ) #[[ATTR0:[0-9]+]] { |
| ; CHECK-NEXT: [[BBL:.*]]: |
| ; CHECK-NEXT: br label %[[BBL1:.*]] |
| ; CHECK: [[BBL1]]: |
| ; CHECK-NEXT: [[PHI:%.*]] = phi i32 [ 0, %[[BBL]] ] |
| ; CHECK-NEXT: [[PHI2:%.*]] = phi i32 [ 0, %[[BBL]] ] |
| ; CHECK-NEXT: [[PHI3:%.*]] = phi i32 [ 0, %[[BBL]] ] |
| ; CHECK-NEXT: [[PHI4:%.*]] = phi i32 [ 0, %[[BBL]] ] |
| ; CHECK-NEXT: [[PHI5:%.*]] = phi i32 [ 0, %[[BBL]] ] |
| ; CHECK-NEXT: [[PHI6:%.*]] = phi i32 [ 0, %[[BBL]] ] |
| ; CHECK-NEXT: br i1 false, label %[[BBL9:.*]], label %[[BBL7:.*]] |
| ; CHECK: [[BBL7]]: |
| ; CHECK-NEXT: [[CALL:%.*]] = tail call i32 @llvm.smin.i32(i32 0, i32 0) |
| ; CHECK-NEXT: [[CALL8:%.*]] = tail call i32 @llvm.smax.i32(i32 0, i32 0) |
| ; CHECK-NEXT: br i1 false, label %[[BBL12:.*]], label %[[BBL13:.*]] |
| ; CHECK: [[BBL9]]: |
| ; CHECK-NEXT: br label %[[BBL13]] |
| ; CHECK: [[BBL12]]: |
| ; CHECK-NEXT: br label %[[BBL13]] |
| ; CHECK: [[BBL13]]: |
| ; CHECK-NEXT: [[PHI14:%.*]] = phi i32 [ 0, %[[BBL9]] ], [ [[PHI]], %[[BBL12]] ], [ 0, %[[BBL7]] ] |
| ; CHECK-NEXT: [[PHI15:%.*]] = phi i32 [ 0, %[[BBL9]] ], [ [[PHI2]], %[[BBL12]] ], [ 0, %[[BBL7]] ] |
| ; CHECK-NEXT: [[PHI16:%.*]] = phi i32 [ 0, %[[BBL9]] ], [ [[CALL8]], %[[BBL12]] ], [ 0, %[[BBL7]] ] |
| ; CHECK-NEXT: [[PHI17:%.*]] = phi i32 [ 0, %[[BBL9]] ], [ [[CALL]], %[[BBL12]] ], [ 0, %[[BBL7]] ] |
| ; CHECK-NEXT: [[PHI18:%.*]] = phi i32 [ [[PHI3]], %[[BBL9]] ], [ [[PHI3]], %[[BBL12]] ], [ 0, %[[BBL7]] ] |
| ; CHECK-NEXT: [[PHI19:%.*]] = phi i32 [ [[PHI4]], %[[BBL9]] ], [ [[PHI4]], %[[BBL12]] ], [ 0, %[[BBL7]] ] |
| ; CHECK-NEXT: [[PHI20:%.*]] = phi i32 [ 0, %[[BBL9]] ], [ [[PHI5]], %[[BBL12]] ], [ 0, %[[BBL7]] ] |
| ; CHECK-NEXT: [[PHI21:%.*]] = phi i32 [ 0, %[[BBL9]] ], [ [[PHI6]], %[[BBL12]] ], [ [[PHI6]], %[[BBL7]] ] |
| ; CHECK-NEXT: ret i32 [[PHI21]] |
| ; |
| bbl: |
| br label %bbl1 |
| |
| bbl1: ; preds = %bbl |
| %phi = phi i32 [ 0, %bbl ] |
| %phi2 = phi i32 [ 0, %bbl ] |
| %phi3 = phi i32 [ 0, %bbl ] |
| %phi4 = phi i32 [ 0, %bbl ] |
| %phi5 = phi i32 [ 0, %bbl ] |
| %phi6 = phi i32 [ 0, %bbl ] |
| br i1 false, label %bbl9, label %bbl7 |
| |
| bbl7: ; preds = %bbl1 |
| %call = tail call i32 @llvm.smin.i32(i32 0, i32 0) |
| %call8 = tail call i32 @llvm.smax.i32(i32 0, i32 0) |
| br i1 false, label %bbl12, label %bbl13 |
| |
| bbl9: ; preds = %bbl1 |
| %call10 = tail call i32 @llvm.smin.i32(i32 0, i32 0) |
| %call11 = tail call i32 @llvm.smax.i32(i32 0, i32 0) |
| br label %bbl13 |
| |
| bbl12: ; preds = %bbl7 |
| br label %bbl13 |
| |
| bbl13: ; preds = %bbl12, %bbl9, %bbl7 |
| %phi14 = phi i32 [ %call11, %bbl9 ], [ %phi, %bbl12 ], [ 0, %bbl7 ] |
| %phi15 = phi i32 [ %call10, %bbl9 ], [ %phi2, %bbl12 ], [ 0, %bbl7 ] |
| %phi16 = phi i32 [ 0, %bbl9 ], [ %call8, %bbl12 ], [ 0, %bbl7 ] |
| %phi17 = phi i32 [ 0, %bbl9 ], [ %call, %bbl12 ], [ 0, %bbl7 ] |
| %phi18 = phi i32 [ %phi3, %bbl9 ], [ %phi3, %bbl12 ], [ 0, %bbl7 ] |
| %phi19 = phi i32 [ %phi4, %bbl9 ], [ %phi4, %bbl12 ], [ 0, %bbl7 ] |
| %phi20 = phi i32 [ %call11, %bbl9 ], [ %phi5, %bbl12 ], [ 0, %bbl7 ] |
| %phi21 = phi i32 [ 0, %bbl9 ], [ %phi6, %bbl12 ], [ %phi6, %bbl7 ] |
| ret i32 %phi21 |
| } |
| |
| declare i32 @llvm.smax.i32(i32, i32) |
| declare i32 @llvm.smin.i32(i32, i32) |