Mercurial > hg > CbC > CbC_llvm
comparison test/Transforms/IndVarSimplify/dont-recompute.ll @ 0:95c75e76d11b LLVM3.4
LLVM 3.4
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 12 Dec 2013 13:56:28 +0900 |
parents | |
children | c2174574ed3a |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:95c75e76d11b |
---|---|
1 ; RUN: opt < %s -indvars -S | FileCheck %s | |
2 | |
3 ; This tests that the IV is not recomputed outside of the loop when it is known | |
4 ; to be computed by the loop and used in the loop any way. In the example below | |
5 ; although a's value can be computed outside of the loop, there is no benefit | |
6 ; in doing so as it has to be computed by the loop anyway. | |
7 ; | |
8 ; extern void func(unsigned val); | |
9 ; | |
10 ; void test(unsigned m) | |
11 ; { | |
12 ; unsigned a = 0; | |
13 ; | |
14 ; for (int i=0; i<186; i++) { | |
15 ; a += m; | |
16 ; func(a); | |
17 ; } | |
18 ; | |
19 ; func(a); | |
20 ; } | |
21 | |
22 declare void @func(i32) | |
23 | |
24 ; CHECK-LABEL: @test( | |
25 define void @test(i32 %m) nounwind uwtable { | |
26 entry: | |
27 br label %for.body | |
28 | |
29 for.body: ; preds = %for.body, %entry | |
30 %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] | |
31 %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] | |
32 %add = add i32 %a.05, %m | |
33 ; CHECK: tail call void @func(i32 %add) | |
34 tail call void @func(i32 %add) | |
35 %inc = add nsw i32 %i.06, 1 | |
36 %exitcond = icmp eq i32 %inc, 186 | |
37 br i1 %exitcond, label %for.end, label %for.body | |
38 | |
39 for.end: ; preds = %for.body | |
40 ; CHECK: for.end: | |
41 ; CHECK-NOT: mul i32 %m, 186 | |
42 ; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] | |
43 ; CHECK-NEXT: tail call void @func(i32 %add.lcssa) | |
44 tail call void @func(i32 %add) | |
45 ret void | |
46 } | |
47 | |
48 ; CHECK-LABEL: @test2( | |
49 define i32 @test2(i32 %m) nounwind uwtable { | |
50 entry: | |
51 br label %for.body | |
52 | |
53 for.body: ; preds = %for.body, %entry | |
54 %i.06 = phi i32 [ 0, %entry ], [ %inc, %for.body ] | |
55 %a.05 = phi i32 [ 0, %entry ], [ %add, %for.body ] | |
56 %add = add i32 %a.05, %m | |
57 ; CHECK: tail call void @func(i32 %add) | |
58 tail call void @func(i32 %add) | |
59 %inc = add nsw i32 %i.06, 1 | |
60 %exitcond = icmp eq i32 %inc, 186 | |
61 br i1 %exitcond, label %for.end, label %for.body | |
62 | |
63 for.end: ; preds = %for.body | |
64 ; CHECK: for.end: | |
65 ; CHECK-NOT: mul i32 %m, 186 | |
66 ; CHECK:%add.lcssa = phi i32 [ %add, %for.body ] | |
67 ; CHECK-NEXT: ret i32 %add.lcssa | |
68 ret i32 %add | |
69 } |