| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -correlated-propagation -S %s | FileCheck %s |
| |
| target triple = "x86_64-apple-darwin17.4.0" |
| |
| define void @patatino() { |
| ; CHECK-LABEL: @patatino( |
| ; CHECK-NEXT: br i1 undef, label [[BB3:%.*]], label [[BB4:%.*]] |
| ; CHECK: bb3: |
| ; CHECK-NEXT: br label [[BB3]] |
| ; CHECK: bb4: |
| ; CHECK-NEXT: br i1 undef, label [[BB40:%.*]], label [[BB22:%.*]] |
| ; CHECK: bb7: |
| ; CHECK-NEXT: br label [[BB14:%.*]] |
| ; CHECK: bb12: |
| ; CHECK-NEXT: br label [[BB14]] |
| ; CHECK: bb14: |
| ; CHECK-NEXT: [[TMP19:%.*]] = icmp sgt i32 undef, undef |
| ; CHECK-NEXT: [[TMP20:%.*]] = select i1 [[TMP19]], i64 [[TMP20]], i64 0 |
| ; CHECK-NEXT: br i1 undef, label [[BB40]], label [[BB7:%.*]] |
| ; CHECK: bb22: |
| ; CHECK-NEXT: br label [[BB24:%.*]] |
| ; CHECK: bb24: |
| ; CHECK-NEXT: br label [[BB32:%.*]] |
| ; CHECK: bb32: |
| ; CHECK-NEXT: br i1 undef, label [[BB40]], label [[BB24]] |
| ; CHECK: bb40: |
| ; CHECK-NEXT: [[TMP41:%.*]] = phi i64 [ 4, [[BB4]] ], [ [[TMP20]], [[BB14]] ], [ undef, [[BB32]] ] |
| ; CHECK-NEXT: ret void |
| ; |
| br i1 undef, label %bb3, label %bb4 |
| |
| bb3: |
| br label %bb3 |
| |
| bb4: |
| br i1 undef, label %bb40, label %bb22 |
| |
| bb7: |
| br label %bb14 |
| |
| bb12: |
| br label %bb14 |
| |
| ; This block is unreachable. Due to the non-standard definition of |
| ; dominance in LLVM where uses in unreachable blocks are dominated |
| ; by anything, it contains an instruction of the form |
| ; %def = OP %def, %something |
| bb14: |
| %tmp19 = icmp sgt i32 undef, undef |
| %tmp20 = select i1 %tmp19, i64 %tmp20, i64 0 |
| br i1 undef, label %bb40, label %bb7 |
| |
| bb22: |
| br label %bb24 |
| |
| bb24: |
| br label %bb32 |
| |
| bb32: |
| br i1 undef, label %bb40, label %bb24 |
| |
| bb40: |
| %tmp41 = phi i64 [ 4, %bb4 ], [ %tmp20, %bb14 ], [ undef, %bb32 ] |
| ret void |
| } |