1; These tests have an infinite trip count. We obviously shouldn't remove the 2; loops! :) 3; 4; RUN: opt < %s -indvars -adce -simplifycfg -S | FileCheck %s 5 6;; test for (i = 1; i != 100; i += 2) 7define i32 @infinite_linear() { 8; CHECK-LABEL: @infinite_linear( 9entry: 10 br label %loop 11 12loop: ; preds = %loop, %entry 13; CHECK-LABEL: loop: 14 %i = phi i32 [ 1, %entry ], [ %i.next, %loop ] ; <i32> [#uses=3] 15 %i.next = add i32 %i, 2 ; <i32> [#uses=1] 16 %c = icmp ne i32 %i, 100 ; <i1> [#uses=1] 17; CHECK: icmp 18; CHECK: br 19 br i1 %c, label %loop, label %loopexit 20 21loopexit: ; preds = %loop 22; CHECK-LABEL: loopexit: 23 ret i32 %i 24} 25 26;; test for (i = 1; i*i != 63; ++i) 27define i32 @infinite_quadratic() { 28; CHECK-LABEL: @infinite_quadratic( 29entry: 30 br label %loop 31 32loop: ; preds = %loop, %entry 33; CHECK-LABEL: loop: 34 %i = phi i32 [ 1, %entry ], [ %i.next, %loop ] ; <i32> [#uses=4] 35 %isquare = mul i32 %i, %i ; <i32> [#uses=1] 36 %i.next = add i32 %i, 1 ; <i32> [#uses=1] 37 %c = icmp ne i32 %isquare, 63 ; <i1> [#uses=1] 38; CHECK: icmp 39; CHECK: br 40 br i1 %c, label %loop, label %loopexit 41 42loopexit: ; preds = %loop 43; CHECK-LABEL: loopexit: 44 ret i32 %i 45} 46