mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 03:33:20 +01:00
20e33533a3
Summary: This approach has two major advantages over the existing one: 1. We don't need to extend bitwidth in our computations. Extending bitwidth is a big issue for compile time as we often end up working with APInts wider than 64bit, which is a slow case for APInt. 2. When we zero extend a wrapped range, we lose some information (we replace the range with [0, 1 << src bit width)). Thus, avoiding such extensions better preserves information. Correctness testing: I ran 'ninja check' with assertions that the new implementation of getRangeForAffineAR gives the same results as the old one (this functionality is not present in this patch). There were several failures - I inspected them manually and found out that they all are caused by the fact that we're returning more accurate results now (see bullet (2) above). Without such assertions 'ninja check' works just fine, as well as SPEC2006. Compile time testing: CTMark/Os: - mafft/pairlocalalign -16.98% - tramp3d-v4/tramp3d-v4 -12.72% - lencod/lencod -11.51% - Bullet/bullet -4.36% - ClamAV/clamscan -3.66% - 7zip/7zip-benchmark -3.19% - sqlite3/sqlite3 -2.95% - SPASS/SPASS -2.74% - Average -5.81% Performance testing: The changes are expected to be neutral for runtime performance. Reviewers: sanjoy, atrick, pete Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D30477 llvm-svn: 297992
28 lines
806 B
LLVM
28 lines
806 B
LLVM
; RUN: opt < %s -analyze -scalar-evolution | FileCheck %s
|
|
; PR4569
|
|
|
|
define i16 @main() nounwind {
|
|
entry:
|
|
br label %bb.i
|
|
|
|
bb.i: ; preds = %bb1.i, %bb.nph
|
|
; We should be able to find the range for this expression.
|
|
; CHECK: %l_95.0.i1 = phi i8
|
|
; CHECK: --> {0,+,-1}<%bb.i> U: [2,1) S: [2,1){{ *}}Exits: 2
|
|
|
|
%l_95.0.i1 = phi i8 [ %tmp1, %bb.i ], [ 0, %entry ]
|
|
|
|
; This cast shouldn't be folded into the addrec.
|
|
; CHECK: %tmp = zext i8 %l_95.0.i1 to i16
|
|
; CHECK: --> (zext i8 {0,+,-1}<nw><%bb.i> to i16){{ U: [^ ]+ S: [^ ]+}}{{ *}}Exits: 2
|
|
|
|
%tmp = zext i8 %l_95.0.i1 to i16
|
|
|
|
%tmp1 = add i8 %l_95.0.i1, -1
|
|
%phitmp = icmp eq i8 %tmp1, 1
|
|
br i1 %phitmp, label %bb1.i.func_36.exit_crit_edge, label %bb.i
|
|
|
|
bb1.i.func_36.exit_crit_edge:
|
|
ret i16 %tmp
|
|
}
|