| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- ; RUN: opt < %s -indvars -S | FileCheck %s
- ; This tests that the IV is not recomputed outside of the loop when it is known
- ; to be computed by the loop and used in the loop any way. In the example below
- ; although a's value can be computed outside of the loop, there is no benefit
- ; in doing so as it has to be computed by the loop anyway.
- ;
- ; extern void func(unsigned val);
- ;
- ; void test(unsigned m)
- ; {
- ; unsigned a = 0;
- ;
- ; for (int i=0; i<186; i++) {
- ; a += m;
- ; func(a);
- ; }
- ;
- ; func(a);
- ; }
- declare void @func(i32)
- ; CHECK-LABEL: @test(
- define void @test(i32 %m) nounwind uwtable {
- entry:
- br label %for.body
- for.body: ; preds = %for.body, %entry
- %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
- %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
- %add = add i32 %a.05, %m
- ; CHECK: tail call void @func(i32 %add)
- tail call void @func(i32 %add)
- %inc = add nsw i32 %i.06, 1
- %exitcond = icmp eq i32 %inc, 186
- br i1 %exitcond, label %for.end, label %for.body
- for.end: ; preds = %for.body
- ; CHECK: for.end:
- ; CHECK-NOT: mul i32 %m, 186
- ; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
- ; CHECK-NEXT: tail call void @func(i32 %add.lcssa)
- tail call void @func(i32 %add)
- ret void
- }
- ; CHECK-LABEL: @test2(
- define i32 @test2(i32 %m) nounwind uwtable {
- entry:
- br label %for.body
- for.body: ; preds = %for.body, %entry
- %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
- %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ]
- %add = add i32 %a.05, %m
- ; CHECK: tail call void @func(i32 %add)
- tail call void @func(i32 %add)
- %inc = add nsw i32 %i.06, 1
- %exitcond = icmp eq i32 %inc, 186
- br i1 %exitcond, label %for.end, label %for.body
- for.end: ; preds = %for.body
- ; CHECK: for.end:
- ; CHECK-NOT: mul i32 %m, 186
- ; CHECK:%add.lcssa = phi i32 [ %add, %for.body ]
- ; CHECK-NEXT: ret i32 %add.lcssa
- ret i32 %add
- }
|