diff options
Diffstat (limited to 'test/Analysis/ScalarEvolution/scev-expander-incorrect-nowrap.ll')
-rw-r--r-- | test/Analysis/ScalarEvolution/scev-expander-incorrect-nowrap.ll | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/Analysis/ScalarEvolution/scev-expander-incorrect-nowrap.ll b/test/Analysis/ScalarEvolution/scev-expander-incorrect-nowrap.ll new file mode 100644 index 0000000..012cad7 --- /dev/null +++ b/test/Analysis/ScalarEvolution/scev-expander-incorrect-nowrap.ll @@ -0,0 +1,30 @@ +; RUN: opt -indvars -S < %s | FileCheck %s + +declare void @use(i32) +declare void @use.i8(i8) + +define void @f() { +; CHECK-LABEL: @f + entry: + br label %loop + + loop: +; The only use for idx.mirror is to induce an nuw for %idx. It does +; not induce an nuw for %idx.inc + %idx.mirror = phi i8 [ -6, %entry ], [ %idx.mirror.inc, %loop ] + %idx = phi i8 [ -5, %entry ], [ %idx.inc, %loop ] + + %idx.sext = sext i8 %idx to i32 + call void @use(i32 %idx.sext) + + %idx.mirror.inc = add nuw i8 %idx.mirror, 1 + call void @use.i8(i8 %idx.mirror.inc) + + %idx.inc = add i8 %idx, 1 +; CHECK-NOT: %indvars.iv.next = add nuw nsw i32 %indvars.iv, 1 + %cmp = icmp ugt i8 %idx.inc, 0 + br i1 %cmp, label %loop, label %exit + + exit: + ret void +} |