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) 7 define i32 @infinite_linear() { 8 ; CHECK-LABEL: @infinite_linear( 9 entry: 10 br label %loop 11 12 loop: ; 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 21 loopexit: ; preds = %loop 22 ; CHECK-LABEL: loopexit: 23 ret i32 %i 24 } 25 26 ;; test for (i = 1; i*i != 63; ++i) 27 define i32 @infinite_quadratic() { 28 ; CHECK-LABEL: @infinite_quadratic( 29 entry: 30 br label %loop 31 32 loop: ; 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 42 loopexit: ; preds = %loop 43 ; CHECK-LABEL: loopexit: 44 ret i32 %i 45 } 46