31 lines · plain
1; RUN: opt -passes=indvars -S < %s | FileCheck %s2 3declare void @use(i32)4declare void @use.i8(i8)5 6define void @f() {7; CHECK-LABEL: @f8 entry:9 br label %loop10 11 loop:12; The only use for idx.mirror is to induce an nuw for %idx. It does13; not induce an nuw for %idx.inc14 %idx.mirror = phi i8 [ -6, %entry ], [ %idx.mirror.inc, %loop ]15 %idx = phi i8 [ -5, %entry ], [ %idx.inc, %loop ]16 17 %idx.sext = sext i8 %idx to i3218 call void @use(i32 %idx.sext)19 20 %idx.mirror.inc = add nuw i8 %idx.mirror, 121 call void @use.i8(i8 %idx.mirror.inc)22 23 %idx.inc = add i8 %idx, 124; CHECK-NOT: %indvars.iv.next = add nuw nsw i32 %indvars.iv, 125 %cmp = icmp ugt i8 %idx.inc, 026 br i1 %cmp, label %loop, label %exit27 28 exit:29 ret void30}31