mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-26 04:32:44 +01:00
c4958f4b06
A value from reachable block may come to a Phi node as its input from unreachable block. This may confuse matchSimpleRecurrence which has no access to DomTree and can falsely recognize something as a recurrency because of this effect, as the attached test shows. Patch `ae7b1e` deals with half of this problem, but it only accounts from the case when an unreachable instruction comes to Phi as an input. This patch provides a generalization by checking that no Phi block's predecessor is unreachable (no matter what the input is). Differential Revision: https://reviews.llvm.org/D99929 Reviewed By: reames
25 lines
917 B
LLVM
25 lines
917 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py
|
|
; RUN: opt < %s -analyze -enable-new-pm=0 -scalar-evolution | FileCheck %s
|
|
; RUN: opt < %s -disable-output "-passes=print<scalar-evolution>" 2>&1 | FileCheck %s
|
|
|
|
define void @test() {
|
|
; CHECK-LABEL: 'test'
|
|
; CHECK-NEXT: Classifying expressions for: @test
|
|
; CHECK-NEXT: %tmp = phi i32 [ 2, %bb ], [ %tmp2, %bb3 ]
|
|
; CHECK-NEXT: --> %tmp U: [1,-2147483648) S: [0,-2147483648)
|
|
; CHECK-NEXT: %tmp2 = add nuw nsw i32 %tmp, 1
|
|
; CHECK-NEXT: --> (1 + %tmp)<nuw> U: [1,-2147483647) S: [1,-2147483647)
|
|
; CHECK-NEXT: Determining loop execution counts for: @test
|
|
;
|
|
bb:
|
|
br label %bb1
|
|
|
|
bb1: ; preds = %bb3, %bb
|
|
%tmp = phi i32 [ 2, %bb ], [ %tmp2, %bb3 ]
|
|
%tmp2 = add nuw nsw i32 %tmp, 1
|
|
ret void
|
|
|
|
bb3: ; No predecessors!
|
|
br label %bb1
|
|
}
|