42 lines · plain
1; RUN: opt -S -passes=indvars < %s | FileCheck %s2 3; Check that SCEV does not assume sub nuw X Y == add nuw X, -Y4define void @f(ptr %loc) {5; CHECK-LABEL: @f6 entry:7 br label %loop8 9 loop:10 %idx = phi i32 [ 6, %entry ], [ %idx.dec, %loop ]11 store i32 %idx, ptr %loc12 %idx.dec = sub nuw i32 %idx, 113 %cond = icmp uge i32 %idx.dec, 514 br i1 %cond, label %loop, label %exit15; CHECK-NOT: br i1 true, label %loop, label %exit16 17 exit:18 ret void19}20 21declare void @use_i1(i1)22 23; Check that SCEV does not assume sub nsw X Y == add nsw X, -Y24define void @g(i32 %lim) {25; CHECK-LABEL: @g26 entry:27 br label %loop28 29 loop:30 %idx = phi i32 [ -1, %entry ], [ %idx.dec, %loop ]31 %t = icmp sgt i32 %idx, 032; CHECK-NOT: call void @use_i1(i1 false)33; CHECK: call void @use_i1(i1 %t)34 call void @use_i1(i1 %t)35 %idx.dec = sub nsw i32 %idx, -214748364836 %cond = icmp eq i32 %idx.dec, %lim37 br i1 %cond, label %loop, label %exit38 39 exit:40 ret void41}42