1; RUN: opt -loop-unroll -S %s | FileCheck %s 2 3; extern void f(int); 4; void test1(int v) { 5; for (int i=v; i<=v+1; ++i) 6; f(i); 7; } 8; 9; We can use the nsw information to see that the tripcount will be 2, so the 10; loop should be unrolled as this is always beneficial 11 12declare void @f(i32) 13 14; CHECK-LABEL: @test1 15define void @test1(i32 %v) { 16entry: 17 %add = add nsw i32 %v, 1 18 br label %for.body 19 20for.body: 21 %i.04 = phi i32 [ %v, %entry ], [ %inc, %for.body ] 22 tail call void @f(i32 %i.04) 23 %inc = add nsw i32 %i.04, 1 24 %cmp = icmp slt i32 %i.04, %add 25 br i1 %cmp, label %for.body, label %for.end 26 27; CHECK: call void @f 28; CHECK-NOT: br i1 29; CHECK: call void @f 30for.end: 31 ret void 32} 33