blob: 434c4ec995251814a190539a5b4eeaf6f74cbf86 [file] [log] [blame]
Dan Gohmanf17a25c2007-07-18 16:29:46 +00001; The i induction variable looks like a wrap-around, but it really is just
2; a simple affine IV. Make sure that indvars eliminates it.
3
Dan Gohman3c7d3082009-09-11 18:01:28 +00004; RUN: opt < %s -indvars -S | grep phi | count 1
Dan Gohmanf17a25c2007-07-18 16:29:46 +00005
Tanya Lattner4c4d0b82008-03-01 09:15:35 +00006define void @foo() {
Dan Gohmanf17a25c2007-07-18 16:29:46 +00007entry:
Tanya Lattner4c4d0b82008-03-01 09:15:35 +00008 br label %bb6
Dan Gohmanf17a25c2007-07-18 16:29:46 +00009
Tanya Lattner4c4d0b82008-03-01 09:15:35 +000010bb6: ; preds = %cond_true, %entry
11 %j.0 = phi i32 [ 1, %entry ], [ %tmp5, %cond_true ] ; <i32> [#uses=3]
12 %i.0 = phi i32 [ 0, %entry ], [ %j.0, %cond_true ] ; <i32> [#uses=1]
13 %tmp7 = call i32 (...)* @foo2( ) ; <i32> [#uses=1]
14 %tmp = icmp ne i32 %tmp7, 0 ; <i1> [#uses=1]
15 br i1 %tmp, label %cond_true, label %return
Dan Gohmanf17a25c2007-07-18 16:29:46 +000016
Tanya Lattner4c4d0b82008-03-01 09:15:35 +000017cond_true: ; preds = %bb6
18 %tmp2 = call i32 (...)* @bar( i32 %i.0, i32 %j.0 ) ; <i32> [#uses=0]
19 %tmp5 = add i32 %j.0, 1 ; <i32> [#uses=1]
20 br label %bb6
Dan Gohmanf17a25c2007-07-18 16:29:46 +000021
Tanya Lattner4c4d0b82008-03-01 09:15:35 +000022return: ; preds = %bb6
23 ret void
Dan Gohmanf17a25c2007-07-18 16:29:46 +000024}
25
Tanya Lattner4c4d0b82008-03-01 09:15:35 +000026declare i32 @bar(...)
Dan Gohmanf17a25c2007-07-18 16:29:46 +000027
Tanya Lattner4c4d0b82008-03-01 09:15:35 +000028declare i32 @foo2(...)
29