1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00
Davide Italiano 7ee35fc7b5 [CVP] Don't Replace incoming values from unreachable blocks with undef.
This pretty much reverts r322006, except that we keep the test,
because we work around the issue exposed in a different way (a
recursion limit in value tracking). There's still probably some
sequence that exposes this problem, and the proper way to fix that
for somebody who has time is outlined in the code review.

llvm-svn: 323630
2018-01-29 05:59:55 +00:00

67 lines
1.8 KiB
LLVM

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