[PATCH] D38494: [ScalarEvolution] Handling for ICmp occuring in the evolution chain.
Jatin Bhateja via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Mon Oct 16 19:33:07 PDT 2017
jbhateja added a comment.
In https://reviews.llvm.org/D38494#888590, @sanjoy wrote:
> With this IR:
>
> define void @f() {
> entry:
> br label %loop
>
> loop:
> %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
> %iv.inc = add i32 %iv, 1
> %cmp = icmp ne i32 %iv.inc, 10
> %cmp.zext = zext i1 %cmp to i32
> br i1 %cmp, label %loop, label %leave
>
> leave:
> ret void
> }
>
>
> and `opt -analyze -scalar-evolution` , on master:
>
> Printing analysis 'Scalar Evolution Analysis' for function 'f':
> Classifying expressions for: @f
> %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
> --> {0,+,1}<%loop> U: [0,10) S: [0,10) Exits: 9 LoopDispositions: { %loop: Computable }
> %iv.inc = add i32 %iv, 1
> --> {1,+,1}<%loop> U: [1,11) S: [1,11) Exits: 10 LoopDispositions: { %loop: Computable }
> %cmp.zext = zext i1 %cmp to i32
> --> (zext i1 %cmp to i32) U: [0,2) S: [0,2) Exits: 0 LoopDispositions: { %loop: Variant }
> Determining loop execution counts for: @f
> Loop %loop: backedge-taken count is 9
> Loop %loop: max backedge-taken count is 9
> Loop %loop: Predicated backedge-taken count is 9
> Predicates:
>
> Loop %loop: Trip multiple is 10
>
>
> and with your patch:
>
> Printing analysis 'Scalar Evolution Analysis' for function 'f':
> Classifying expressions for: @f
> %iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
> --> {0,+,1}<%loop> U: [0,10) S: [0,10) Exits: 9 LoopDispositions: { %loop: Computable }
> %iv.inc = add i32 %iv, 1
> --> {1,+,1}<%loop> U: [1,11) S: [1,11) Exits: 10 LoopDispositions: { %loop: Computable }
> %cmp.zext = zext i1 %cmp to i32
> --> 1 U: [1,2) S: [1,2) Exits: 1 LoopDispositions: { %loop: Invariant }
> Determining loop execution counts for: @f
> Loop %loop: backedge-taken count is 9
> Loop %loop: max backedge-taken count is 9
> Loop %loop: Predicated backedge-taken count is 9
> Predicates:
>
> Loop %loop: Trip multiple is 10
>
>
> Note that the SCEV for `%cmp.zext` is different. I'm not sure how you got a
> different answer on your end, since this should basically be the same as the IR
> from Hal's example. Perhaps in the example you tried the icmp feeding in to the
> latch was a different llvm::Instruction than the icmp feeding into the zext? If
> so, that's a missing-CSE bug.
@sanjoy , with the latest revision changes following is the result of scalar evolution analysis for above example.
PROMPT>opt -analyze -scalar-evolution sdas.ll
Printing analysis 'Scalar Evolution Analysis' for function 'f':
Classifying expressions for: @f
%iv = phi i32 [ 0, %entry ], [ %iv.inc, %loop ]
--> {0,+,1}<%loop> U: [0,10) S: [0,10) Exits: 9 LoopDispositions: { %loop: Computable }
%iv.inc = add i32 %iv, 1
--> {1,+,1}<%loop> U: [1,11) S: [1,11) Exits: 10 LoopDispositions: { %loop: Computable }
%cmp.zext = zext i1 %cmp to i32
--> (zext i1 %cmp to i32) U: [0,2) S: [0,2) Exits: 0 LoopDispositions: { %loop: Variant }
Determining loop execution counts for: @f
Loop %loop: backedge-taken count is 9
Loop %loop: max backedge-taken count is 9
Loop %loop: Predicated backedge-taken count is 9
Predicates:
Loop %loop: Trip multiple is 10
https://reviews.llvm.org/D38494
More information about the llvm-commits
mailing list