1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-20 19:42:54 +02:00
llvm-mirror/test/Transforms/IndVarSimplify/exit_value_test3.ll
Wei Mi e3bab282ea Enable exitValue rewrite only when the cost of expansion is low.
The patch evaluates the expansion cost of exitValue in indVarSimplify pass, and only does the rewriting when the expansion cost is low or loop can be deleted with the rewriting. It provides an option "-replexitval=" to control the default aggressiveness of the exitvalue rewriting. It also fixes some missing cases in SCEVExpander::isHighCostExpansionHelper to enhance the evaluation of SCEV expansion cost.

Differential Revision: http://reviews.llvm.org/D9800

llvm-svn: 238507
2015-05-28 21:49:07 +00:00

25 lines
830 B
LLVM

; RUN: opt < %s -indvars -loop-deletion -S |FileCheck %s
; Check IndVarSimplify should replace exit value even if the expansion cost
; is high because the loop can be deleted after the exit value rewrite.
;
; CHECK-LABEL: @_Z3fooPKcjj(
; CHECK: udiv
; CHECK: [[LABEL:^[a-zA-Z0-9_.]+]]:
; CHECK-NOT: br {{.*}} [[LABEL]]
define i32 @_Z3fooPKcjj(i8* nocapture readnone %s, i32 %len, i32 %c) #0 {
entry:
br label %while.cond
while.cond: ; preds = %while.cond, %entry
%klen.0 = phi i32 [ %len, %entry ], [ %sub, %while.cond ]
%cmp = icmp ugt i32 %klen.0, 11
%sub = add i32 %klen.0, -12
br i1 %cmp, label %while.cond, label %while.end
while.end: ; preds = %while.cond
%klen.0.lcssa = phi i32 [ %klen.0, %while.cond ]
ret i32 %klen.0.lcssa
}