1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-26 04:32:44 +01:00
llvm-mirror/test/Transforms/IndVarSimplify
Sanjoy Das d42d2637e6 This patch teaches IndVarSimplify to add nuw and nsw to certain kinds
of operations that provably don't overflow. For example, we can prove
%civ.inc below does not sign-overflow. With this change,
IndVarSimplify changes %civ.inc to an add nsw.

  define i32 @foo(i32* %array, i32* %length_ptr, i32 %init) {
   entry:
    %length = load i32* %length_ptr, !range !0
    %len.sub.1 = sub i32 %length, 1
    %upper = icmp slt i32 %init, %len.sub.1
    br i1 %upper, label %loop, label %exit
  
   loop:
    %civ = phi i32 [ %init, %entry ], [ %civ.inc, %latch ]
    %civ.inc = add i32 %civ, 1
    %cmp = icmp slt i32 %civ.inc, %length
    br i1 %cmp, label %latch, label %break
  
   latch:
    store i32 0, i32* %array
    %check = icmp slt i32 %civ.inc, %len.sub.1
    br i1 %check, label %loop, label %break
  
   break:
    ret i32 %civ.inc
  
   exit:
    ret i32 42
  }

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

llvm-svn: 225282
2015-01-06 19:02:56 +00:00
..
NVPTX Disable indvar widening if arithmetics on the wider type are more expensive 2014-11-12 18:09:15 +00:00
2002-09-09-PointerIndVar.ll
2003-04-16-ExprAnalysis.ll
2003-09-23-NotAtTop.ll
2003-12-10-RemoveInstrCrash.ll
2003-12-15-Crash.ll
2004-03-10-PHIInsertionBug.ll
2004-04-05-InvokeCastCrash.ll
2004-04-07-ScalarEvolutionCrash.ll
2005-02-11-InvokeCrash.ll
2005-02-17-TruncateExprCrash.ll
2005-02-26-ExitValueCompute.ll
2005-06-15-InstMoveCrash.ll
2005-11-18-Crash.ll
2006-03-31-NegativeStride.ll
2006-06-16-Indvar-LCSSA-Crash.ll
2006-09-20-LFTR-Crash.ll
2006-12-10-BitCast.ll
2007-01-06-TripCount.ll
2007-06-06-DeleteDanglesPtr.ll
2007-11-23-BitcastCrash.ll
2008-06-15-SCEVExpanderBug.ll
2008-09-02-IVType.ll
2008-10-03-CouldNotCompute.ll
2008-11-25-APFloatAssert.ll
2009-04-14-shorten_iv_vars.ll
2009-04-15-shorten-iv-vars-2.ll
2009-04-22-IndvarCrash.ll
2009-04-27-Floating.ll
2009-05-24-useafterfree.ll
2011-09-10-widen-nsw.ll This patch teaches IndVarSimplify to add nuw and nsw to certain kinds 2015-01-06 19:02:56 +00:00
2011-09-19-vectoriv.ll
2011-09-27-hoistsext.ll
2011-10-27-lftrnull.ll IndVarSimplify: Don't let LFTR compare against a poison value 2014-09-03 23:03:18 +00:00
2011-11-01-lftrptr.ll
2011-11-15-multiexit.ll
2011-11-17-selfphi.ll
2012-07-17-lftr-undef.ll
2012-10-19-congruent-constant.ll
2014-06-21-congruent-constant.ll Add a description to the test from r211433 explaining why it's written that way. 2014-06-22 12:22:04 +00:00
ada-loops.ll
ashr-tripcount.ll
avoid-i0.ll
backedge-on-min-max.ll Teach ScalarEvolution to exploit min and max expressions when proving 2014-12-15 22:50:15 +00:00
casted-argument.ll
crash.ll
dangling-use.ll
divide-pointer.ll
dont-recompute.ll
elim-extend.ll
eliminate-comparison.ll
eliminate-max.ll
eliminate-rem.ll
exit_value_tests.ll
floating-point-iv.ll
indirectbr.ll
interesting-invoke-use.ll
iterationCount_zext_or_trunc.ll
iv-fold.ll
iv-sext.ll
iv-widen.ll
iv-zext.ll
lcssa-preservation.ll
lftr_simple.ll
lftr-address-space-pointers.ll IndVarSimplify: Don't let LFTR compare against a poison value 2014-09-03 23:03:18 +00:00
lftr-extend-const.ll IndVarSimplify: Allow LFTR to fire more often 2014-11-18 02:20:58 +00:00
lftr-other-uses.ll
lftr-promote.ll
lftr-reuse.ll IndVarSimplify: Don't let LFTR compare against a poison value 2014-09-03 23:03:18 +00:00
lftr-zext.ll
loop_evaluate7.ll
loop_evaluate8.ll
loop_evaluate9.ll
loop_evaluate10.ll
loop_evaluate11.ll
loop_evaluate_1.ll
loop_evaluate_2.ll
loop_evaluate_3.ll
loop_evaluate_4.ll
loop_evaluate_5.ll
loop_evaluate_6.ll
masked-iv.ll
no-iv-rewrite.ll [IndVarSimplify] Widen loop compare instructions. 2014-09-17 14:10:33 +00:00
overflowcheck.ll
phi-uses-value-multiple-times.ll
polynomial-expand.ll
pr18223.ll
pr20680.ll IndVarSimplify: Don't let LFTR compare against a poison value 2014-09-03 23:03:18 +00:00
preserve-signed-wrap.ll
promote-iv-to-eliminate-casts.ll
sharpen-range.ll IR: Make metadata typeless in assembly 2014-12-15 19:07:53 +00:00
shrunk-constant.ll
signed-trip-count.ll
single-element-range.ll
sink-alloca.ll
sink-trapping.ll
strengthen-overflow.ll This patch teaches IndVarSimplify to add nuw and nsw to certain kinds 2015-01-06 19:02:56 +00:00
tripcount_compute.ll
tripcount_infinite.ll
udiv-invariant-but-traps.ll
udiv.ll
uglygep.ll
ult-sub-to-eq.ll
use-range-metadata.ll IR: Make metadata typeless in assembly 2014-12-15 19:07:53 +00:00
variable-stride-ivs-0.ll
variable-stride-ivs-1.ll
verify-scev.ll [IndVarSimplify] Widen loop compare instructions. 2014-09-17 14:10:33 +00:00
widen-loop-comp.ll Teach ScalarEvolution to sharpen range information. 2014-11-13 00:00:58 +00:00
widen-nsw.ll