mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
7b29c5b2d5
After r262438 we can have provably positive NSW SCEV expressions whose zero extensions cannot be simplified (since r262438 makes SCEV better at computing constant ranges). This means demoting sexts of positive add recurrences eagerly can result in an unsimplified zero extension where we could have had a simplified sign extension. This change fixes the issue by teaching SCEV to demote sext of a positive SCEV expression to a zext only if the sext could not be simplified. llvm-svn: 262638
24 lines
675 B
LLVM
24 lines
675 B
LLVM
; RUN: opt -analyze -scalar-evolution < %s | FileCheck %s
|
|
|
|
define void @f(i1 %c) {
|
|
; CHECK-LABEL: Classifying expressions for: @f
|
|
entry:
|
|
%start = select i1 %c, i32 100, i32 0
|
|
%step = select i1 %c, i32 -1, i32 1
|
|
br label %loop
|
|
|
|
loop:
|
|
%iv = phi i32 [ %start, %entry ], [ %iv.dec, %loop ]
|
|
%iv.tc = phi i32 [ 0, %entry ], [ %iv.tc.inc, %loop ]
|
|
%iv.tc.inc = add i32 %iv.tc, 1
|
|
%iv.dec = add nsw i32 %iv, %step
|
|
%iv.sext = sext i32 %iv to i64
|
|
; CHECK: %iv.sext = sext i32 %iv to i64
|
|
; CHECK-NEXT: --> {(sext i32 %start to i64),+,(sext i32 %step to i64)}<nsw><%loop>
|
|
%be = icmp ne i32 %iv.tc.inc, 100
|
|
br i1 %be, label %loop, label %leave
|
|
|
|
leave:
|
|
ret void
|
|
}
|