mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-17 06:33:21 +00:00
a1af757e0a
compute an upper-bound value for the trip count, in addition to the actual trip count. Use this to allow getZeroExtendExpr and getSignExtendExpr to fold casts in more cases. This may eventually morph into a more general value-range analysis capability; there are certainly plenty of places where more complete value-range information would allow more folding. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@70509 91177308-0d34-0410-b5e6-96231b3b80d8
31 lines
938 B
LLVM
31 lines
938 B
LLVM
; RUN: llvm-as < %s | opt -analyze -scalar-evolution |& grep {/u 3}
|
|
|
|
define i32 @f(i32 %x) nounwind readnone {
|
|
entry:
|
|
%0 = icmp ugt i32 %x, 4 ; <i1> [#uses=1]
|
|
br i1 %0, label %bb.nph, label %bb2
|
|
|
|
bb.nph: ; preds = %entry
|
|
br label %bb
|
|
|
|
bb: ; preds = %bb.nph, %bb1
|
|
%indvar = phi i32 [ 0, %bb.nph ], [ %indvar.next, %bb1 ] ; <i32> [#uses=2]
|
|
%tmp = mul i32 %indvar, -3 ; <i32> [#uses=1]
|
|
%x_addr.04 = add i32 %tmp, %x ; <i32> [#uses=1]
|
|
%1 = add i32 %x_addr.04, -3 ; <i32> [#uses=2]
|
|
br label %bb1
|
|
|
|
bb1: ; preds = %bb
|
|
%2 = icmp ugt i32 %1, 4 ; <i1> [#uses=1]
|
|
%indvar.next = add i32 %indvar, 1 ; <i32> [#uses=1]
|
|
br i1 %2, label %bb, label %bb1.bb2_crit_edge
|
|
|
|
bb1.bb2_crit_edge: ; preds = %bb1
|
|
%.lcssa = phi i32 [ %1, %bb1 ] ; <i32> [#uses=1]
|
|
br label %bb2
|
|
|
|
bb2: ; preds = %bb1.bb2_crit_edge, %entry
|
|
%x_addr.0.lcssa = phi i32 [ %.lcssa, %bb1.bb2_crit_edge ], [ %x, %entry ] ; <i32> [#uses=1]
|
|
ret i32 %x_addr.0.lcssa
|
|
}
|